常见的日志框架
JUL
基本组件
用户使用Logger来进行日志的记录,Logger可以持有多个处理器Handler
(日志的记录使用的是Logger,日志的输出使用的是Handler)
1.自定以日志级别时,记录器和处理器同时设置才生效
2.handler可以时consleHandler和fileHandler,输出到控制台和文件中
3.日志输出的格式可以simpleFormatter设置(logger.addHandler,handler.setFormatter)
4.单例获得Logger logger = logMannger.getLogger("")//参数为类的全路径名,不能new因为是protect的
父子关系
作用:
父亲所做的设置,也能够同时作用于儿子。
对logger1做日志打印相关的设置,然后我们使用logger2进行日志的打印。
配置文件
上面都是编码的形式配置。
默认的配置文件在jre下lib下logging.properties。
文件打印默认是覆盖形式,追加时在配置文件中加入配置
java.util.logging.FileHandler.append = true
Lockback
配置文件
1.配置文件的通用属性
2.Appender:输出的位置
2.1控制台
2.2输出文件
2.3输出html格式
3.日志记录器,里面引入对应的appender
3.1自定义logger
4.日志拆分和归档压缩
5.过滤器
6.异步日志
补充
Log4j
基本组件
Log4j主要由Loggers (日志记录器)、Appenders(输出控制器)和Layout(日志格式化器)组成。
Loggers控制日志的输出以及输出级别(JUL做日志级别Level)
Appenders 指定日志的输出方式(输出到控制台、文件等)
Layout控制日志信息的输出格式。
1.日志级别
关于日志级别信息,例如DEBUG、INFO、WARN、ERROR…级别是分大小的,DEBUG<INFO <WARN <ERROR,分别用来指定这条日志信息的重要程度,Log4j输出日志的规则是:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR级别的日志信息都会输出,而级别比 INFO低的DEBUG则不会输出。
2.Appenders
记录日志以及定义日志的级别仅仅是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
常见的Appender:
ConsoleAppender 将日志输出到控制台
FileAppender 将日志输出到文件中
DailyRollingFileAppender 将日志输出到一个日志文件,并且每天输出到一个新的文件
RollingFileAppender 将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件。
3.Layout
用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders 的后面附加Layouts来完成这个功能。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。
常见的Layout:
HTTMLayout 以httm格式输出
SimpleLayout 简单的格式输出,默认Info级别的
PatternLayout 自定义的格式
配置文件
配置文件需要配置Logger,Appernder,Layout。Log4j有很多形式的配置文件,主要使用的是log4j.properties。加载时从类路径下找log4j.properties文件,对于maven项目,就是resources包下。
如何加载配置文件以及配置什么内容?
通过查看PropertiesConfigurator类中的几个常量
输出到文件的配置文件
不管有多少种appender,就在第一行,添加,不添加就不生效
3.按照文件大小拆分日志文件
日志文件的大小,和日志文件的个数。比如1MB,5
文件超过1MB,就会生成第二个文件,知道第五个,再多就是新的覆盖旧的
4.按照时间拆分
该例精确到s了
5.输出到数据库
最后一行sql应该是一行
6.配置根节点logger
自定义logger的目的是为了区分不同系统的日志信息,比如我们自己的输出加自己的名字,第三方的加其他标识
Log4j2
日志级别
log4j2提供了和log4j相同的日志级别
配置文件
输出到控制台
输出到文件
(全局属性)
(增加Appenders)
(loggers引用)
日志拆分
异步日志
一般用后者
实例:
(使用AsyncAppender的方式)
(使用AsyncLogger的方式全局异步)
(使用AsyncLogger的方式混合异步)
在这个包下的类以及子包的类才是异步,其他包还是同步
log4j与slf4j配合
日志门面
JCL
Slf4j
slf4j绑定nop
slf4j绑定log4j
适配器
当绑定多个日志实现时(导入了多个日志框架的依赖),会出现警告信息。
需求
使用桥接器步骤: