我有一个关于 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 个用户文件夹。
但在文件中:已注册{0} 个用户文件夹。
如何解决这些问题?
编辑:
好的,这是解决方案,我找到了一个链接,显示如何访问记录器的默认控制台处理程序: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.");
知道如何做到这一点吗?
最佳答案
从 Formatter
类调用 formatMessage
(或根据需要复制并调整它),例如:
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)
Format the given log record and return the formatted string.
The resulting formatted String will normally include a localized and formatted version of the LogRecord's message field. It is recommended to use the formatMessage(java.util.logging.LogRecord) convenience method to localize and format the message field.
关于Java日志记录: console vs.文件输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597916/