Java日志记录:控制台与文件输出

时间:2014-09-01 01:47:24

标签: java logging

我对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.");

知道怎么做吗?

1 个答案:

答案 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)方便   本地化和格式化消息字段的方法。

相关问题