【问题标题】:log4j not writing into file but its writing into consolelog4j 不写入文件,但写入控制台
【发布时间】:2017-08-27 00:56:11
【问题描述】:

我是基于 Linux 的系统中的一个小型应用程序,我正在使用 slf4j 库作为记录器

导入 org.slf4j.Logger; 导入 org.slf4j.LoggerFactory;

我可以看到日志在控制台中可见,但没有附加到日志文件中。

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="INFO" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%d{ABSOLUTE}][%-5p][%-10t]%m%n" />
    </layout>
</appender>






<!-- EXAMPLE logging setup NOTES: 1. files are written to "./logs/<filename>". 
    You must setup the environment so that ./logs is a symlink to the correct 
    location according to the EXAMPLE log standard. For example, "/opt/logs/". 
    If that's not possible, change the File setting in each appender appropriately. -->

<appender name="EXAMPLE_AUDIT" class="org.apache.log4j.RollingFileAppender">
    <param name="threshold" value="INFO" />
    <param name="File" value="./logs/audit.log" />
    <param name="MaxFileSize" value="128MB" />
    <param name="MaxBackupIndex" value="20" />
    <layout class="com.rsg.ova.logging.log4j.EXAMPLELayout">
        <param name="ConversionPattern" value="EXAMPLE_AUDIT" />
    </layout>
</appender>

<appender name="EXAMPLE_METRIC" class="org.apache.log4j.RollingFileAppender">
    <param name="threshold" value="DEBUG" />
    <param name="File" value="./logs/metric.log" />
    <param name="MaxFileSize" value="128MB" />
    <param name="MaxBackupIndex" value="10" />
    <layout class="com.rsg.ova.logging.log4j.EXAMPLELayout">
        <param name="ConversionPattern" value="EXAMPLE_METRIC" />
    </layout>
</appender>

<appender name="EXAMPLE_ERROR" class="org.apache.log4j.RollingFileAppender">
    <param name="threshold" value="ERROR" />    <!-- only WARN and ERROR are allowed in this log -->
    <param name="File" value="./logs/error.log" />
    <param name="MaxFileSize" value="128MB" />
    <param name="MaxBackupIndex" value="10" />
    <layout class="com.rsg.ova.logging.log4j.EXAMPLELayout">
        <param name="ConversionPattern" value="EXAMPLE_ERROR" />
    </layout>
</appender>

<appender name="EXAMPLE_DEBUG" class="org.apache.log4j.RollingFileAppender">
    <param name="threshold" value="DEBUG" />
    <param name="File" value="./logs/debug.log" />
    <param name="MaxFileSize" value="128MB" />
    <param name="MaxBackupIndex" value="20" />
    <layout class="com.rsg.ova.logging.log4j.EXAMPLELayout">
        <param name="ConversionPattern" value="EXAMPLE_DEBUG" />
    </layout>
</appender>


<logger name="com.rsg.EXAMPLE.audit" additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_AUDIT" />
</logger>

<logger name="com.rsg.EXAMPLE.metrics" additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_METRIC" />
</logger>

<logger name="com.rsg.EXAMPLE.error" additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_ERROR" />
</logger>

<logger name="com.rsg.EXAMPLE.debug" additivity="false">
    <level value="info" />
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="EXAMPLE_DEBUG" />
</logger>


<root>
    <level value="DEBUG" />
    <appender-ref ref="EXAMPLE_DEBUG" />
    <appender-ref ref="CONSOLE" />

</root>

<logger name="org.openEXAMPLE.agcp.commonFunction.input"
    additivity="false">
    <level value="INFO" />
    <appender-ref ref="CONSOLE" />
</logger>

<logger name="org.openEXAMPLE.agcp.commonFunction.output"
    additivity="false">
    <level value="INFO" />
    <appender-ref ref="CONSOLE" />

</logger>

<logger name="org.openEXAMPLE.agcp.commonFunction.error"
    additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="EXAMPLE_ERROR" />
</logger>

<!-- The EXAMPLE logging standard has four specific classes of logging that 
    are unrelated to subsystem logger names. If you want them activated, uncomment 
    this block. -->
<logger name="com.rsg.EXAMPLE.audit" additivity="false">
    <level value="info" />
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="EXAMPLE_AUDIT" />
</logger>

<logger name="com.rsg.EXAMPLE.metrics" additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_METRIC" />
</logger>

<logger name="com.rsg.EXAMPLE.error" additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_ERROR" />
</logger>

<logger name="com.rsg.EXAMPLE.debug" additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_DEBUG" />
</logger>


<logger name="com.rsg.ova.apiClient.http.HttpClient" additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_ERROR" />
    <appender-ref ref="CONSOLE" />
</logger>

<logger name="com.rsg.ova.roman.client.impl.romanSimplerBatchPublisher"
    additivity="false">
    <level value="info" />
    <appender-ref ref="EXAMPLE_ERROR" />
    <appender-ref ref="CONSOLE" />
</logger>

【问题讨论】:

    标签: java logging log4j slf4j log4j2


    【解决方案1】:

    已经确定我必须包含 sl4j-log4j 桥接 jar 来解决上述问题,我包含 log4j 和 sl4j 单独的 jar,因此我看不到编译错误,但桥接不满足。

    删除单个 jar 并添加桥接 jar 后,问题已解决。

    【讨论】:

      【解决方案2】:

      问题中显示的配置是 log4j 1.2 格式。

      log4j2.xml 的格式不同。它是基于插件的,因此您不再需要指定附加程序的类名。

      请参阅 Log4j2 manual。它有许多示例配置。

      【讨论】:

        【解决方案3】:

        您似乎错过了 xml 文件中的根标记。请找到以下代码将日志写入文件。

        <appender name="file" class="org.apache.log4j.RollingFileAppender">
            <param name="append" value="false" />
            <param name="maxFileSize" value="128MB" />
            <param name="maxBackupIndex" value="20" />
            <param name="file" value="./logs/audit.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="INFO" />
            <appender-ref ref="file" />
        </root>
        

        【讨论】:

        • 已经添加了如下的根标签,但是没有运气
        【解决方案4】:

        我已经检查了您的 logback.xml 文件配置。似乎缺少根标记(“配置”)。你可以添加并检查它吗?

        参考https://logback.qos.ch/manual/configuration.html

        【讨论】:

        • 再尝试一件事,使用 log4j.properties 而不是 log4j.xml。如果你愿意,我可以为你提供属性文件。
        • 我们必须根据项目要求使用 log4j2.xml
        • 抱歉。我以为你正在使用 logback。如果你使用 log4j2 方式,那么配置应该放入 log4j2.xml 文件而不是 log4j.xml。
        • 对不起,我必须使用 log4j.xml,
        • 你修好了还是还在?
        猜你喜欢
        • 2013-09-09
        • 1970-01-01
        • 2011-03-23
        • 2017-06-10
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 2014-09-26
        相关资源
        最近更新 更多