资讯专栏INFORMATION COLUMN

LogBack与Log4j配置与日志分模块打印

kycool / 3403人阅读

摘要:如果日志级别等于配置级别,过滤器会根据和接收或拒绝日志。例如过滤掉所有低于级别的日志。有个子标签,用于配置求值条件。

没时间解释了,快上车,老司机先看代码

LogBack.xml


    
    
    
    
 
    
        
            DEBUG
        
        
      ${MESSAGE_FILE_PATTERN}
        
    

    
        true
          
                INFO  
            ACCEPT  
            DENY  
          
        ${catalina.base}/logs/vod.log
        
            ${catalina.base}/logs/vod-info-%d{yyyy-MM-dd}.log
            ${maxhistory}
        
        
            ${MESSAGE_FILE_PATTERN}
            
        
    
    
        true
          
                INFO  
            ACCEPT  
            DENY  
          
        ${catalina.base}/logs/vod-music.log
        
            ${catalina.base}/logs/vod-music-%d{yyyy-MM-dd}.log
            ${maxhistory}
        
        
            ${MESSAGE_FILE_PATTERN}
            
        
    

    
        true
        
            WARN
        
        ${catalina.base}/logs/vod-error.log
        
            ${catalina.base}/logs/vod-error-%d{yyyy-MM-dd}.log
            ${maxhistory}
        
        
            ${MESSAGE_FILE_PATTERN}
            
        
    
    
        true
          
                INFO  
            ACCEPT  
            DENY  
          
        ${catalina.base}/logs/vod-douban.log
        
            ${catalina.base}/logs/vod-douban-%d{yyyy-MM-dd}.log
            ${maxhistory}
        
        
            ${MESSAGE_FILE_PATTERN}
            
        
    
   
    
    
    

    
    

    
    

    
    

    
    

    
    

    
    
    
     
        
        
    
    
     
        
        
    
    
    
        
        
        
    

上述实现了
1、将DEBUG、INFO、WRAN/ERROR日志分开打印到不同文件
2、通过包名来按模块打印到特定文件
3、日志文件每天rolling、保存最大历史日志文件数

几个注意点:
1、日志打印格式如下:%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level %marker %thread %logger %msg%n
没有打印具体的方法名。如果要打印方法名:加个%M
%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level %marker %thread %logger.%M %msg%n
但是打印方法名可能会加大日志开销,从而影响速度问题。
说明见:http://stackoverflow.com/ques...

Generating the method name is not particularly fast. Thus, its use should be avoided unless execution speed is not an issue.

2、additivity的作用
additivity的作用在于children-logger是否使用 rootLogger配置的appender进行输出。
false:表示只用当前logger的appender-ref。
true:表示当前logger的appender-ref和rootLogger的appender-ref都有效。也就是说会打印至少两遍。

3、filter的作用
过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。
过滤器被添加到 中,为 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。 有多个过滤器时,按照配置顺序执行。

几个常用的过滤器:
LevelFilter: 级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:
:设置过滤级别
:用于配置符合过滤条件的操作
:用于配置不符合过滤条件的操作

例如:将过滤器的日志级别配置为INFO,所有INFO级别的日志交给appender处理,非INFO级别的日志,被过滤掉。

   
       
      INFO   
      ACCEPT   
      DENY   
       
       
         
        %-4relative [%thread] %-5level %logger{30} - %msg%n   
         
       
 

ThresholdFilter: 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
例如:过滤掉所有低于INFO级别的日志。

   
       
       
      INFO   
       
       
         
        %-4relative [%thread] %-5level %logger{30} - %msg%n   
         
       
   

EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件。需要额外的两个JAR包,commons-compiler.jar和janino.jar有以下子节点:
:
鉴别器,常用的鉴别器是JaninoEventEvaluato,也是默认的鉴别器,它以任意的java布尔值表达式作为求值条件,求值条件在配置文件解释过成功被动态编译,布尔值表达式返回true就表示符合过滤条件。evaluator有个子标签,用于配置求值条件。
:用于配置符合过滤条件的操作
:用于配置不符合过滤条件的操作

    
             
          
        return message.contains("billing");   
         
      ACCEPT   
      DENY  
       
       
         
        %-4relative [%thread] %-5level %logger - %msg%n   
         
       
   

参考:
https://github.com/makotan/lo...
http://stackoverflow.com/ques...
http://czj4451.iteye.com/blog...
http://aub.iteye.com/blog/111...

