当前位置: 首页 > 知识库问答 >
问题:

根据log4j.xml中的记录器名称登录到不同的文件

陶锋
2023-03-14

我想只根据我指定的记录器名称将消息记录到文件中,因为记录器名称是作为日志消息中的参数发送的。默认情况下,所有日志文件都会被追加,而与记录器名称无关,因为我在根目录下添加了所有追加器的ref。

我的log4j.xml如下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true">
<!-- ========== appenders start here ========= -->

<appender name="operator_log" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="ImmediateFlush" value="true" />
    <param name="Append" value="true" />
    <param name="File" value="C:/SSG_Admin.log" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{DATE}|%5p|%m%n" />
    </layout>
</appender>

<appender name="security_log" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="ImmediateFlush" value="true" />
    <param name="Append" value="true" />
    <param name="File" value="C:/SSG_Security.log" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{DATE}|%5p|%m%n" />
    </layout>
</appender>

<appender name="application_log" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="ImmediateFlush" value="true" />
    <param name="Append" value="true" />
    <param name="File" value="C:/SSG_Core.log" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{DATE}|%5p|%m%n" />
    </layout>
</appender>

<!-- ========= loggers start here ========= -->
<logger name="DB_CONNECTION_ISSUE" additivity="false">
    <level value="debug" />
    <appender-ref ref="operator_log" />
    <appender-ref ref="application_log" />
</logger>
<logger name="NETWORK_ISSUE" additivity="false">
    <level value="debug" />
    <appender-ref ref="operator_log" />
    <appender-ref ref="application_log" />
</logger>
<logger name="COMMUNICATION_ISSUE" additivity="false">
    <level value="debug" />
    <appender-ref ref="operator_log" />
    <appender-ref ref="application_log" />
</logger>
<logger name="ACCESS_ISSUES" additivity="false">
    <level value="debug" />
    <appender-ref ref="security_log" />
    <appender-ref ref="application_log" />
</logger>
<logger name="CERTIFICATE_ISSUE" additivity="false">
    <level value="debug" />
    <appender-ref ref="security_log" />
    <appender-ref ref="application_log" />
</logger>

<logger name="VALIDATION_OR_DATA_ISSUE" additivity="false">
    <level value="debug" />
    <appender-ref ref="application_log" />
</logger>
<logger name="OTHER_ISSUE" additivity="false">
    <level value="debug" />
    <appender-ref ref="application_log" />
</logger>

<root>
    <priority value="debug" />
    <appender-ref ref="operator_log" />
    <appender-ref ref="security_log" />
    <appender-ref ref="application_log" />
</root>

记录器下的指定附加器只应该为我附加相应的文件。但是,所有文件都会被附加,而不管记录器名称如何。我对记录器很陌生。有什么解决方案吗...

共有1个答案

太叔富
2023-03-14

你能查一下“类别”吗?以下是一个示例:

<appender name="myFile" class="org.apache.log4j.RollingFileAppender">
    <param name="Threshold" value="INFO" />
    <param name="File" value="/abc/logs/myLog.log"/>
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="10MB" />
    <param name="MaxBackupIndex" value="100" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%r %d %-5p  [%c{1}] %m %n" />
    </layout>
</appender>

<category name="com.myFile.crs" additivity="false">
    <priority value="info" />
    <appender-ref ref="myFile" />
</category>
 类似资料:
  • 问题内容: 我正在使用logback / slf4j进行日志记录。我想解析我的日志文件以分析一些数据,所以我不想解析一个很大的大文件(主要由调试语句组成),而是要有两个记录器实例,每个实例都记录到一个单独的文件中。一种用于分析,另一种用于通用日志记录。有谁知道使用Logback或其他任何记录器是否可行? 问题答案: 很可能在logback中执行类似的操作。这是一个示例配置: 然后,您将设置两个单独

  • 问题内容: 我有一个普通的INFO级别应用日志。我需要的是另外记录所有错误级别的事件,以单独的错误日志。我正在使用这样的配置: 此配置仅记录错误。如果我首先放置信息级别记录器,则它将仅记录到一般附加程序,但错误记录器将无法工作。我想让他们两个都工作。 问题答案: 您需要做的是只有一个定义了INFO级别的定义,但是在您的两个追加器定义中,您需要相应地设置其阈值,例如 然后,将两个追加程序添加到记录器

  • 问题内容: 我的logback.xml中有这个添加器 因此,目前我将所有日志保存到一个文件中。如何使它像一个文件仅保存错误日志,而另一个文件保存所有其他日志? 我想在代码中仅使用1个logger实例,如下所示: 问题答案: 开始寻找logback类别,找到过滤器。 只需将过滤器说明添加到您的附加程序即可:

  • 如何在SL4J中配置日志记录?我的项目有很多类:class1、class2、Class3....我想做两件事:将所有类记录到一个名为FILE1的文件追加器中,并具有警告级别(class1、class2、class3...)将一个名为class1的类记录到具有调试级别的名为FILE2的文件追加器中。 问题是,当我将class1的记录器配置为具有WARN级别的FILE1 appender时,我不知道如

  • 使用log4j,我可以将日志记录到调用此方法的不同文件: “解答”哦是的,我少了一个记录器: 我可以这样选择logger: