filter: http://aub.iteye.com/blog/1110008

http://aub.iteye.com/blog/1101222

Logback

  Log4j的创始人Ceki Gülcü重写了Log4j的内部实现,改进后形成了Logback,相比Log4j速度更快,资源占用更少,也更稳定。(另外Log4j 2.0又是在Logback基础上进行了改进,但还未广泛使用)

官方网站:http://logback.qos.ch/

Logback包括3个部分:

  • logback-core(基础核心模块)
  • logback-classic(log4j改良版,完整实现SLF4J API接口,可方便的与其他日志系统切换)
  • logback-access(与Servlet容器集成提供通过Http访问日志的功能)

特性:

  • Logback传统方法是使用XML保存配置,0.9.22+版本支持Groovy配置转换工具)。配置文件中支持条件处理。
  • Logback-classic可以在配置修改后自动重新载入。
  • FileAppender和它的子类,包括RollingFileAppender,可以优雅的从I/O错误中恢复。
  • 通过设置TimeBasedRollingPolicy 或者 SizeAndTimeBasedFNATP的 maxHistory 属性,你就可以控制日志归档文件的最大数量,清除旧的日志。
  • RollingFileAppender可以在回滚操作中,自动压缩归档日志文件。
  • Lilith是logback的一个记录和访问事件查看器。它相当于log4j的 chainsaw。
  • 强大的日志过滤功能
  • SiftingAppender全能追加器
  • 日志中堆栈信息包含依赖包名和版本
  • 谨慎模式下,多个JVM的多个FileAppender可以安全写入统一的日志文件。

Logback的核心对象和用法与Log4j是相承的,主要对象有:

  • Logger
  • Appender
  • Layout
  • Filter:Logback-classic提供两种类型的过滤器:常规过滤器和TuroboFilter过滤器。

Logback整体流程:

  • Logger 产生日志信息;
  • Layout修饰这条msg的显示格式;
  • Filter过滤显示的内容;
  • Appender具体的显示,即保存这日志信息的地方。

Logback应用示例

1.包引入

  • logback-classic.jar  (依赖logback-core.jar,如果用maven等能够自动处理依赖的工具可以不用引入core包)
  • slf4j-api.jar           (如果应用中使用slf4j API而不是logback自身的api才需引入)

2.配置文件

因为核心对象与Log4J相承,所有配置的思路也类似于log4j的.properties文件。

Log4j, logback配置中的输出log目录: 使用Tomcat时,相对于CATALINA_HOME/bin目录

