山姆,
我不确定您要的是 log4j 的默认行为。您可以做的是,在您的应用程序属性文件中添加诸如 log4j.rootLogger=DEBUG 之类的属性,并指向 log4j 以将您的应用程序属性文件用作 log4j 属性文件。
您可以通过指定以下 vm 参数来强制 log4j 获取其配置文件:
java -Dlog4j.configuration=resources/log4j_dev.properties
或者
java -Dlog4j.configuration=file:/resources/log4j_dev.properties
log4j 属性文件的示例如下:
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
您还可以对属性文件使用 xml 格式。
如果您想以编程方式(在 rumtime 上)为 log4j 添加记录器,您需要执行以下操作:
ConsoleAppender console = new ConsoleAppender(); //create appender
//configure the appender
String PATTERN = "%d [%p|%c|%C{1}] %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.FATAL);
console.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(console);
FileAppender fa = new FileAppender();
fa.setName("FileLogger");
fa.setFile("mylog.log");
fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
/add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(fa)
//repeat with all other desired appenders
希望这可以帮助。