常见的日志框架
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
适配器 当绑定多个日志实现时(导入了多个日志框架的依赖),会出现警告信息。
需求
使用桥接器步骤:
|