获取格式化日志消息

时间:2014-12-12 14:04:08

标签: java log4j

记录消息时,例如:

log.error("This is a message");

在登录文件之前,消息将按布局格式化。例如:

2014-12-12 13:45:18错误这是一条消息

如何以编程方式获取此格式化消息?

我正在使用JAVA和log4j。

感谢。

编辑:

我认为一种解决方案是以编程方式生成LoggingEvent并调用我的自定义布局的格式方法,但我认为它不会具有相同的时间戳。

2 个答案:

答案 0 :(得分:0)

我将假设您正在使用log4j 2(没有得到评论的声誉要求澄清 - 对于log4j 1.2,答案会有很大不同)。下面的解决方案使您可以以编程方式访问String对象,该对象包含与输出到文件的消息完全相同的字符串。

在这种情况下 - 您可以按如下方式获取实际格式化的字符串:

  1. 获取MessageFactory:myFactory = Logger.getMessageFactory();
  2. 致电String formattedCopyOfMessage = myFactory.newMessage("This is a message").getFormattedString();
  3. 这是一个不寻常的用例。

    注意 - 我建议 的方法可以让您访问记录器生成的实际对象,它是一个不同的String对象,它将包含相同的字符串字符。

答案 1 :(得分:0)

你的问题不明确。你的意思是如何以编程方式设置log4j appender的布局?如果是这样,你将如何做到这一点

  ConsoleAppender console = new ConsoleAppender(); //create appender
  //configure the appender
  String PATTERN = "%d [%p|%c|%C{1}] %m%n";
  console.setLayout(new PatternLayout(PATTERN)); 
  console.setThreshold(Level.FATAL);
  console.activateOptions();
  //add appender to any Logger (here is root)
  Logger.getRootLogger().addAppender(console);

然后,您可以使用

删除根记录器上的所有现有appender
 Logger.getRootLogger().getLoggerRepository().resetConfiguration();