我对java.util.Logger
有疑问。
我设置文件处理程序并更改了这样的格式:
Logger logger = Logger.getLogger("TotalLog");
FileHandler fh = new FileHandler("log/total.%g.log", 5242880, 20, true);
fh.setFormatter(new Formatter() {
@Override
public String format(LogRecord record) {
return new Date(record.getMillis()) + " " + record.getLevel() + ": " + record.getMessage() + "\n";
}
});
logger.addHandler(fh);
logger.log(Level.INFO, "****************************************");
问题是格式化程序会影响日志文件。但是控制台没有以这种格式显示消息。此外,像这样的代码在控制台中工作,但在文件中不起作用。
logger.log(Level.INFO, "{0} user folders registered.", userfolders.size());
这意味着在控制台上进行打印:4 user folders registered.
但是存档:{0} user folders registered.
如何解决这些问题?
修改:
好的是解决方案,我找到了一个链接,显示如何访问记录器的默认控制台处理程序:logging in java
因此,我创建了一个名为LogFormatter
的新类:
public class LogFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return new Date(record.getMillis()) + " " + record.getLevel() + ": " + record.getMessage() + "\n";
}
}
稍微更改了代码:
Logger logger = Logger.getLogger("TotalLog");
FileHandler fh = new FileHandler("log/total.%g.log", 5242880, 20, true);
fh.setFormatter(new LogFormatter());
logger.addHandler(fh);
logger.getParent().getHandlers()[0].setFormatter(new LogFormatter());
logger.log(Level.INFO, "****************************************");
但是,我无法弄清楚如何进行参数化日志记录。与此同时,我将代码替换为:
logger.log(Level.INFO, userfolders.size() + " user folders registered.");
知道怎么做吗?
答案 0 :(得分:0)
从formatMessage
班级拨打Formatter
(或根据您的需要进行复制和调整),例如:
public class LogFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return new Date(record.getMillis()) + " " + record.getLevel() + ": " + super.formatMessage(record) + "\n";
}
}
在http://docs.oracle.com/javase/7/docs/api/java/util/logging/Formatter.html上查看format
方法的评论:
public abstract String format(LogRecord record)
格式化给定的日志记录并返回格式化的字符串。
生成的格式化字符串通常包含本地化和 LogRecord消息字段的格式化版本。建议 使用formatMessage(java.util.logging.LogRecord)方便 本地化和格式化消息字段的方法。