logback使用

1.须要添加的包 java

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

2.关于配置文件读取 正则表达式

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

通常咱们只要在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(){ MDC.put("ip", "192.168.1.1"); LOGGER.debug("hello word"); MDC.remove("ip"); } public static void main(String[] args) { Test t = new Test(); t.logOutPut(); } }




4.logback.xml详解

文档结构: app

<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。 lua

end: configuration spa


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>

<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_APPEND" class="ch.qos.logback.core.FileAppender">
    <file>F:/log/test/logback.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>true</append>
</appender>


例3 (滚动方式输出到文件。下面的设置将一天产生一个日志,若是当天日志超过10M将进行再分割)

<appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>F:/log/test/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> <charset>utf-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>F:/log/test/%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.<filter>:设置输出时过滤策略

4.<file>:当为文件输出时,为其指定文件路径。能够是绝对,也能够是相对,若是上级目录不存在会自动建立,没有默认值。

5.<append>:当为文件输出时,是否向旧的日志追加新内容,默认true,当是滚动输出日志文件时该属性将会被托 管(设置了也不生效),且值为true

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

7. <prudent> :若是是 true,日志会被安全的写入文件,即便其余的FileAppender也在向此文件作写入操做,效率低,默认是 false

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

9.<encoder>:

<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> <charset>utf-8</charset> </encoder>

负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流目前PatternLayoutEncoder 是惟一有用的且默认的encoder ,使用“%”加“转换符”方式,若是要输出“%”,则必须用“\”对“\%”进行转义。(为了兼容旧的版本在此版本下仍是支持使用<layout>节点设置输出格式,但为了升级的考虑不推荐使用)

转换符:

1. 输出日志的logger名

%c {length } 
%lo {length } 
%logger {length } 

2.输出上下文名称。

%contextName 
%cn

3.输出当前日期,模式语法与java.text.SimpleDateFormat 兼容

%d {pattern } 
%date {pattern }

4.输出应用程序提供的信息

%m
%msg
%message

5.输出平台先关的分行符“\n”或者“\r\n”。

%n

6.输出日志级别。

%p
%le
%level

7.输出产生日志的线程名。

%t
%thread

8.输出从程序启动到建立日志记录的时间,单位是毫秒

%r
%relative

9.p 为日志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。

%replace(p ){r, t}    例:  %replace(%msg){'\s', '' }

10.输出MDC值

%X{keyName}   例: %X{ip}   --->   192.168.1.1         (java代码见3)

11.以及其余可能会影响性能的转换符

%L 或  %line                                            输出执行日志请求的行号。尽可能避免使用
%M 或 %method                                      输出执行日志请求的方法名。尽可能避免使用
%F 或 %file                                              输出执行记录请求的java源文件名。尽可能避免使用
%C {length } 或 %class {length }                输出执行记录请求的调用者的全限定名。尽可能避免使用
%caller{depth}caller{depth, evaluator-1, ... evaluator-n}   输出生成日志的调用者的位置信息,整数选项表示输出信息深度。

12.格式修饰符,与转换符共同使用:
可选的格式修饰符位于“%”和转换符之间。
第一个可选修饰符是左对齐 标志,符号是减号“-”;接着是可选的最小宽度 修饰符,用十进制数表示。若是字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。若是字符大于最小宽度,字符永远不会被截断。最大宽度 修饰符,符号是点号"."后面加十进制数。若是字符大于最大宽度,则从前面截断。点符号“.”后面加减号“-”在加数字,表示从尾部截断。

end:appender

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

ps: 以前我一直再找logback.xml的dtd,或schema,可是没找到,缘由是这里的节点名称是其使用类的属性。例:若是你要想看 <encoder class='PatternLayoutEncoder'>  这个节点下的配置方案,那你能够去查看PatternLayoutEncoder这类的api,看其有什么属性能够设置的,其属性名便是节点名。

参考:http://blog.csdn.net/haidage/article/details/6794529

相关文章
相关标签/搜索