1.需要添加的包
logback-classic-1.1.3.jar
logback-core-1.1.3.jar slf4j-api-1.7.12.jar2.关于配置文件读取
系统启动,默认加载在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(){ 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详解
文档结构:
... ... ...
4.1设置根节点
start: configuration
scan : 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。...
scanPeriod : 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位(milliseconds、seconds、minutes和hours),默认单位是毫秒(milliseconds)。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug : 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
end: configuration
4.2 设置上下文名称
start:contextName
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。mylogConfig
end:contextName
4.3 设置变量
start:property
${LogConfig}
用来定义变量值的标签,通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
name : 变量的名称
value : 变量定义的值
end:property
4.4 获取时间戳字符串
start:timestamp
key : 标识名字
datePattern : 设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。
end:timestamp
4.5 所有日志器的总的设置 root
start:root
<root>也是<loger>元素,但是它是根loger
level : 设置所有日志的输出级别
<appender-ref>:设置所有日志的apender
end:root
4.6 个别日志器的个性化设置 logger
start:logger
用来设置某一个包或者具体的某一个类下的日志的打印级别、以及为其指定<appender>。
name : 可以是某一级的包名,也可以是一个完整的类名。必要
level : 打印级别,如果不指定默认为root中的打印级别
additivity : 是否向上级loger传递打印信息。默认是true
<appender-ref> : 日志输出设置,可以为logger其指定多个appender。如果不指定默认为root的appender
end:logger
4.7 设置日志输出方式appender
star:appender
总的结构(只是列出些常用的)
文件输出-指定的文件路径 文件输出-是否向旧的日志追加新内容 文件输出-文件滚动策略 文件输出— 文件输出-激活滚动
例1(控制台输出,根据需要分别打印不同级别的日志消息):
System.out %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n utf-8 error DENY ACCEPT System.err %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n error ACCEPT DENY
例2(追加的方式输出到文件,只有一个日志文件,所有的日志消息将一直追加到指定的文件后面):
F:/log/test/logback.log %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n true
例3 (滚动方式输出到文件。下面的设置将一天产生一个日志,如果当天日志超过10M将进行再分割)
F:/log/test/today.log %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n utf-8 F:/log/test/%d.%i.log 10MB
1. <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>:
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n utf-8
负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,使用“%”加“转换符”方式,如果要输出“%”,则必须用“\”对“\%”进行转义。(为了兼容旧的版本在此版本下还是支持使用<layout>节点设置输出格式,但为了升级的考虑不推荐使用)
转换符:
1. 输出日志的logger名
%c {length }
%lo {length } %logger {length }2.输出上下文名称。
%contextName
%cn3.输出当前日期,模式语法与java.text.SimpleDateFormat 兼容
%d {pattern }
%date {pattern }4.输出应用程序提供的信息
%m
%msg %message5.输出平台先关的分行符“\n”或者“\r\n”。
%n
6.输出日志级别。
%p
%le %level7.输出产生日志的线程名。
%t
%thread8.输出从程序启动到创建日志记录的时间,单位是毫秒
%r
%relative9.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,看其有什么属性可以设置的,其属性名即是节点名。
参考: