在Camel框架下配置log4j2的总结

在Camel框架下配置log4j2的总结


POM引用

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

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

    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-activemqartifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-starter-loggingartifactId>
                exclusion>
                <exclusion>
                    <groupId>org.apache.activemqgroupId>
                    <artifactId>activemq-brokerartifactId>
                exclusion>
            exclusions>
        dependency>
    
        
        <dependency>
            <groupId>org.apache.camelgroupId>
            <artifactId>camel-spring-boot-starterartifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-starter-loggingartifactId>
                exclusion>
            exclusions>
        dependency>
    

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

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

    
    <dependency>
        <groupId>org.apache.logging.log4jgroupId>
        <artifactId>log4j-apiartifactId>
        <scope>runtimescope>
    dependency>
    <dependency>
        <groupId>org.apache.logging.log4jgroupId>
        <artifactId>log4j-coreartifactId>
        <scope>runtimescope>
    dependency>
    <dependency>
        <groupId>org.apache.logging.log4jgroupId>
        <artifactId>log4j-slf4j-implartifactId>
        <scope>runtimescope>
    dependency>
    <dependency>
        <groupId>commons-logginggroupId>
        <artifactId>commons-logging-apiartifactId>
        <version>1.1version>
    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. 一个具体的配置文件如下所示

    
    <configuration status="info" monitorInterval="30">
        <properties>
            <property name="LOG_HOME">/app/kettle/eip/camel-logs/camel-eip-testproperty>
            <property name="FILE_NAME">camel-eip-testproperty>
        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>
    

你可能感兴趣的:(ETL)