A.XML版配置

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <configuration>
  3. <property name="LOG_HOME" value="log"/>
  4.  
  5. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  6. <encoder>
  7. <pattern>\(%d{HH:mm:ss.SSS} [%thread]\) %-5level %logger{32} %L - %msg%n</pattern>
  8. </encoder>
  9. </appender>
  10.  
  11. <!--discardingThreshold: 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
  12. <!--queueSize: 更改默认的队列的深度,该值会影响性能.默认值为256 -->
  13. <!--appender-ref: 添加附加的appender,最多只能添加一个 -->
  14. <!-- 包装其他的Appender,支持异步输出
  15. <appender name ="asyncFlume" class= "ch.qos.logback.classic.AsyncAppender">
  16. <discardingThreshold >0</discardingThreshold>
  17. <queueSize>512</queueSize>
  18. <appender-ref ref ="flume"/>
  19. </appender>
  20. -->
  21.  
  22. <appender name="info2File" class="ch.qos.logback.core.rolling.RollingFileAppender">
  23. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  24. <level>INFO</level>
  25. <onMatch>ACCEPT</onMatch>
  26. <onMismatch>DENY </onMismatch>
  27. </filter>
  28. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  29. <FileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log
  30. </FileNamePattern>
  31. <MaxHistory>100</MaxHistory>
  32. </rollingPolicy>
  33. <encoder>
  34. <pattern>%-26(%d{HH:mm:ss SSS,Asia/Chongqing} [%thread]) %-5level
  35. %logger{32} - %msg%n %caller{1, DISP_CALLER_EVAL}</pattern>
  36. </encoder>
  37. </appender>
  38.  
  39. <appender name="error2File" class="ch.qos.logback.core.rolling.RollingFileAppender">
  40. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  41. <level>ERROR</level>
  42. <onMatch>ACCEPT</onMatch>
  43. <onMismatch>DENY </onMismatch>
  44. </filter>
  45. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  46. <FileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log
  47. </FileNamePattern>
  48. <MaxHistory>100</MaxHistory>
  49. </rollingPolicy>
  50. <encoder>
  51. <pattern>%-26(%d{HH:mm:ss SSS,Asia/Chongqing} [%thread]) %-5level
  52. %logger{32} - %msg%n %caller{1, DISP_CALLER_EVAL}</pattern>
  53. </encoder>
  54. </appender>
  55.  
  56. <appender name="login2File" class="ch.qos.logback.core.rolling.RollingFileAppender">
  57. <!-- 特定过滤含有某字符串的日志
  58. <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
  59. <evaluator>
  60. <expression>message.contains("str")</expression>
  61. </evaluator>
  62. <onMatch>ACCEPT</onMatch>
  63. <onMismatch>DENY</onMismatch>
  64. </filter>
  65. -->
  66. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  67. <FileNamePattern>${LOG_HOME}/login.%d{yyyy-MM-dd-HH}.log</FileNamePattern>
  68. <MaxHistory>2400</MaxHistory>
  69. </rollingPolicy>
  70. <encoder>
  71. <pattern>%m%n</pattern>
  72. </encoder>
  73. </appender>
  74.  
  75. <appender name="all2db" class="ch.qos.logback.classic.db.DBAppender">
  76. <connectionSource
  77. class="ch.qos.logback.core.db.DriverManagerConnectionSource">
  78. <driverClass>com.mysql.jdbc.Driver</driverClass>
  79. <url>jdbc:mysql://host_name:3306/datebase_name</url>
  80. <user>username</user>
  81. <password>password</password>
  82. </connectionSource>
  83. </appender>
  84.  
  85. <logger name="loginLog" level="INFO" additivity="false">
  86. <appender-ref ref="login2File"/>
  87. </logger>
  88.  
  89. <logger name="errorLog" level="WARN" additivity="true">
  90. <appender-ref ref="error2File"/>
  91. </logger>
  92.  
  93. <root>
  94. <level value="INFO"/>
  95. <appender-ref ref="STDOUT"/>
  96. <appender-ref ref="info2File"/>
  97. <appender-ref ref="error2File"/>
  98.     <appender-ref ref="all2db"/>
  99. </root>
  100. </configuration>

appender/filter

LevelFilter  元素会严格限制输出级别,级别必须相同才输出,而不是高于该级别的都输出。

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

<level>INFO</level>

EvaluatorFilter   求值过滤器,评估、鉴别日志是否符合指定条件。需要额外的两个JAR包,commons-compiler.jar和janino.jar有以下子节点

<expression>   暴露字段: event(LoggingEvent), message(String),formatedMessage(String), logger(String), loggerContext(LoggerContextVO), level(int), timeStamp(long), marker(Marker), mdc(Map), throwable(Throwable), throwableProxy(IThrowableProxy)

  1. <evaluator> <!-- 默认为 ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
  2. <expression>return message.contains("billing");</expression>
  3. </evaluator>

<matcher> 

  1. <evaluator>
  2. <matcher>
  3. <Name>odd</Name>
  4. <!-- filter out odd numbered statements -->
  5. <regex>statement [13579]</regex>
  6. </matcher>
  7. <expression>odd.matches(formattedMessage)</expression>
  8. </evaluator>

3.代码中调用

 A.使用SLF4J API

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3.  
  4. public class LogbackDemo {
  5. private static Logger log = LoggerFactory.getLogger(LogbackDemo.class);
  6. private static Logger loginlog = LoggerFactory.getLogger("loginLog");
  7. public static void main(String[] args)
  8. {
  9. log.info("normal message");
  10. log.warn("warning message");
  11. log.error("error message");
  12. loginlog.warn("login message");
  13. }
  14. }

其他

关于SLF4J

  Simple Logging Facade for Java。SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时,在应用不作任何改动的情况下,决定或切换使用的具体的日志系统。

  如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统。在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。

  SLF4J提供了各个日志系统通用的接口以及一个LoggerFactory的工厂类。程序中使用SLF4j API时,不需要在代码或配置文件中指定具体要用哪个日志系统(如java.util.logging、 Log4j、logback等)。要切换成哪个日志系统,只需要把该系统对应的jar包加入到项目中,SLF4J就能自动选择使用你加入的这种日志系统了。这种方法被称之为动态绑定。当然,这个具体的日志系统的相关类库和配置是不能少,如果你打算使用log4j,那么还需要log4j的类库,可能还有配置配置log4j.properties。

  有些具体的日志系统在绑定时还需要桥接包(slf4j-xxx.jar),如slf4j-log412.jar(Log4j), slf4j-jdk14.jar(java.util.logging), slf4j-jcl.jar(commons-logging)。logback不需要桥接。具体日志系统绑定到slf4j如下图。

  

  有时候应用中已经使用了具体的日志系统,slf4j也可以为这些具体日志系统提供底层服务而不需要修改应用。通过另一类桥接包(xxx-over-slf4j.jar、xxx-to-slf4j.jar),能将slf4j绑定到已适用的具体日志系统中,如下图所示。

关于common-logging

  common-logging是apache提供的一个通用的日志接口,动态绑定。作用与SLF4J相同。早期名为Jakarta Commons Logging,JCL。

关于ContextDetachingSCL监听器

为了在单个web项目重启和关闭的时候,对应的logger Context可以被回收,最好配置ContextDetachingSCL监听器。

  1. <listener>
  2. <listener-class>ch.qos.logback.classic.selector.servlet.ContextDetachingSCL</listener-class>
  3. </listener>

说明文档:http://www.blogjava.net/watchzerg/archive/2014/07/13/415754.html

参考文档

logback配置:http://blog.csdn.net/haidage/article/details/6794529

http://www.cnblogs.com/yongze103/archive/2012/05/05/2484753.html

各个日志系统及其绑定关系: http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html

logback使用总结的更多相关文章

  1. LogBack简易教程

    1.简介 LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手.(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的) 1.1 LogBac ...

  2. java日志组件介绍(common-logging,log4j,slf4j,logback )

    转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...

  3. logback logback.xml常用配置详解 <filter>

    <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY,日志将立即被抛弃不再经过其他过滤器:返回NEUTRAL,有序列表 ...

  4. logback 常用配置详解<appender>

    logback 常用配置详解 <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的 ...

  5. logback日志写入数据库(mysql)配置

    如题  建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1  logback 配置文件(如下) <?xml version="1.0" encoding ...

  6. Logback配置连接

    logback 简介 logback 常用配置详解(一)<configuration> and <logger> logback 常用配置详解(二)<appender&g ...

  7. slf4j log4j logback关系详解和相关用法

    slf4j log4j logback关系详解和相关用法 写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯.但是始终都是抱着"拿来主义"的态度,复制粘贴下配 ...

  8. 为项目配置logback日志

    为了保证系统在上线后亦能查看运行的日志,故为系统加入日志. 1:系统引入jar包 slf4j-api.jar logback-classic.jar logback-core.jar logback- ...

  9. Java日志框架:SLF4J,Common-Logging,Log4J,Logback说明

    Log4j  Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等 ...

  10. logback配置详解4-实例配置

    莫个银行项目中实际引用的logback实例,提供大家参考!!!! [html] view plaincopy <?xml version="1.0" encoding=&qu ...

随机推荐

  1. 基于jdk1.7实现的excel导出工具类

    通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...

  2. js动画实现侧边栏分享

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. VS链接过程中与MSVCRT.lib冲突

    vs代码生成有/MT,/MTd,/Md,/MDd四个编译选项,分别代表多线程.多线程调试.多线程DLL.多线程调试DLL. 编译时引用的lib分别为libcmt.li.libcmtd.lib.msvc ...

  4. HIT2715 Matrix3(最小费用最大流)

    题目大概说有一个n×n的矩阵,每个格子都有权值和高度,在这个矩阵中进行最多k次旅行,每次旅行能从当前格子走到相邻且高度更小的格子,走到格子边界就能出去完成这次旅行.每走到一个格子就累加格子的权值然后把 ...

  5. linux建立ssh信任关系

    一.建立SSH信任将A主机做为客户端(发起SSH请求 ip:192.168.200.170)将B主机作为服务器端(接收ssh请求   ip:192.168.200.149)以上以主动发起SSH登录请求 ...

  6. Fault Tolerance —— Storm的故障容错性

     ——本文讲解了Storm故障容忍性(Fault-Tolerance)的设计细节:当Worker.节点.Nimbus或者Supervisor出现故障时是如何实现故障容忍性,以及Nimbus是否存在单点 ...

  7. Leetcode Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  8. Fedora 23 配置

    Linux下安装Fedora 刻到u盘上 下好iso后准备刻录到u盘...可是查了一下只能在用一个叫dd的东西刻= =于是学了下...然而就是一句话: dd if=/path/xxx.iso of=/ ...

  9. IOS 网络请求方式

    iOS开发中的网络请求   今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异 ...

  10. Redis_Spring与Jedis的集成

    首先不得不服Spring这个宇宙无敌的开源框架,几乎整合了所有流行的其它框架,http://projects.spring.io/spring-data/从这上面看,当下流行的redis.solr.h ...