为什么Log语句在控制台日志文件中打印两次。

2020-09-26 01:52发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在使用hybris 6.2....

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在使用hybris 6.2.0.11。 为了记录日志,我在自定义java类中使用了以下语句。

私有静态最终记录器LOGGER = Logger.getLogger(QuickerIndexerQueryListener.class);

if(LOGGER.isDebugEnabled()){LOGGER.debug(" hello"); }

上面的debug语句(" hello")来了两次。 Tomcat日志文件中应该只有一个" hello"。

您知道日志语句如何打印两次吗? 以及如何消除日志文件中的这些重复语句?

3条回答
spaceman01
2020-09-26 02:36 .采纳回答

这称为可加性。

来自 Wiki -

禁用可加性以防止重复记录:

在某些情况下,对日志目标执行两次日志输出。 这是Log4j可加性的副作用,默认情况下,每个记录器都将启用该功能。

示例:
您有一个包my.base.packagename的记录器。 而且您还有另一个包my.base.packagename.extension的记录器。 这些记录器的配置如下:

 #---记录器1
  log4j.logger.my.base.packagename = info,应用程序控制台
  
  #---记录器2
  log4j.logger.my.base.packagename.extension =调试,应用程序控制台

  

然后,将对my.base.packagename的每个记录语句执行一次,并且对my.base.packagename.extension的每个语句将执行两次-一次对定义的记录器,一次对继承的记录器my.base 。包裹名字。
您可以通过停用第二个定义的记录器的可加性来阻止第二次执行:

 #---记录器1
  log4j.logger.my.base.packagename = info,应用程序控制台
  
  #---记录器2
  log4j.logger.my.base.packagename.extension =调试,应用程序控制台
  log4j.additivity.my.base.packagename.extension = false


  

编辑:对于log4j2,请参见此处

  <记录器>
  ..
      
        
      
  
      <!-日志消息不会在控制台中重复-仅启用了附加器引用->
      <记录器名称=" com.myproject.main.sub1"级别=" DEBUG"/>
  
      <!-日志消息将在控制台中重复-此记录器和root的附加器引用将适用->
      <记录器名称=" com.myproject.main.sub2"级别=" DEBUG">
        
      
  
       <!-日志消息将不会在控制台中重复-请求不会转发到父项:additivity =" false"->
      <记录器名称=" com.myproject.main.sub3"级别=" DEBUG" additivity =" false">
        
      
   ..
  



  

干杯。

一周热门 更多>