zoukankan      html  css  js  c++  java
  • Logback 简单使用

    1、Logback为取代log4j而生

         Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。

    2、Logback的核心对象:Logger、Appender、Layout

         Logback主要建立于Logger、Appender 和 Layout 这三个类之上。

         Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。Logger对象一般多定义为静态常量,如:

    复制代码
     1 package com.logs;
     2 
     3 import org.slf4j.Logger;
     4 import org.slf4j.LoggerFactory;
     5 
     6 public class MyApp {
     7     final static Logger logger = LoggerFactory.getLogger("MyApp.class");
     8     public static void main(String[] args) {
     9         
    10         logger.trace("trace");
    11         logger.debug("debug str");
    12         logger.info("info str");
    13         logger.warn("warn");
    14         logger.error("error");
    15     }
    16 }
    复制代码

         Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。

         Layout:负责把事件转换成字符串,格式化的日志信息的输出。具体的Layout通配符,可以直接查看帮助文档。

    3、Level 有效级别

        Logger可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN和ERROR,定义于ch.qos.logback.classic.Level类。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。为确保所有logger都能够最终继承一个级别,根logger总是有级别,默认情况下,这个级别是DEBUG。

    4、 三值逻辑

       Logback的过滤器基于三值逻辑(ternary logic),允许把它们组装或成链,从而组成任意的复合过滤策略。过滤器很大程度上受到Linux的iptables启发。这里的所谓三值逻辑是说,过滤器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一个。

    如果返回DENY,那么记录事件立即被抛弃,不再经过剩余过滤器;

    如果返回NEUTRAL,那么有序列表里的下一个过滤器会接着处理记录事件;

    如果返回ACCEPT,那么记录事件被立即处理,不再经过剩余过滤器。

    5、Filter 过滤器

        Logback-classic提供两种类型的过滤器:常规过滤器和TuroboFilter过滤器。Logback整体流程:Logger 产生日志信息;Layout修饰这条msg的显示格式;Filter过滤显示的内容;Appender具体的显示,即保存这日志信息的地方。

    6、具体使用案例

         Java项目中一般都会应用比如struts、spring、hibernate等开源框架,而这些框架很多是应用log4j记录日志的,所以我们考虑用log4j + slf4j + logback 。这样我们需要导入log4j-over-slf4j-1.6.4.jar 、logback-classic-1.0.1.jar 、logback-core-1.0.1.jar 、slf4j-api-1.6.4.jar ,如果你要用到EvaluatorFilter过滤器来过滤日志Msg中的特殊字符需要导入其依赖包 janino-2.3.2.jar。其logback.xml

    复制代码
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <configuration>
      3 
      4     <!-- 控制台输出 -->
      5     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
      6         <encoder>
      7             <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
      8         </encoder>
      9     </appender>
     10 
     11     <!-- 时间滚动输出 level为 DEBUG 日志 -->
     12     <appender name="file—debug"
     13         class="ch.qos.logback.core.rolling.RollingFileAppender">
     14         <filter class="ch.qos.logback.classic.filter.LevelFilter">
     15             <level>DEBUG</level>
     16             <onMatch>ACCEPT</onMatch>
     17             <onMismatch>DENY </onMismatch>
     18         </filter>
     19         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
     20             <FileNamePattern>D:/logs/debug.%d{yyyy-MM-dd}.log</FileNamePattern>
     21             <MaxHistory>30</MaxHistory>
     22         </rollingPolicy>
     23         <encoder>
     24             <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
     25         </encoder>
     26     </appender>
     27 
     28     <!-- 时间滚动输出 level为 ERROR 日志 -->
     29     <appender name="file—error"
     30         class="ch.qos.logback.core.rolling.RollingFileAppender">
     31         <filter class="ch.qos.logback.classic.filter.LevelFilter">
     32             <level>ERROR</level>
     33             <onMatch>ACCEPT</onMatch>
     34             <onMismatch>DENY </onMismatch>
     35         </filter>
     36         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
     37             <FileNamePattern>D:/logs/error.%d{yyyy-MM-dd}.log</FileNamePattern>
     38             <MaxHistory>30</MaxHistory>
     39         </rollingPolicy>
     40         <encoder>
     41             <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
     42         </encoder>
     43     </appender>
     44 
     45     <!-- 特定过滤含有某字符串的日志 -->
     46     <appender name="file-str"
     47         class="ch.qos.logback.core.rolling.RollingFileAppender">
     48         <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
     49             <evaluator>
     50                 <expression>message.contains("str")</expression>
     51             </evaluator>
     52             <onMatch>ACCEPT</onMatch>
     53             <onMismatch>DENY</onMismatch>
     54         </filter>
     55         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
     56             <FileNamePattern>D:/logs/contains.%d{yyyy-MM-dd}.log
     57             </FileNamePattern>
     58             <MaxHistory>30</MaxHistory>
     59         </rollingPolicy>
     60         <encoder>
     61             <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
     62         </encoder>
     63     </appender>
     64 
     65     <!-- 数据库输出 -->
     66     <appender name="db" class="ch.qos.logback.classic.db.DBAppender">
     67         <connectionSource
     68             class="ch.qos.logback.core.db.DriverManagerConnectionSource">
     69             <driverClass>com.mysql.jdbc.Driver</driverClass>
     70             <url>jdbc:mysql://host_name:3306/datebase_name</url>
     71             <user>username</user>
     72             <password>password</password>
     73         </connectionSource>
     74     </appender>
     75 
     76     <logger name="java.sql.Connection">
     77         <level value="DEBUG" />
     78     </logger>
     79     <logger name="java.sql.Statement">
     80         <level value="DEBUG" />
     81     </logger>
     82     <logger name="com.ibatis">
     83         <level value="DEBUG" />
     84     </logger>
     85     <logger name="com.ibatis.common.jdbc.SimpleDataSource">
     86         <level value="DEBUG" />
     87     </logger>
     88     <logger name="com.ibatis.common.jdbc.ScriptRunner">
     89         <level value="DEBUG" />
     90     </logger>
     91     <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate">
     92         <level value="DEBUG" />
     93     </logger>
     94     <logger name="com.danga.MemCached">
     95         <level value="INFO" />
     96     </logger>
     97     <logger name="org.springframework.test">
     98         <level value="DEBUG" />
     99     </logger>
    100     <logger name="org.apache.struts2">
    101         <level value="DEBUG" />
    102     </logger>
    103 
    104     <root level="DEBUG">
    105         <appender-ref ref="stdout" />
    106         <appender-ref ref="file—debug" />
    107         <appender-ref ref="file—error" />
    108         <appender-ref ref="file-str" />
    109         <appender-ref ref="db" />
    110     </root>
    111 
    112 </configuration>
    复制代码
     
     
    http://www.cnblogs.com/yongze103/archive/2012/05/05/2484753.html
  • 相关阅读:
    LeetCode Merge Two Sorted Lists 归并排序
    LeetCode Add Binary 两个二进制数相加
    LeetCode Climbing Stairs 爬楼梯
    034 Search for a Range 搜索范围
    033 Search in Rotated Sorted Array 搜索旋转排序数组
    032 Longest Valid Parentheses 最长有效括号
    031 Next Permutation 下一个排列
    030 Substring with Concatenation of All Words 与所有单词相关联的字串
    029 Divide Two Integers 两数相除
    028 Implement strStr() 实现 strStr()
  • 原文地址:https://www.cnblogs.com/xrhou12326/p/3946120.html
Copyright © 2011-2022 走看看