我有一个cmd线工具,我们很快就会部署到客户手中。我在cmd窗口中出现了一个令人讨厌的StdErr消息,这个消息来自我正在消费的框架,并且我正在努力将该消息重定向到使用Log4J的日志文件。
这是我的log4j.xml文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration debug="false" xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="false" />
<param name="maxFileSize" value="500MB" />
<param name="maxBackupIndex" value="5" />
<param name="file" value="test.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="file" />
</root>
</log4j:configuration>
我用Google搜索过,我找不到任何对我有类似情况的人。
我已使用以下行重定向它,但我宁愿使用log4j重定向它,所以一切都在同一个文件中
File file = new File("error.log");
FileOutputStream fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
System.setErr(ps);
我无法使用JBoss或tomcat设置重定向,因为我没有使用容器。它是直接在CMD线上的JAR。
注意:我希望STDOUT仍然转到CMD窗口,因为这是用户的菜单系统。
答案 0 :(得分:1)
我在这里发现了这个问题,接受的答案是我需要的答案: log4j redirect stdout to DailyRollingFileAppender
原来我试图找到一种方法来修复它在XML配置中实际上我应该尝试通过用System.setErr()
重定向stdErr来修复代码。