在log4j.xml中的单个appender中使用多个记录器

时间:2015-12-17 11:05:31

标签: java log4j

我想在单个appender上使用多个记录器。

假设我在我的项目中使用3个不同的库,有3个不同的记录器。

但是我想把这些库的所有日志都放在单个文件中。现在不行。

我查看了下面的stackoverflow问题,但我在Java中也做不到(这个问题已经回答了grails)

Using multiple loggers on a single appender

这是我的log4j.xml文件: -

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
    xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="${log.file}" />
        <param name="append" value="true" />
        <param name="encoding" value="UTF-8" />
        <param name="MaxFileSize" value="50MB"/>
        <param name="MaxBackupIndex" value="20"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n" />
        </layout>
    </appender>
    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender" >
        <param name="BufferSize" value="500000"/>
        <param name="Blocking" value="false"/>
        <appender-ref ref="fileAppender"/>
    </appender>
    <logger name="ABCDEF" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="fileAppender"/>
    </logger>
    <logger name="GHIJKLM" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="ASYNC"/>
    </logger>
    <logger name="NOPQURST" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="ASYNC"/>
    </logger>
</log4j:configuration>

那么在Java中该怎么做?

注意: -

我无法转移到像slf4j这样的其他日志记录。

在辛克莱的评论之后: -

What is the significance of log4j.rootLogger property in log4j.properties file. What happens if i don't use this property?

此问题解释了根记录器。我想为整个应用程序创建一个自定义appender,可供多个记录器使用。

编辑2

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
        <!-- The active file to log to -->
        <param name="file" value="${log.file}" />
        <param name="append" value="true" />
        <param name="encoding" value="UTF-8" />
        <!-- Max File Size 50MB-->
        <param name="MaxFileSize" value="50MB"/>
        <!-- Keep 20 backup files -->
        <param name="MaxBackupIndex" value="20"/>
        <layout class="org.apache.log4j.PatternLayout">
            <!-- The log message pattern -->
            <param name="ConversionPattern" value="%m%n" />
        </layout>
    </appender>
    <appender name="ASYNC" class="org.apache.log4j.AsyncAppender" >
        <param name="BufferSize" value="500000"/>
        <param name="Blocking" value="false"/>
        <appender-ref ref="fileAppender"/>
    </appender>
    <appender name="customAppender" class="org.apache.log4j.AsyncAppender">
        <appender-ref ref="fileAppender" />
    </appender>
    <logger name="com.company.project" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="customAppender"/>
    </logger>
    <logger name="org.jboss.netty" additivity="false">
        <level value="INFO" />
        <appender-ref ref="customAppender" />
    </logger>
    <root>
        <priority value="INFO" />
        <appender-ref ref="consoleAppender" />
    </root>
</log4j:configuration>

我正在使用的文件...仍然与org.jboss.netty相关的任何错误或异常都会进入out文件而非日志文件。

更多帮助????

0 个答案:

没有答案