我有一个关于java.util.Logger
的问题。 我设置了文件处理程序,改变这样的格式:Java日志记录:控制台与文件输出
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.");
任何想法该怎么做?
你为什么要为此编写代码?您可以配置格式化模式(甚至以编程方式)以实现相同的结果。事实上,你可能打破了替代逻辑。 – Thilo 2014-09-01 01:56:33
默认的日志中查找此 DATE CLASS:方法 LEVEL:MESSAGE 不过,我需要这种格式 日期级别:MESSAGE – Batbayar 2014-09-01 02:07:15
一些例子为格式字符串:http://docs.oracle.com/javase/7/docs/api /java/util/logging/SimpleFormatter.html#format%28java.util.logging.LogRecord%29但java.util.Logging非常痛苦。我建议看看SLF4J。 – Thilo 2014-09-01 02:16:22