java - 如何使用 log4j2 将日志保存到带有时间戳的文件中

标签 java xml logging log4j2

我有一个小问题。我必须将日志记录实现从 org.apache.commons.logging 更改为 org.apache.logging.log4j。我将日志保存到“log”目录中,每个文件都有一个附加的时间戳。 我使用了以下 .xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<include resource="org/springframework/boot/logging/logback/base.xml"/>

   <logger name="org.springframework.web" level="INFO"/>

   <timestamp key="myTimestamp" timeReference="contextBirth" datePattern="yyyy-MM-dd'_'HH-mm-ss"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <encoder>
            <pattern>%d{HH:mm:ss.SSS}  - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/logs/app-${myTimestamp}.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd_HH:mm:ss} - %msg%n</Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>app.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>30MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <logger name="com....." level="INFO" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

现在,由于一些新环境,我想使用 log4j2 扩展我的 xml 文件。但我还想再次将其保存在“logs”目录中。我通过文档和 http://www.baeldung.com 尝试了不同的方法,但我不明白。我的应用程序总是在没有时间戳的情况下再次写入我的 app.log 中。我怎样才能意识到它?我的新 .xml 中的错误在哪里? 我想到了这个

filePattern="logs/ldapmicroservice.%d{MM-dd-yyyy-HH-mm}.log.gz"

我定义了我的文件的新模式吗? 这是我的新 .xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"

    packages="com......">
    <Properties>
        <Property name="LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss.SSS} %5p %X{mdcData} --- %-40.40c{1.} : %m%n%ex
        </Property>
    </Properties>

    <Appenders> 
        <RollingFile 
            name="FILE" fileName="/logs/app.log" 
            filePattern="logs/app.%d{MM-dd-yyyy-HH-mm}.log.gz"
            ignoreExceptions="false">
                <PatternLayout>
                    <Pattern>%d{yyyy-MM-dd HH:mm:ss} %p %m%n</Pattern>
                </PatternLayout>
                <TimeBasedTriggeringPolicy />
        </RollingFile> 

        <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}" />
        </Console>  
        <CloudantAppender name="CloudantAppender" 
            database="logs"
            ......
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </CloudantAppender>
    </Appenders>

    <Loggers>
        <Logger name="com...." level="debug" additivity="false">
            <AppenderRef ref="FILE" />
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="CloudantAppender" />
        </Logger>

        <Root level="info">
            <AppenderRef ref="FILE" />
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="CloudantAppender" />  
        </Root>

    </Loggers>
</Configuration>

最佳答案

我自己找到了解决方案:

<RollingFile 
    name="FILE" fileName="/logs/app-${date:yyyy-MM-dd'_'HH-mm-ss}.log" 
    filePattern="logs/app-%d{yyyy-MM-dd}-%i.log"
    ignoreExceptions="false">
        <PatternLayout>
            <Pattern>%d{yyyy-MM-dd'_'HH-mm-ss} %p %m%n</Pattern>
        </PatternLayout>
        <TimeBasedTriggeringPolicy />
</RollingFile> 

关于java - 如何使用 log4j2 将日志保存到带有时间戳的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48205395/

相关文章:

java - 在 JSON 请求中发送图像

java - 为什么默认构造函数和参数化构造函数都在一个类中?

java - 在 xml 中自动生成 JUnit 结果的最佳方法是什么?

java - 从 DOM 中的 XML 文件中删除数据?

c# - IDispatchMessageInspector 记录纯文本 SOAP 消息?

java - CXF 通话时长记录

django - 如何将 INFO 和 ERROR 日志隔离在其自己的文件路径中

java - xe :beanNamePicker, 无法将我的值从注释 View 获取到结果集中

java - 从客户端 swing Java 应用程序记录到 ELK

java - 选择具有多个选项的覆盖方法java