logback使用

jopen 9年前

1.需要添加的包

logback-classic-1.1.3.jar
logback-core-1.1.3.jar
slf4j-api-1.7.12.jar

2.关于配置文件读取

 系统启动,默认加载在classpath下的logback.xml 或者 logback-test.xml和 logback.groovy 文件,

一般我们只要在classpath下添加logback.xml文件

3.关于日志创建

import org.slf4j.Logger;  import org.slf4j.LoggerFactory;    public class Test {   private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);      public void logOutPut(){    LOGGER.debug("hello word");   }      public static void main(String[] args) {    Test t = new Test();    t.logOutPut();   }  }
4.logback.xml详解

文档结构:

<configuration>      <contextName></contextName>      <property/>       <timestamp></timestamp>      <appender>...</appender>      <logger> ...</logger>      <root>...</root>  </configuration>

4.1设置根节点

start: configuration

<configuration scan="true" scanPeriod="60 seconds" debug="false">...</configuration >
scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位(milliseconds、seconds、minutes和hours),默认单位是毫秒(milliseconds)。当scan为true时,此属性生效。默认的时间间隔为1分钟。

debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

end: configuration


4.2 设置上下文名称

start:contextName


<contextName>mylogConfig</contextName>
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。


end:contextName


4.3 设置变量

start:property

<configuration>        <property name="LogConfig" value="mylogConfig" />        <contextName>${LogConfig}</contextName>   </configuration>

用来定义变量值的标签,通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

name : 变量的名称

value : 变量定义的值

end:property


4.4 获取时间戳字符串

start:timestamp

<timestamp key="date" datePattern="yyyy-MM-dd"/>
key : 标识名字

datePattern : 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。

end:timestamp


4.5 所有日志器的总的设置 root

start:root


<root level="error">      <appender-ref ref="STDOUT" />      <appender-ref ref="FILE-AUDIT" />  </root>


也是<loger>元素,但是它是根loger

level : 设置所有日志的输出级别

<appender-ref>:设置所有日志的apender

end:root


4.6 个别日志器的个性化设置 logger

start:logger

<logger name="com.mkyong.web" level="debug" additivity="false">       <appender-ref ref="STDOUT" />       <appender-ref ref="FILE-AUDIT" />   </logger>
用来设置某一个或者具体的某一个下的日志的打印级别、以及为其指定<appender>。

name : 可以是某一级的包名,也可以是一个完整的类名。必要

level : 打印级别,如果不指定默认为root中的打印级别

additivity : 是否向上级loger传递打印信息。默认是true

<appender-ref> : 日志输出设置,可以为logger其指定多个appender。如果不指定默认为root的appender

end:logger


4.7 设置日志输出方式appender

star:appender

总的结构(只是列出些常用的)

<appender>   <target></target>   <encoder></encoder>   <filter></filter>   <file>文件输出-指定的文件路径</file>   <append>文件输出-是否向旧的日志追加新内容</append>   <rollingPolicy>文件输出-文件滚动策略</rollingPolicy>   <prudent>文件输出—</prudent>   <triggeringPolicy>文件输出-激活滚动</triggeringPolicy>  </appender>

例1(控制台输出):

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">    <target>System.out</target>    <encoder>       <Pattern>     %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n       </Pattern>       <charset>utf-8</charset>    </encoder>    <filter class="ch.qos.logback.classic.filter.LevelFilter">       <level>error</level>       <onMatch>DENY</onMatch>       <onMismatch>ACCEPT</onMismatch>    </filter>   </appender>     <appender name="STDOUT_ERROR" class="ch.qos.logback.core.ConsoleAppender">    <target>System.err</target>    <encoder>       <Pattern>     %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n       </Pattern>    </encoder>    <filter class="ch.qos.logback.classic.filter.LevelFilter">       <level>error</level>       <onMatch>ACCEPT</onMatch>       <onMismatch>DENY</onMismatch>    </filter>   </appender>



例2(输出到文件):


<appender name="FILE-AUDIT" class="ch.qos.logback.core.FileAppender">   <encoding>UTF-8</encoding>   <!-- today log -->   <file>usr/logs/appName/test.log</file>   <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">      <Pattern>        %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n      </Pattern>   </encoder>   <append>false</append>  </appender>


例3 (滚动方式输出到文件):



<appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">   <encoding>UTF-8</encoding>   <!-- today log -->   <file>usr/logs/appName/error.today.log</file>   <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">      <Pattern>      %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n      </Pattern>   </encoder>   <append>false</append>   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">     <!-- rollover daily -->     <fileNamePattern>usr/logs/appName/archived/error.%d.%i.log</fileNamePattern>     <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">        <maxFileSize>10MB</maxFileSize>     </timeBasedFileNamingAndTriggeringPolicy>   </rollingPolicy>    </appender>


1. <appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">...</appender>
name : appender的标识名称

class : 指定日志输出方案的具体实现类。(以下是官方提供的几种方案)

  • ch.qos.logback.core.ConsoleAppender                   //输出到控制台
  • ch.qos.logback.core.FileAppender                         //输出到文件
  • ch.qos.logback.core.rolling.RollingFileAppender    //以滚动方式输出到文件


2.<target>:当为控制台输出时可为其指定 System.out 或者 System.err,默认 System.out 

3.<encoding: 设置文件的编码方式

4.<filter>:设置输出时过滤策略

5.<file>:当为文件输出时,为其指定文件路径。可以是绝对,也可以是相对,如果上级目录不存在会自动创建,没有默认值。

6.<append>:当为文件输出时,是否向旧的日志追加新内容

7.<rollingPolicy>:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。

8. <prudent> :如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false

9.<triggeringPolicy> :  告知 RollingFileAppender 合适激活滚动。

10.<encoder>:


end:appender

一些常用的配置:见《logback常用配置》


来自: http://my.oschina.net/u/2552286/blog/597358