美文网首页
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