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

2020-09-26 01:52发布

         点击此处--->   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"。

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

         点击此处--->   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
1楼 · 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">
        
      
   ..
  



  

干杯。

SAP小黑
2楼-- · 2020-09-26 02:53

好的。。谢谢!

樱桃小丸子0093
3楼-- · 2020-09-26 02:33

嗨,

您必须使用以下方式配置local.properties:

log4j2.logger.tms1.name = com.my.project.lalala

log4j2.logger.tms1.level =调试

log4j2.logger.tms1.appenderRef.stdout.ref = STDOUT

但是,如果对于更高的程序包(com.my.project),存在其他配置(在其他属性文件中),则混合日志将打印两次相同的消息。

为避免这种情况使用

log4j2.logger.tms1.additivity = false

一周热门 更多>