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

如何将log4j2与不同的日志文件一起使用?[副本]

宫铭
2023-03-14

我有一个log4j2.xml文件,我配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
    <Property name="log-path">${sys:catalina.base}/logs</Property>
</Properties>
<Appenders>

    <!-- console appender -->
    <Console name="console-log" target="SYSTEM_OUT">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} - %msg%n"/>
    </Console>

    <!-- file appender -->
    <RollingFile name="commons-log" fileName="${log-path}/commons.log"
                 filePattern="${log-path}/commons-%d{yyyy-MM-dd}.log">
        <!-- log pattern -->
        <PatternLayout>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
        </PatternLayout>

        <!-- set file size policy -->
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="5 MB" />
        </Policies>
    </RollingFile>
    <RollingFile name="analytics-log" fileName="${log-path}/analytics.log"
                 filePattern="${log-path}/analytics-%d{yyyy-MM-dd}.log">
        <PatternLayout>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    </RollingFile>
</Appenders>
<Loggers>
    <Logger name="com.test.app" level="debug" additivity="false">
        <appender-ref ref="commons-log" level="debug"/>
        <appender-ref ref="analytics-log" level="warn"/>
        <appender-ref ref="console-log" level="debug"/>
    </Logger>
    <Root level="info" additivity="false">
        <AppenderRef ref="console-log"/>
    </Root>
</Loggers>

现在,我想自定义将数据记录到commons中。日志和分析。日志文件。

java中的示例:

private static final Logger logCommon = LogManager.getLogger("commons-log");
private static final Logger logAnalytics = LogManager.getLogger("analytics-log");

我想在需要时自定义将日志写入每个文件,例如:

logCommons.info ("Need it save into commons.log file");
logAnalytics.info ("Only save into analytics.log file");

问题:我怎么做?请帮助我解决log4j2中的所有问题。xml文件和Java代码示例

谢谢!

共有3个答案

郭修平
2023-03-14

您可以按如下方式配置记录器:

    String log4jfile = topDir + "log4j2.xml";
    PropertyConfigurator.configure(log4jfile);        

其中log4jfile是要使用的配置文件的路径。如果不这样做,它只会有默认行为。

楮庆
2023-03-14

我认为问题来自于这样一个事实,即你有你所有的应用程序ref在一个记录器。

此外,记录器名称根据您在java代码中给记录器的名称过滤日志条目。

您在示例中使用了:

private static final Logger logCommon = LogManager.getLogger("commons-log");
private static final Logger logAnalytics = LogManager.getLogger("analytics-log");

所以,你的伐木工人需要有相同的名字。您可以做的是:

<Logger name="com.test.app" level="debug" additivity="false">
    <appender-ref ref="console-log" level="debug"/>
    <!-- you can put other appender references here if you want to log you 
         app logs in a specific file -->
</Logger>
<Logger name="commons-log" level="debug" additivity="false">
    <appender-ref ref="commons-log" level="debug"/>>
</Logger>
<Logger name="analytics-log" level="debug" additivity="false">
    <appender-ref ref="analytics-log" level="warn"/>
</Logger>

这样,它将根据日志记录者的名称将日志拆分为不同的文件。

希望有帮助!

龙亮
2023-03-14

如下所示,您正在向同一记录器中的两个文件写入调试日志

 <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
    <Property name="log-path">${sys:catalina.base}/logs</Property>
</Properties>
<Appenders>

    <!-- console appender -->
    <Console name="console-log" target="SYSTEM_OUT">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} - %msg%n"/>
    </Console>

    <!-- file appender -->
    <RollingFile name="commons-log" fileName="${log-path}/commons.log"
                 filePattern="${log-path}/commons-%d{yyyy-MM-dd}.log">
        <!-- log pattern -->
        <PatternLayout>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
        </PatternLayout>

        <!-- set file size policy -->
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="5 MB" />
        </Policies>
    </RollingFile>
    <RollingFile name="analytics-log" fileName="${log-path}/analytics.log"
                 filePattern="${log-path}/analytics-%d{yyyy-MM-dd}.log">
        <PatternLayout>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        </Policies>
    </RollingFile>
</Appenders>
<Loggers>
    <Logger name="com.test.app.commons" level="debug" additivity="false">
        <appender-ref ref="commons-log" level="debug"/>
        <appender-ref ref="analytics-log" level="warn"/>
    </Logger>
    <Logger name="com.test.app.console" level="debug" additivity="false">       
        <appender-ref ref="console-log" level="debug"/>
        <appender-ref ref="analytics-log" level="warn"/>
    </Logger>
    <Root level="info" additivity="false">
        <AppenderRef ref="console-log"/>
    </Root>
</Loggers>
 类似资料: