log4j重复打印的解决方法

# Set log levels #    

log4j.rootLogger = error, Console

log4j.logger.com.wadata.zhuchao.springmvc.HelloController = info, Console

   

#Console config set

log4j.logger.org.apache.velocity=OFF

#Console config set

log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %c : [%-5p] %x - %m%n

 

之前这样配置发现同样的日志会打印2次,试着把log4j.logger.com.wadata.zhuchao.springmvc.HelloController后的Console去掉,问题解决。

 

log4j的logger(旧版本称logger)是层次结构的,子logger会继承父logger的属性,appender也是可继承的属性,这常常容易导致配置错误而引起的log4j输出重复的log信息......
log4j的logger(旧版本称logger)是层次结构的,子logger会继承父logger的属性,appender也是可继承的属性,这常常 容易导致配置错误而引起的log4j输出重复的log信息。如果在在父子logger中引用了相同的appender时,例子:
    <logger name="com.erry.model">
        <level value="DEBUG"/>
        <appender-ref ref="CONSOLE"/>
    </logger>
    <logger name="com.erry.service">
        <level value="DEBUG"/>
        <appender-ref ref="CONSOLE"/>
    </logger>
    <root>
        <level value="WARN"/>
        <appender-ref ref="CONSOLE"/>
    </root>


由于子logger(com.erry.model和com.erry.service)继承了父logger(ROOT)的appender,加上其本 身引用的appender总共会在2个appender上输出消息,由于这两个appender实际上是同一个appender,所以结果会是相同的消息 被重复输出。解决这个问题很简单,只要注意不要重复引用父logger已经引用的appender即可。上述例子的正确配置如下:
    <logger name="com.erry.model">
        <level value="DEBUG"/>
    </logger>
    <logger name="com.erry.service">
        <level value="DEBUG"/>
    </logger>
    <root>
        <level value="WARN"/>
        <appender-ref ref="CONSOLE"/>
    </root>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 当使用logback和Lombok的@Slf4j注解打印日志文件时,有时会遇到log.info()无法使用的问题。解决这个问题的方法有几种。首先,确保在logback.xml文件中正确地配置了logger和appender-ref。在logger标签中,name属性应该是你要在哪个类或者包下使用log的全限定名,level属性应该设置为INFO,additivity属性应该设置为false以防止重复打印。在appender-ref标签中,ref属性应该引用执行控制台日志的appender标签的name属性值。\[1\] 另外,你可以尝试以下方法解决log.info()无法使用的问题。首先,在file-setting-build-compiler中设置允许Annotation Processors通过。其次,在file-setting-plugins中下载Lombok插件。如果这些方法都不起作用,你可以查看Lombok生成的代码,看看是否生成了private static final Logger log = LoggerFactory.getLogger(TTController.class)。同时,检查info的实现是否有多个实现,可以通过点击F7进入查看。如果进入的是Logger实现,那么可能是因为Logger的实现类没有正确引入。\[2\]\[3\] #### 引用[.reference_title] - *1* [slf4j下log.info()无法输出到控制台&重复打印](https://blog.csdn.net/A390hours/article/details/85251067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用@Slf4j注解,log.info()无法使用](https://blog.csdn.net/zhen_hh/article/details/120653159)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【好奇害死猫】log.info的实现原理](https://blog.csdn.net/TANK_SOURCE/article/details/116462964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值