简体   繁体   English

log4j vs log4j2:登录到其他文件

[英]log4j vs log4j2: log to different file

Using log4j I can log to different files invoking this method: 使用log4j可以登录到调用此方法的其他文件:

Logger.getLogger("test")

where test is an appender defined in log4j.properties. 其中test是在log4j.properties中定义的附加程序。 How can I log to different files with log4j2? 如何使用log4j2登录到其他文件? This is my configuration file and I would choose programmatically where to log: 这是我的配置文件,我将以编程方式选择登录位置:

<Properties>
    <Property name="log-path">C:/logs</Property>
</Properties>

<Loggers>
    <Logger name="it.mypackage" level="debug" additivity="false">
        <appender-ref ref="file" level="debug" />
        <appender-ref ref="file2" level="error" />
    </Logger>
</Loggers>

<Appenders>

    <!-- file.log -->
    <RollingFile name="file" fileName="${log-path}/file.log" filePattern="${log-path}/file-%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>

    <!-- file2.log -->
    <RollingFile name="file2" fileName="${log-path}/file2.log" filePattern="${log-path}/file2-%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>

[SOLUTION] Oh Yes, I'm missing a logger: [解决方案]哦,是的,我想念一个记录器:

<Properties>
    <Property name="log-path">C:/logs</Property>
</Properties>

<Loggers>
    <Logger name="logger1" level="debug" additivity="false">
        <appender-ref ref="file" level="debug" />
    </Logger>
    <Logger name="logger2" level="debug" additivity="false">
        <appender-ref ref="file" level="debug" />
        <appender-ref ref="file2" level="error" />
    </Logger>
</Loggers>

<Appenders>

    <!-- file.log -->
    <RollingFile name="file" fileName="${log-path}/file.log" filePattern="${log-path}/file-%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>

    <!-- file2.log -->
    <RollingFile name="file2" fileName="${log-path}/file2.log" filePattern="${log-path}/file2-%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>

I can choose logger in this way: 我可以通过以下方式选择记录器:

private static Logger logger = LogManager.getLogger("logger1");

If you keep the rest of the configuration the same, but modify the Loggers section: 如果其余配置保持不变,请修改“记录器”部分:

<Loggers>
  <Logger name="logger1" level="debug" additivity="false">
    <appender-ref ref="file" level="debug" />
  </Logger>
  <Logger name="logger2" level="debug" additivity="false">
    <appender-ref ref="file2" level="error" />
  </Logger>
</Loggers>

Now, you can select the appender in your code by getting the logger by name: 现在,您可以通过按名称获取记录器来选择代码中的附加程序:

Logger logger1 = LogManager.getLogger("logger1");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM