さて、私はメモリアペンダー(コンソールまたはファイルの代わりにArrayListにログを記録する単なるロガー)を作成しようとしていますが、今のところ、コンソールへの出力を無効にしたいと考えています。
質問とウェブサイト、これまで読んだことがあります(しかし、まだわかりません..
- StackOverFlow の質問 log4j: 特定のクラスの出力を特定のアペンダーに記録する
- StackOverFlow Question log4j : log4j コンソールのログ記録を無効にし、ファイルのログ記録を有効にします
- Coder Launch: log4j: コンソールへのロギングを停止
私が達成しようとしていることに関するすべてのセグメントが含まれていますが、まだ混乱しています。
また、 Logback または Log4j Additivity Explainedからこのセグメントを読みました。
ただし、ロガー X のアディティビティ フラグが false または無効に設定されている場合、 x.debug() を呼び出すと、ファイルにのみログが記録されます。
理論的には私のlog4j.properties
ファイル
log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %5p %c (%F:%L) - %m%n
#hide the Log4jMemoryAppender from console
log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender= ERROR, MEMORY_APPENDER
log4j.appender.MEMORY_APPENDER=nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender.Log4jMemoryAppender
log4j.additivity.rootLogger = false
log4j.additivity.console = false
log4j.additivity.MEMORY_APPENDER=false
のみを印刷し、 、および***Hello World
から他のものを除外する必要があります。MEMORY_APPENDER
rootLogger
console
package nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender;
import java.util.ArrayList;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Log4jMemoryAppender extends AppenderSkeleton {
ArrayList<LoggingEvent> eventsList = new ArrayList();
public static void main (String [] args) {
PropertyConfigurator.configure("Lib/log4j.properties");
Log4jMemoryAppender app = new Log4jMemoryAppender();
Logger logger = Logger.getLogger(Log4jMemoryAppender.class);
logger.setLevel(Level.INFO);
logger.addAppender(app);
logger.info("Hello World");
logger.debug("Level DEBUG Is SET");
for (LoggingEvent le: app.eventsList) {
System.out.println("***" + le.getMessage());
}
}
@Override
protected void append(LoggingEvent event) {
eventsList.add(event);
}
public void close() {
}
public boolean requiresLayout() {
return false;
}
}
しかし、そうではありません...
(出典: iforce.co.nz )