Log4J:将Stderr消息重定向到主日志文件

时间:2017-01-16 17:50:42

标签: java logging log4j

我有一个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窗口,因为这是用户的菜单系统。

1 个答案:

答案 0 :(得分:1)

我在这里发现了这个问题,接受的答案是我需要的答案: log4j redirect stdout to DailyRollingFileAppender

原来我试图找到一种方法来修复它在XML配置中实际上我应该尝试通过用System.setErr()重定向stdErr来修复代码。