工作纪实53-log4j日志打印文件隔离

在项目中,我有一堆业务日志需要打印,另一部分的日志,是没有格式的,需要被云平台离线解析并收集到kafka或者hdfs、hive等,需要将日志隔离打印到不同的文件

正常的log4j配置是下面这样的,配合@Sl4j直接使用默认的log.info()打印日志,会汇总到web.log中;

如果是其他的logger,则需要:

private Logger dumpLog = LoggerFactory.getLogger("dump_logger");

yml 复制代码
Configuration:
  status: info
  monitorInterval: 30
  properties:
    property:
      name: log.path
      value: /opt/mnt/web/logs
  Appenders:
    RollingFile:
     - name: error_file
       # 清除策略
       DefaultRolloverStrategy:
         # 删除的触发条件
         Delete:
           # 要删除扫描的文件夹
           basePath: ${log.path}
           # 限定扫描的文件名
           IfFileName:
             # 匹配规则 以log结尾的
             glob: "*log"
             # 文件的最新的修改时间间隔
           IfLastModified:
             # 1s 表示1秒前  7d表示7天
             age: 7d
       fileName: ${log.path}/error.log
       filePattern: "${log.path}/error_%d{yyyy-MM-dd}.log"
       PatternLayout:
         Pattern: "[%X{request_id}] %-d{yyyy-MM-dd HH:mm:ss.SSS} - [%p] [%C{1} %M] %m%n"
       Policies:
         TimeBasedTriggeringPolicy:
           interval: 1
           modulate: true
     - name: web_file
       # 清除策略
       DefaultRolloverStrategy:
         # 删除的触发条件
         Delete:
           # 要删除扫描的文件夹
           basePath: ${log.path}
           # 限定扫描的文件名
           IfFileName:
             # 匹配规则 以log结尾的
             glob: "*log"
             # 文件的最新的修改时间间隔
           IfLastModified:
             # 1s 表示1秒前  7d表示7天
             age: 7d
       fileName: ${log.path}/web.log
       filePattern: "${log.path}/web_%d{yyyy-MM-dd}.log"
       PatternLayout:
         Pattern: "[%X{request_id}] %-d{yyyy-MM-dd HH:mm:ss.SSS} - [%p] [%C{1} %M] %m%n"
       Policies:
         TimeBasedTriggeringPolicy:
           interval: 1
           modulate: true
     - name: dump_appender
        # 清除策略
       DefaultRolloverStrategy:
         # 删除的触发条件
         Delete:
           # 要删除扫描的文件夹
           basePath: ${log.path}
           # 限定扫描的文件名
           IfFileName:
             # 匹配规则 以log结尾的
             glob: "*log"
             # 文件的最新的修改时间间隔
           IfLastModified:
             # 1s 表示1秒前  7d表示7天
             age: 7d
       fileName: ${log.path}/dump/dump_log.log
       filePattern: "${log.path}/dump_log%d{yyyy-MM-dd}.log"
       PatternLayout:
         Pattern: "%m%n%ex"
       Policies:
         TimeBasedTriggeringPolicy:
           interval: 1
           modulate: true

    Console:
      name: console
      target: SYSTEM_OUT
      PatternLayout:
        Pattern: "[%X{request_id}] %-d{yyyy-MM-dd HH:mm:ss} - [%p] [%C{1} %M] %m%n"
  Loggers:
    Root:
      level: info
      AppenderRef:
        -  ref: error_file
           level: ERROR
        -  ref: web_file
           level: INFO
        -  ref: console
           level: debug
    Logger:
      - name: dump_logger
        level: info
        AppenderRef:
          - ref: dump_appender
            level: INFO

算法同学希望单独在dump.log中进行日志打印,而后他们去配置采集的逻辑,发现web.log居然也有dump.log的日志,重复打印了;

关键代码:additivity

shell 复制代码
Logger:
  - name: dump_logger
    level: info
    additivity: false
    AppenderRef:
      - ref: dump_appender
        level: INFO

指定了包的日志输出,又指定了这个包下面子包的日志输出,如果在子包的定义标签上加上additivity=false,那么子包中的日志不会打印在父包中,只会在子包中输出

相关推荐
程序员JerrySUN32 分钟前
[特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
java·linux·架构
2302_8097983235 分钟前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
网安INF1 小时前
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
java·web安全·网络安全·flink·漏洞
一叶知秋哈1 小时前
Java应用Flink CDC监听MySQL数据变动内容输出到控制台
java·mysql·flink
jackson凌1 小时前
【Java学习笔记】SringBuffer类(重点)
java·笔记·学习
sclibingqing1 小时前
SpringBoot项目接口集中测试方法及实现
java·spring boot·后端
程序员JerrySUN1 小时前
全面理解 Linux 内核性能问题:分类、实战与调优策略
java·linux·运维·服务器·单片机
糯米导航1 小时前
Java毕业设计:办公自动化系统的设计与实现
java·开发语言·课程设计
糯米导航1 小时前
Java毕业设计:WML信息查询与后端信息发布系统开发
java·开发语言·课程设计
米粉03052 小时前
深入剖析Nginx:从入门到高并发架构实战
java·运维·nginx·架构