Java 获取格式化日志消息
记录消息时,例如:Java 获取格式化日志消息,java,log4j,Java,Log4j,记录消息时,例如: log.error("This is a message"); 消息在登录到文件之前由布局格式化。例如: log.error("This is a message"); 2014-12-12 13:45:18错误这是一条信息 如何以编程方式获取此格式化消息 我将JAVA与log4j一起使用 谢谢 编辑: 我认为一种解决方案是以编程方式生成LoggingEvent并调用我的自定义布局的format方法,但我认为它不会有相同的时间戳。我假设您使用的是log4j 2(没有声誉来
log.error("This is a message");
消息在登录到文件之前由布局格式化。例如:
log.error("This is a message");
2014-12-12 13:45:18错误这是一条信息
如何以编程方式获取此格式化消息
我将JAVA与log4j一起使用
谢谢
编辑:
我认为一种解决方案是以编程方式生成LoggingEvent并调用我的自定义布局的format方法,但我认为它不会有相同的时间戳。我假设您使用的是log4j 2(没有声誉来评论要求澄清-对于log4j 1.2,答案会有很大不同)。下面的解决方案为您提供了对字符串对象的编程访问,该对象包含与文件的消息输出完全相同的字符串 在本例中-您可以按如下方式获得实际的格式化字符串:
myFactory=Logger.getMessageFactory()代码>
String formattedCopyOfMessage=myFactory.newMessage(“这是一条消息”).getFormattedString()代码>
注意-我建议的方法不允许您访问记录器生成的实际对象,它是一个不同的字符串对象,将包含相同的字符串。您的问题不清楚。您是指如何以编程方式设置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();
你是说;如何查看日志配置文件中使用的格式化类?提示:这是模式设置。对不起,我使用的是1.2.OK版本。你能再解释一下你的用例吗?您可以使用WriterAppender而不是FileAppender—将消息附加到输出流,然后您可以通过编程方式访问该输出流,并(可选地)根据需要将其直接添加到文件。要做到这一点,在设置记录器时,您需要有权/被允许更改Appender。如果这符合你的情况,我会在新的答案中详细说明。如果我的问题不清楚,很抱歉。我不想以编程方式设置布局,我有一个自定义布局,我希望在执行log.error(XXXX)时获得将输出到文件的消息。对不起我的英语。