Log4j.properties配置
# Output pattern : date [thread] priority category - message
log4j.rootLogger=INFO, Console, RollingFile,Error

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[shopping] %-d{HH:mm:ss} %p [%c{1}.%M(%L)]  %m%n

#RollingFile
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=${catalina.base}/logs/shopping/shopping.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=[shopping] %-d{HH:mm:ss} %p [%c{1}.%M(%L)]  %m%n
log4j.appender.RollingFile.filter.a=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.RollingFile.filter.a.LevelMin=INFO
log4j.appender.RollingFile.filter.a.LevelMax=INFO
log4j.appender.RollingFile.filter.a.acceptOnMatch=true
 
#ShoppingUtil
log4j.appender.ShoppingUtil=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ShoppingUtil.File=${catalina.base}/logs/shopping/shopping-util.log
log4j.appender.ShoppingUtil.layout=org.apache.log4j.PatternLayout
log4j.appender.ShoppingUtil.layout.ConversionPattern=[shopping] %-d{HH:mm:ss} %p [%c{1}.%M(%L)]  %m%n
log4j.appender.ShoppingUtil.filter.aa=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.ShoppingUtil.filter.aa.LevelMin=INFO
log4j.appender.ShoppingUtil.filter.aa.LevelMax=INFO
log4j.appender.ShoppingUtil.filter.aa.acceptOnMatch=true
 

#error
log4j.appender.Error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Error.File=${catalina.base}/logs/shopping/shopping-error.log
log4j.appender.Error.layout=org.apache.log4j.PatternLayout
log4j.appender.Error.layout.ConversionPattern=[shopping] %-d{HH:mm:ss} %p [%c{1}.%M(%L)]  %m%n
log4j.appender.Error.Threshold=WARN


#Project defalult level
log4j.logger.org.springside.examples.miniweb=INFO

log4j.logger.com.opensymphony.xwork2.interceptor.ParametersInterceptor=DEBUG

log4j.logger.org.springside= INFO

log4j.logger.com.shopping= INFO

log4j.logger.com.shopping.shop.utility=INFO,Console,ShoppingUtil,Error
log4j.additivity.com.shopping.shop.utility=false 

参考:
http://stackoverflow.com/ques...
http://www.cnblogs.com/0201zc...
http://blog.csdn.net/liu251/a...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69908.html

相关文章

  • java日志框架

    摘要:一日志概述领域存在多种日志框架,目前常用的日志框架包括,,,,,。开销更高三与其他日志组件调用关系包名说明版本的桥接器,你需要将加入。的桥接器,原生日志框架。 一、Java日志概述 java领域存在多种日志框架,目前常用的日志框架包括Log4j 1,Log4j 2,Commons Logging,Slf4j,Logback,Jul。 Commons Logging和Slf4j是日志...

    dendoink 评论0 收藏0
  • logback的简单使用

    摘要:的测试完全不同级别的。记录请求的级别在高于或等于其的有效级别时被称为被启用,否则,称为被禁用。该规则是的核心。指定名称,指定的全限定名。对记录事件进行格式化。查看当前活动文件的大小,如果超过指定大小会告知触发当前活动文件滚动。 一、logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件,官方网站: http://logback.qos.ch。 logback当...

    habren 评论0 收藏0
  • 9、springcloud整合logback打印sql语句

    摘要:公众号乐园是由创始人设计的又一个开源日志组件。此外完整实现使你可以很方便地更换成其它日志系统如或。是要与结合起来用的。从控制台打印出来的日志级别只有还有。这里可以使用绝对路径如,会自动在盘下创建文件夹和相应的日志文件。 公众号 java乐园 Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core、logback- class...

    singerye 评论0 收藏0
  • 强推!大牛程序员必备的Java日志框架,性能无敌

    摘要:本文要来分享给大家程序员最常用的日志框架组件。没有基础的同学也不要着急,这套教程覆盖了目前所有的日志框架,只要你学,就一定用得到,先收藏,以备不时之需。 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用、WEB应用以及移动应用。然而日志系统是一个成熟Java应用所必不可少的。在开发和调试阶段,日志可以帮...

    zebrayoung 评论0 收藏0
  • springboot超级详细的日志配置(基于logback)

    摘要:默认情况下将级别的日志输出到控制台中,不会写到日志文件,且不能进行复杂配置。节点用于定义变量,方便使用。 showImg(https://raw.githubusercontent.com/FleyX/files/master/blogImg/20190320135049.png); 前言   java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj...

    meislzhua 评论0 收藏0

发表评论

0条评论

kycool

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<