在Camel框架下配置log4j2的总结

在Camel框架下配置log4j2的总结


POM引用

  1. 需要排除的引用
    由于springboot框架默认log框架为logback,所以首先我们要排除所有相关的logback引用。
    如何在自己的项目中找到所有logback的引用?
    在idea中,可以生成pom的依赖关系图(maven project —> 项目模块 右键 —> 选择 show denpendencies)
    在生成的关系图中搜索 logging ,然后找到所有引用了logging的依赖,排除logging

    在我的项目中,排除依赖如下示例:

    <!-- activemq -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.activemq</groupId>
                    <artifactId>activemq-broker</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <!-- Camel -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    我们的目的是在依赖图中搜不到logging的引用

  2. 需要添加的依赖
    直接在pom中引入以下包:

    <!--logging-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging-api</artifactId>
        <version>1.1</version>
    </dependency>
    

配置文件

  1. 配置文件命名
    直接在resources目录下新建文件 log4j2.xml 文件名不可更改
    框架会直接读取文件夹下以 log4j2 命名的配置文件,后缀可以是 properties, json, jsn

  2. 配置文件内容解析

    1. 根节点 configuration: 属性status设置了日志框架本身日志的输出级别,属性monitorInterval设置了多长时间刷新一次日志配置,即热加载
    2. 二级节点 properties:此处定义了可用的全局变量,可以在后来的配置中使用属性name引用,格式为 ${name}
    3. 二级节点 appenders:此节点定义了你想要的任何日志输出方式的组合,我称它为过滤器,请注意在此节点下面配置的所有过滤器都不会直接输出日志,需要引用激活后才会输出日志。
      >>> 三级节点: Console: 此节点可以配置控制台的日志输出
      >>> 三级节点: RollingFile: 此节点可以定义文本文件的日志输出
    4. 二级节点 logger: 只有在此节点中引用激活的 appender 才会输出日志
  3. 对 RollingFile 节点的详细解释

    1. RollingFile的属性name定义了过滤器的id,在logger中使用此id引用激活
    2. 属性fileName定义了新生成日志文件的文件名格式与路径
    3. 属性filePattern定义了备份日志文件的路径与命名格式。注意其中的 %d{yyyyMMdd} 时间格式。此格式的最小单位关系到多久备份更换一次日志文件

    • 子节点 Filters 定义了日志过滤规则
    • 子节点 PatternLayout 定义了日志输出格式
    • 子节点 Policies 定义了备份日志文件的方式。
    • 子节点 TimeBasedTriggeringPolicy 表示以时间维度备份旧的日志更换新的文件。
      属性 interval 决定了以几个最小时间单位更换日志文件。此处的最小时间单位指上文中属性filePattern的最小时间单位。例如 %d{yyyyMMdd} 且 interval=“1” 意味着一天更换一次日志文件
    • 子节点 SizeBasedTriggeringPolicy表示以大小决定
    • 子节点 DefaultRolloverStrategy 定义了删除log的方式
      • basePath属性 定义了扫描路径
      • maxDepth属性 定义了扫描深度
      • glob属性 定义了匹配文件名的正则表达式
      • age属性 定义了保存几个最小时间单位之内的日志文件
  4. 一个具体的配置文件如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="info" monitorInterval="30">
        <properties>
            <property name="LOG_HOME">/app/kettle/eip/camel-logs/camel-eip-test</property>
            <property name="FILE_NAME">camel-eip-test</property>
        </properties>
    
        <appenders>
            <console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="[%30.30t] %-30.30c{1} %-5p %m%n"/>
            </console>
    
            <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info/${FILE_NAME}_info.log"
                        filePattern="${LOG_HOME}/info/${FILE_NAME}_%d{yyyyMMdd}_info.log">
                <Filters>
                    <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>
                <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"/>
                    <SizeBasedTriggeringPolicy/>
                </Policies>
                <DefaultRolloverStrategy>
                    <Delete basePath="${LOG_HOME}/info/" maxDepth="1">
                        <IfFileName glob="*.log" />
                        <IfLastModified age="3d" />
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingFile>
    
            <RollingFile name="RollingFileWarn" fileName="${LOG_HOME}/warn/${FILE_NAME}_warn.log"
                        filePattern="${LOG_HOME}/warn/${FILE_NAME}_%d{yyyyMMdd}_warn.log">
                <Filters>
                    <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
                </Filters>
                <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"/>
                    <SizeBasedTriggeringPolicy/>
                </Policies>
                <DefaultRolloverStrategy>
                    <Delete basePath="${LOG_HOME}/warn/" maxDepth="1">
                        <IfFileName glob="*.log" />
                        <IfLastModified age="3d" />
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingFile>
    
            <RollingFile name="RollingFileError" fileName="${LOG_HOME}/error/${FILE_NAME}_error.log"
                        filePattern="${LOG_HOME}/error/${FILE_NAME}_%d{yyyyMMdd}_error.log">
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy interval="1"/>
                    <SizeBasedTriggeringPolicy/>
                </Policies>
                <DefaultRolloverStrategy>
                    <Delete basePath="${LOG_HOME}/error/" maxDepth="1">
                        <IfFileName glob="*.log" />
                        <IfLastModified age="3d" />
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingFile>
        </appenders>
    
        <loggers>
            <logger name="org.springframework" level="info">
            </logger>
            <root level="all">
                <appender-ref ref="RollingFileInfo"/>
                <appender-ref ref="RollingFileWarn"/>
                <appender-ref ref="RollingFileError"/>
            </root>
        </loggers>
    </configuration>
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值