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

在log4j2属性文件中将单独的日志级别记录到单独的文件中

仉刚洁
2023-03-14
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="log-path">logs</Property>
</Properties>
<Appenders>
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
</Console>
<RollingFile name="trace-log" fileName="${log-path}/mycuteblog-trace.log"
filePattern="${log-path}/mycuteblog-trace-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
<RollingFile name="error-log" fileName="${log-path}/mycuteblog-error.log"
filePattern="${log-path}/mycuteblog-error-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.mycuteblog.log4j2" level="debug" additivity="false">
<appender-ref ref="trace-log" level="debug"/>
<appender-ref ref="error-log" level="error"/>
<appender-ref ref="console-log" level="debug"/>
</Logger>
<Root level="info" additivity="false">
<AppenderRef ref="console-log"/>
</Root>
</Loggers>
</Configuration>

提前致谢

共有1个答案

童子明
2023-03-14

ThresholdFilter用于根据日志级别筛选消息。为了获得不同的日志文件,每个附加器都应该有适当的阈值筛选器。它应该是这样的(使用xml):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="log-path">logs</Property>
        <Property name="log-pattern">[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1}- %msg%n"/</Property>
    </Properties>
    <Appenders>
        <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>${log-pattern}</pattern>
            </PatternLayout>
        </Console>
        <RollingFile name="trace-log" fileName="${log-path}/mycuteblog-trace.log" filePattern="${log-path}/mycuteblog-trace-%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout>
                <pattern>${log-pattern}</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
        <RollingFile name="error-log" fileName="${log-path}/mycuteblog-error.log" filePattern="${log-path}/mycuteblog-error-%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>${log-pattern}</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>
    ...

注意,日志模式被定义为一个属性,因为所有三个追加都使用了相同的模式。

我不能帮助配置作为一个属性文件,我从来没有使用过它。

 类似资料:
  • 我使用带有路由附加器和包装器的log4j2xml配置。我将传递不同的appender,以记录项目不同部分的不同文件。我的配置看起来像这样。 问题是,我在第二个路由中获得了外部库日志(那些没有附加程序的)和我的项目日志,尽管我只想要外部日志。

  • ,日志记录将进入一个文件; (路径)/service_name/service_name.log 我想用logback复制这种行为,但在logback.xml配置中获取“logger”名称时遇到了真正的困难。它可以在log encoder.pattern中看到,即“%d%-5level%logger{35}-%msg%n”。

  • 假设我用Quartz-Scheduler调度了2个作业 作业1 作业2 到目前为止,两个作业的日志输出都转储在同一个日志文件中。我想将这2个作业的输出记录到两个不同的文件中 日志文件-job1.txt 日志文件-job2.txt Quartz-Scheduler(主线程日志文件,单独) jogfile-job1.txt(单独的日志文件) jogfile-job2.txt(单独的日志文件) 谢谢你

  • 我使用Spring Boot和log4j2进行日志记录,因为我希望日志写在文件上而不是控制台上。所以我实现了log4j2.properties并将其保存在Spring Boot项目的资源文件夹下。

  • 为了使问题更加具体--我尝试的配置: 我想记录到这个单独性能日志的类位于com.myapp.common.logging下面...

  • 在我的log4j2配置中,我将一个AsyncRoot设置为INFO,因为我想在一个文件中记录这个级别和更高的级别。 但我也希望将错误级别记录到特定的文件和在AsyncRoot中配置的appender中 null 谢谢你