log4j控制台不打印日志故障的详细解决方案

 更新时间:2023年08月19日 14:36:34   作者:叫我阿柒啊  
这篇文章主要给大家介绍了关于log4j控制台不打印日志故障的详细解决方案,log4j不提供默认配置,因为在某些环境中可能禁止输出到控制台或文件系统,需要的朋友可以参考下

前言

接管了别的项目组的一个代码,在IDAE调试程序的过程中,发现log4j日志居然没有打印在控制台上,日志相关代码也没有问题。

在网上搜索了一圈,总结了一下个人解决这个问题的流程。

流程

1. 判断用了什么配置文件

不知道是出于什么目的,项目中居然有log4j的properties和xml两个配置文件。

刚开始我都没有看到xml文件,一直在关注properties文件,发现也没啥问题。后来在Vm options添加了**-Dlog4j.debug**,在启动时打印log4j的信息中发现,log4j用的是xml文件。

2. additivity

其次就是<logger>的additivity属性。

<!-- 打印到控制台 -->
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
   <param name="Target" value="System.out" />
   <layout class="org.apache.log4j.PatternLayout">
       <param name="ConversionPattern"  value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />
   </layout>
</appender>
<!-- 打印到文件中 -->
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="${logfileName}.log" />
    <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
    </layout>
</appender>
<!-- logger -->
<logger name="com.test" additivity="false">
   <level value="INFO" />
   <appender-ref ref="fileAppender" />
</logger>
<!-- root -->
<root>
   <priority value ="INFO"/>
   <appender-ref ref="myConsole"/>
</root>

在xml配置文件中,<appender>定义了日志以什么样的格式输出到控制台或者文件中。<logger>决定项目中的每个class绑定哪个appender。<root>是根logger,会绑定多个appender。

logger的additivity默认为true,表示此logger要打印的日志也要传给root一份,让root的appender进行打印。

3. 解决方案

方案一

修改additivity为true,或者直接去掉,因为默认值就是true

方案二

在com.test的logger里面将console的appender添加进去。

<!-- logger -->
<logger name="com.test" additivity="false">
   <level value="INFO" />
   <appender-ref ref="fileAppender" />
   <appender-ref ref="myConsole" />
</logger>

这样,就解决了在控制台不打印日志的问题了。

总结

到此这篇关于log4j控制台不打印日志故障的详细解决方案的文章就介绍到这了,更多相关log4j控制台不打印日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java软件设计模式之桥接模式详解

    Java软件设计模式之桥接模式详解

    这篇文章主要介绍了Java软件设计模式之桥接模式详解,桥接模式也叫做桥梁模式,结构型设计模式的一种,顾名思义,就是用来连接两个部分,为被分离了的抽象部分和实现部分搭桥,需要的朋友可以参考下
    2023-07-07
  • 归并算法之有序数组合并算法实现

    归并算法之有序数组合并算法实现

    这篇文章主要介绍了归并算法之有序数组合并算法实现的相关资料,需要的朋友可以参考下
    2017-07-07
  • Springboot实现ModbusTCP通信的示例详解

    Springboot实现ModbusTCP通信的示例详解

    ModbusTCP协议是Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准,本文主要介绍了Springboot实现ModbusTCP通信的相关知识,需要的可以参考下
    2023-12-12
  • Java日期时间详解(LocalDate、LocalTime、LocalDateTime)

    Java日期时间详解(LocalDate、LocalTime、LocalDateTime)

    Java 1.8前Date类方法过时且线程不安全,SimpleDateFormat因使用Calendar全局变量导致多线程问题,新API引入线程安全的LocalDate、LocalTime、LocalDateTime等不可变类,替代旧类并简化日期时间处理与转换
    2025-09-09
  • JUC中的wait与notify方法实现原理详解

    JUC中的wait与notify方法实现原理详解

    这篇文章主要介绍了JUC中的wait与notify方法实现原理,在进行wait()之前,就代表着需要争夺Synchorized,而Synchronized代码块通过javap生成的字节码中包含monitor enter和monitor exit两个指令
    2023-03-03
  • Java中io流解析及代码实例

    Java中io流解析及代码实例

    这篇文章主要介绍了Java中io流解析及代码实例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • MyBatis-Plus实现分页查询两种方案详解

    MyBatis-Plus实现分页查询两种方案详解

    这篇文章主要为大家详细介绍了两种MyBatis-Plus分页实现方案,分别是PageUtils工具类分页和MyBatis-Plus原生IPage分页,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-04-04
  • Java获取当前时间戳案例详解

    Java获取当前时间戳案例详解

    这篇文章主要介绍了Java获取当前时间戳案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • java并发编程包JUC线程同步CyclicBarrier语法示例

    java并发编程包JUC线程同步CyclicBarrier语法示例

    这篇文章主要为大家介绍了java并发编程工具包JUC线程同步CyclicBarrier语法使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java 事务详解及简单应用实例

    Java 事务详解及简单应用实例

    这篇文章主要介绍了Java 事务详解及简单应用实例的相关资料,java事务能够保证数据的完整性和一致性,当然这是书本上的知识,具体如何应用这里举例说明,需要的朋友可以参考下
    2016-12-12

最新评论