记录消息时,例如:
log.error("This is a message");
在登录文件之前,消息将按布局格式化。例如:
2014-12-12 13:45:18错误这是一条消息
如何以编程方式获取此格式化消息?
我正在使用JAVA和log4j。
感谢。
编辑:
我认为一种解决方案是以编程方式生成LoggingEvent并调用我的自定义布局的格式方法,但我认为它不会具有相同的时间戳。
答案 0 :(得分:0)
我将假设您正在使用log4j 2(没有得到评论的声誉要求澄清 - 对于log4j 1.2,答案会有很大不同)。下面的解决方案使您可以以编程方式访问String对象,该对象包含与输出到文件的消息完全相同的字符串。
在这种情况下 - 您可以按如下方式获取实际格式化的字符串:
myFactory = Logger.getMessageFactory();
String formattedCopyOfMessage = myFactory.newMessage("This is a message").getFormattedString();
这是一个不寻常的用例。
注意 - 我建议 的方法可以让您访问记录器生成的实际对象,它是一个不同的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();