美文网首页
2019-02-03 log4j2的模块化配置

2019-02-03 log4j2的模块化配置

作者: FredWorks | 来源:发表于2019-02-03 11:30 被阅读0次

    1. 负责集成子模块配置文件的配置

    log4j2支持其配置文件的模块化。也就是不是提供一个集中的大配置文件,而是将其按模块拆分,每个模块一个独立的配置文件。在负责进行部署的集成项目中,提供一个配置文件,指定从那些路径加载配置文件即可。

    log4j2对模块化进行支持的基础,是一个新增的属性 log4j.configurationFile。该属性定义在系统的环境变量中,也可以定义在一个独立的配置文件 log4j2.component.properties 中。其格式大体如下:

    log4j.configurationFile=xx/config/log4j2/log4j2-properties.xml,xx/config/log4j2/log4j2.xml,xx/config/log4j2/log4j2-message.xml
    

    其具体的用户就不再详述了,可以自己看log4j2的官方文档关于自动配置的章节

    2. 增加一个独立配置文件,用于放置可能根据环境变化的属性,并在业务子模块的配置文件中引用

    定义一个独立的配置文件,叫做 log4j2-properties.xml (个人喜好,可以自己决定如何取名,只要在log4j.component.properties中引入该文件即可)。这个文件,需要放置在集成项目中,而不是业务子模块中。
    其内容,大体如下:

    <?xml version="1.0" encoding="UTF-8"?> 
    <Configuration status="error"> 
        <properties> 
            <Property name="LogRoot">/data/applogs/aiwaiqin</Property>
            ...
        </properties> 
    </Configuration> 
    

    在具体子模块的配置文件中,就可以引用这个文件中定义的属性。比如,我要在业务子模块的配置文件 log4j2-message.xml 中,引用 DefaultLogLevel 和 ConsoleLogLevel,我就需要先定义这两个属性:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
        <properties>
            <Property name="LogRoot">/data/applogs/aiwaiqin</Property> 
            <Property name="DefaultLogLevel">error</Property> 
            <Property name="ConsoleLogLevel">error</Property> 
        </properties>
    </Configuration>
    

    然后,在对应的业务子模块的配置文件中引用它:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="${DefaultLogLevel}">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            </Console>
            <RollingFile 
                    name="cn.mr.venus.console.log.file" 
                    fileName="${LogRoot}/console/console.log"
                    filePattern="${LogRoot}/console/console.%d{yyyy-MM-dd}.log" 
                    immediateFlush="true" 
                    append="true">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
                <Policies>
                    <OnStartupTriggeringPolicy />
                    <SizeBasedTriggeringPolicy size="50 MB" />
                    <TimeBasedTriggeringPolicy />
                </Policies>
                <DefaultRolloverStrategy max="20" />
            </RollingFile>
        </Appenders>
        <Loggers>
            <Root level="${ConsoleLogLevel}">
                <AppenderRef ref="Console" />
                <AppenderRef ref="cn.mr.venus.console.log.file" />
            </Root>
        </Loggers>
    </Configuration>
    

    3. 在集成项目中,使用maven为不同环境提供对应版本的 log4j2-properties.xml 配置文件

    因为业务子模块中的配置不适合根据环境进行配置。但集成项目却可以根据环境提供不同的profile,因此在部署项目的pom.xml中,只要在不同的profile中,提供对应版本的 log4j2-properties.xml 文件。根据各自的具体环境,将对应版本的该文件,拷贝到 xx/log4j2/目录下。其中,“xx/log4j2”为部署项目中定义的放置所有模块的log4j2-sub-mod.xml配置文件的地方 :

            ...
            <profile> 
                <id>dev</id> 
                <activation> 
                    <activeByDefault>true</activeByDefault> 
                </activation> 
                <build> 
                    <plugins> 
                        <plugin> 
                            <groupId>org.apache.maven.plugins</groupId> 
                            <artifactId>maven-resources-plugin</artifactId> 
                            <executions> 
                                <execution> 
                                    <id>copy-resources</id> 
                                    <phase>process-resources</phase> 
                                    <goals> 
                                        <goal>copy-resources</goal> 
                                    </goals> 
                                    <configuration> 
                                        <outputDirectory>${project.build.outputDirectory}/xx/config/properties</outputDirectory> 
                                        <resources> 
                                            <resource> 
                                                <directory>${basedir}/src/main/profiles/config/dev</directory> 
                                                <includes> 
                                                    <include>**/*</include> 
                                                </includes> 
                                                <filtering>true</filtering> 
                                            </resource> 
                                        </resources> 
                                    </configuration> 
                                </execution> 
                                <execution> 
                                    <id>copy-log4j2-resources</id> 
                                    <phase>process-resources</phase> 
                                    <goals> 
                                        <goal>copy-resources</goal> 
                                    </goals> 
                                    <configuration> 
                                        <outputDirectory>${project.build.outputDirectory}/xx/config/log4j2</outputDirectory> 
                                        <resources> 
                                            <resource> 
                                                <directory>${basedir}/src/main/profiles/log4j2/dev</directory> 
                                                <includes> 
                                                    <include>**/*</include> 
                                                </includes> 
                                                <filtering>true</filtering> 
                                            </resource> 
                                        </resources> 
                                    </configuration> 
                                </execution>
                                ...
    

    这一段配置并不完整,关于profile的具体使用,不在本文章的记录范围内,需自行百度maven。

    4. 补充部分log4j2的配置细节

    4.1. 配置日志启动时,或每天,或达到50m时,都拆分文件

    log4j2通过Appender的Policies来配置输出文件的拆分策略:

                <Policies>
                    <OnStartupTriggeringPolicy />
                    <SizeBasedTriggeringPolicy size="50 MB" />
                    <TimeBasedTriggeringPolicy />
                </Policies>
    
    • OnStartupTriggeringPolicy:启动时拆分新文件。
    • SizeBasedTriggeringPolicy:达到指定大小时拆分新文件,属性 size 用于指定文件大小的阀值。
    • TimeBasedTriggeringPolicy:和 RollingFile 的 filePattern 属性一起工作,决定按什么时间单位拆分新文件。如果filePattern指定的最小时间单位是天,就按天拆分;如果filePattern指定的最小时间单位是小时,就按小时拆分。filePattern的具体配置格式,参看log4j2的官方文档,就不在这里细说了。

    相关文章

      网友评论

          本文标题:2019-02-03 log4j2的模块化配置

          本文链接:https://www.haomeiwen.com/subject/pprysqtx.html