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

log4j与log4j2:记录到不同的文件

韦正业
2023-03-14

使用log4j,我可以将日志记录到调用此方法的不同文件:

Logger.getLogger("test")
<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>

“解答”哦是的,我少了一个记录器:

<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>

我可以这样选择logger:

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

共有1个答案

黄彬
2023-03-14

如果您保持配置的其余部分不变,但修改Loggers部分:

<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>

现在,您可以通过按名称获取记录器来选择代码中的追加器:

Logger logger1 = LogManager.getLogger("logger1");
 类似资料:
  • 问题内容: 我正在使用log4j登录我的应用程序。我正在尝试在不同文件中使用不同级别的日志,但是出了点问题。对于解决此问题的任何帮助,我们将不胜感激。 问题答案: log4j附加程序的标准行为是,它们以其阈值级别 或更高 的阈值记录所有消息,即具有阈值INFO的附加器将记录INFO,WARN,ERROR和FATAL消息,但不记录DEBUG。如果你想记录 只有 INFO信息,但不会发出警告及以上,然

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

  • 我有下面的Log4J2配置XML: 但是,每当log4j2 appender写入文件时,它在写入指定的文件路径时不会使用正确的字符串。 log4j2 appender第一次写入文件时,会写入由指定的正确文件路径。但是,只要将具有另一个Id的员工的信息放入线程上下文中,appender仍然会记录到旧文件路径。 例如,appender第一次记录时,它会写入正确的路径: 但当记录器记录下一个员工Id(使

  • 问题内容: 有没有一种方法可以将log4j日志事件写入到也由其他应用程序写入的日志文件中。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化? 问题答案: Log4j有一个SocketAppender,它将事件发送到服务,您可以自己实现或使用与Log4j捆绑在一起的简单实现。 它还支持syslogd和Windows事件日志,这对于尝试将日志输出与非Java应用程序中的事件统一起来可

  • 我目前正在开发一个应用程序,它将为不同的目的生成两个不同的日志文件。因为我是log4j2新手,所以无法实现它。这是我的配置文件(log4j2.xml): 我不确定我是否用了正确的方法。下面是我的java方法,它试图使用log4j2进行日志记录 谢谢