【问题标题】:How to generate new log files based on size using log4j2 in spring boot application如何在 Spring Boot 应用程序中使用 log4j2 根据大小生成新的日志文件
【发布时间】:2022-01-22 05:51:09
【问题描述】:

我正在使用 log4j2 生成一个日志文件,但是每次达到限制时我都需要根据大小生成一个新文件。

log4j2.properties 文件:

name=PropertiesConfig
property.filename =D:\\Users\\User\\MyFiles\\Apache Camel github\\ChatServiceProject\\logs\\propertieslogs.log
appenders = console, file

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.append=true
appender.file=org.apache.log4j.RollingFileAppender
appender.fileLogger.MaxFileSize=1KB

loggers=file
logger.file.name=Processors
logger.file.level = trace
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE

rootLogger.level = trace
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger= INFO, file, stdout

但是日志文件的大小现在是 16KB,它仍然没有生成新文件,而是将日志附加到同一文件中。所以我需要帮助来解决这个问题。 谢谢

【问题讨论】:

  • 您的 appender 是 File appender,而不是 RollingFile appender,因此它不执行轮换。

标签: java spring-boot logging log4j2


【解决方案1】:

以下属性可用于覆盖默认配置(application.properties)

logging.logback.rollingpolicy.max-index=10

logging.logback.rollingpolicy.max-file-size=15MB

spring 属性可以放在日志 xml 文件中。

<springProperty scope="context" name="MAX_INDEX" source="logging.logback.rollingpolicy.max-index"/>

<springProperty scope="context" name="MAX_FILE_SIZE" source="logging.logback.rollingpolicy.max-file-size"/>

样本:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_FILE" value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/e2e-tools.${nodename:-local}.log}"/>
<springProperty scope="context" name="MAX_INDEX" source="logging.logback.rollingpolicy.max-index"/>
<springProperty scope="context" name="MAX_FILE_SIZE" source="logging.logback.rollingpolicy.max-file-size" defaultValue="10MB"/>
<appender name="FIX_WINDOW_BASED_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_FILE}</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>${MAX_INDEX}</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
    </triggeringPolicy>

    <encoder>
        <pattern>%date{ISO8601} [%thread] %level: %msg%n</pattern>
    </encoder>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%date{ISO8601} [%thread] %level: %msg%n</pattern>
    </encoder>
</appender>

<root level="INFO">
    <appender-ref ref="FIX_WINDOW_BASED_FILE"/>
    <appender-ref ref="CONSOLE"/>
</root>
</configuration>

【讨论】:

    【解决方案2】:

    备注:Spring Boot 已经定义了一个带有旋转的日志文件(参见log4j2-file.xml),其大小限制为 10 MiB(该限制是硬编码的)。你只需要设置:

    logging.file.path=D:\\Users\\User\\MyFiles\\Apache Camel github\\ChatServiceProject\\logs
    logging.file.name=propertieslogs.log
    

    在您的application.properties

    但是,如果您想编写自己的配置文件,则应考虑使用 XML 格式:

        <Properties>
            <Property name="LOG_PATH">D:\Users\User\MyFiles\Apache Camel github\ChatServiceProject\logs</Property>
            <Property name="LOG_FILE">${sys:LOG_PATH}/propertieslogs.log</Property>
        </Properties>
        <Appenders>
            <RollingFile
                name="LOGFILE"
                append="true"
                fileName="${sys:LOG_FILE}"
                filePattern="${sys:LOG_PATH}/propertieslogs.%i.log.gz">
                <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
                <SizeBasedTriggeringPolicy size="1 KB" />
            </RollingFile>
        </Appenders>
    

    属性格式使用大量任意标识符来模拟 XML 的层次结构:

    property.LOG_PATH=D:\Users\User\MyFiles\Apache Camel github\ChatServiceProject\logs
    property.LOG_FILE=${sys:LOG_PATH}/propertieslogs.log
    
    appender.<id1>.type=RollingFile
    appender.<id1>.name=LOGFILE
    appender.<id1>.append=true
    appender.<id1>.fileName=${sys:LOG_FILE}
    appender.<id1>.filePattern=${sys:LOG_PATH}/propertieslogs.%i.log.gz
    appender.<id1>.<id2>.type=PatternLayout
    appender.<id1>.<id2>.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
    appender.<id1>.<id3>.type=SizeBasedTriggeringPolicy
    appender.<id1>.<id3>.size=1 KB
    

    其中&lt;id1&gt;&lt;id2&gt;&lt;id3&gt; 是您选择的字符串。它们对配置没有影响。

    【讨论】:

    • 你好@Piotr P. Karwasz,你说spring boot默认提供文件旋转,我怎样才能改变大小限制,每次使用spring boot的这个特性生成一个这个大小的新文件?
    • 从我在答案中链接的log4j2-file.xml 文件中可以看出,您无法更改限制:它是硬编码的。但是,您可以将该文件复制到 log4j2-spring.xml 并进行修改。
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多