log
log-level
- OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
门面日志
2对基友+1个单身狗
- Commons Logging和Log4j这一对好基友,它们一个负责充当日志API,一个负责实现日志底层,搭配使用非常便于开发。
- SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。是另一对基友
- jdk是单身狗....
slf4j
slf4j+logback
commons-logging
ccommons-logging+ log4j
日志实现框架
j.u.l
是java.util.logging包的简称,是JDK在1.4版本中引入的Java原生日志框架
log4j
控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程
log4j2
Log4j2已经不仅仅是Log4j的一个升级版本了,而是从头到尾被重写的, 解决了log4j的问题列表
logback
当前分成三个模块:logback-core,logback- classic和logback-access
- logback-core : 其它两个模块的基础模块。
- logback-classic是Log4j的一个改良版本,logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如Log4j或j.u.l
- logback-access 访问模块与Servlet容器集成提供通过Http来访问日记的功能(一般不用)
log框架
SLF4J
Simple Logging Facade for JAVA,日志面板用于加载不同的实现
slf4j是日志层抽象的接口,不负责具体的日志实现。只在编译时接入不同的日志系统,slf4j入口就是众多接口的集合。
查看slf4j-api源码具体有哪些接口,全部都定义在slf4j-api中。
不同的实现方式
- slf4j-simpl直接实现slf4j
- Logback牛逼的实现slf4j
Commons-Logging
Commons Logging的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。
默认情况下,Commons Logging自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。
log4j
Log4j 是 Apache 的一个开源项目,org.apache.log4j.Logger;
Log4j由三个重要组成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)
- Logger:控制要启用或禁用哪些日志记录语句,日志级别
- Appenders : 日志输出:控制台、 文件、UNIX Syslog 守护进程,甚至是套接口服务器、NT 的事件记录器、,GUI 组件
- Layout : 控制日志的显示格式;
配置文件: log4j.xml; log4j.properties
logback
Logback 主要由三个模块组成:logback-core,logback-classic。logback-access
- logback-core 是其它模块的基础设施,其它模块基于它构建,显然,logback-core 提供了一些关键的通用机制
- logback-classic 的地位和作用等同于 Log4J,它也被认为是 Log4J的一个改进版,并且它实现了简单 日志门面 SLF4J;
- logback-access 主要作为一个与 Servlet 容器交互的模块,比如说 tomcat 或者 jetty,提供一些与 HTTP 访问相关的功能
应用
- 配置文件可以处理不同的情况,开发人员经常需要判断不同的Logback配置文件在不同的环境下(开发,测试,生产)。而这些配置文件仅仅只有一些很小的不同,可以通过,和来实现,这样一个配置文件就可以适应多个环境。
- SiftingAppender(一个非常多功能的Appender):它可以用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender能够区别日志事件跟进用户的Session,然后每个用户会有一个日志文件。
- 自动压缩已经打出来的log:RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响
- 堆栈树带有包版本:Logback在打出堆栈树日志时,会带上包的数据
- 自动去除旧的日志文件:通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory 12,那那些log文件超过12个月的都会被自动移除
配置文件
Logger、appender及layout
Logger作为日志的记录器,各个logger 都被关联到一个 LoggerContext,LoggerContext负责制造logger,getLogger方法以logger名称为参数。用同一名字调用LoggerFactory.getLogger 方法所得到的永远都是同一个logger对象的引用。
- 尝试在 classpath下查找文件logback-test.xml;
- 如果文件不存在,则查找文件logback.xml;
- 如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台。
xml结构
-
configuration的结构
appender配置日志输出loggerroot配置日志界别- contextName项目名称
- property 属性
- timestamp 时间戳
-
configuration的属性
- scan: true,配置文件发生改变,将会被重新加载,默认值为true
- scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
- debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
-
appender 需要看具体的官方文档
-
logger属性:用来设置某一个包或具体的某一个类的日志打印级别以及指定appender
- name:一个包或者具体的某一个类。
- level: 打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF
- addtivity:是否向上级loger传递打印信息。默认是true
-
root 也是logger,root根
jdk-log
jdk自带实现java.util.logging.Logger,jdk自己干的,基本不用
MDC
org.slf4j.MDC;
MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能.
类似ThreadLocal
ELK
Elasticsearch、Logstash、Kibana