是否可以使用java.util.logging将不同的信息写入两个不同的日志文件?我能够创建两个不同的日志文件,但它们都包含相同的条目。我不会将我的Logger创建为静态。我基本上拥有自己的日志记录类,并且我为两个不同的记录器实例化了两次,但同样,两个文件都写入了相同的信息。
答案 0 :(得分:0)
将两个FileHandler添加到记录器中。
final Logger logger = Logger.getRootLogger();
FileHandler handler1 = new FileHandler("foo");
FileHandler handler2 = new FileHandler("bar");
logger.addHandler(handler1);
logger.addHandler(handler1);
另见LogManager。
仅供参考:Logback有更好的配置选项。这就是大多数人使用的。
答案 1 :(得分:0)
尝试设置两个客户记录器后,尝试从根记录器中删除所有处理程序。
foreach (Apple apple in consumables.consumables)
{
renderer.DrawApple(apple);
}
您的客户处理人员可能配置不当,一切都将转到您的根记录器。
答案 2 :(得分:0)
是否可以使用java.util.logging将不同的信息写入两个不同的日志文件?
是。如果要捕获有关兄弟姐妹的信息,则必须将处理程序附加到记录器树中的不同位置。示例logging.properties
如下所示:
java.util.logging.FileHandler.pattern=some%u.log
my.app.feature1.handlers=java.util.logging.FileHandler
my.app.feature1.useParentHandlers=false
my.app.feature2.handlers=java.util.logging.FileHandler
my.app.feature2.useParentHandlers=false
如果您需要将日志除以level或filter by some other custom property,则应使用LogManager config
option。
根据文件:
属性“config”。此属性旨在允许运行任意配置代码。该属性定义了一个以空格或逗号分隔的类名列表。将为每个命名类创建一个新实例。每个类的默认构造函数可以执行任意代码来更新日志记录配置,例如设置记录器级别,添加处理程序,添加过滤器等。
示例类将是:
package com.app.config;
import java.util.logging.FileHandler;
import java.util.logging.Filter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public final class ErrorAndInfoHandlers {
/**
* Don't allow G.C. to remove our settings.
*/
private static final Logger[] PIN = new Logger[]{
Logger.getLogger("app.feature"),
Logger.getLogger("app.system")
};
public ErrorAndInfoHandlers() throws Throwable {
installSystem();
installApp();
}
private void installSystem() throws Throwable {
FileHandler h = new FileHandler();
h.setLevel(Level.ALL);
h.setFilter(new LessThanFilter(Level.INFO));
Logger.getLogger("app.system").addHandler(h);
}
private void installApp() throws Throwable {
FileHandler h = new FileHandler();
h.setLevel(Level.INFO);
Logger.getLogger("app.feature").addHandler(h);
}
private static class LessThanFilter implements Filter {
private final Level upper;
LessThanFilter(final Level upper) {
this.upper = upper;
}
@Override
public boolean isLoggable(LogRecord record) {
return record.getLevel().intValue() < upper.intValue();
}
}
}