首页 > 技术文章 > 4.0 slf4j和log4j

zl-programmer 2021-09-14 16:21 原文

slf4j 简单日志门面(Simple Logging Facade for Java)不是具体的日志解决方案,它只服务于各种各样的日志系统 ,是一种接口方案

 
在使用slf4j日志框架时 必须要有以下两个包
 
1. slf4j-api提供接口 只是一个日志标准并不提供实现
 
2.slf4j-log4j提供slf4j接口的具体实现
 
private final static Logger logger = LoggerFactory.getLogger(LogTest.class);
 
注:此时 Logger , LoggerFactory都来自slf4j-api接口,而在slf4j-logrj中具体实现
 
 
3.log4j包可以单独使用,也可以通过slf4j操作, log4j包原则上不是必须的,但是一般在使用slf4j框架是也加进去
 
private Logger logger = Logger.getLogger(Log4jTest.class);
 
注:当单独使用log4j包时,Logger来自log4j包
 
 
在使用slf4j日志框架时,Logger必须作为类的静态变量使用,即上面static不能省略。原因如下:
1 使用static修饰的属性是归这个类使用的
2 也就是说不论这个类实例化多少个,大家用的都是同一个static属性
3 log4j记录的是当前类的日志,不是每个实例的日志
4 所以只要有一个记录就可以了
 
log4j日志级别
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别)因为OFF是全部关闭,ALL是全部放开
优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。
级别越高打起来越困难,只打等于或高于当前配置的日志级别的日志!
A:off 最高等级,用于关闭所有日志记录。
B:fatal 指出每个严重的错误事件将会导致应用程序的退出。
C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm 表明会出现潜在的错误情形。
E:info 一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all 最低等级,用于打开所有日志记录。
 
配置文件 log4j.properties 或log4j.xml等等 是log4j的核心 打出几种文件,何种级别,何种方式打出等等一些列配置。。。
 
log4j.properties解说:
log4j.rootLogger = DEBUG,stdout,D,E
 
# 配置日志信息输出目的地
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
# Target是输出目的地的目标
log4j.appender.stdout.Target = System.out
# 指定日志消息的输出最低层次
log4j.appender.stdout.Threshold = INFO
# 定义名为stdout的输出端的layout类型
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
# 如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss} %l%m%n
 
# 名字为D的对应日志处理
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
# File是输出目的地的文件名
log4j.appender.D.File = log\\app_debug.log
#绝对路径写法 E:\\IdeaProjects\\studyDemo\\log4j\\log\\app_debug.log
#false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.TTCCLayout
 
#E配置类似D,级别为ERROR
 
# 首行必须写这个log4j.rootLogger DEBUG这里代表能打日志的最细粒度,stdout是配置控制台输出日志,D,E 分别代表一种日志打印方式
因为控制台定义了日志级别为INfO,那么如果代码中用debug级别的日志 如:logger.debug("this is a debug log"); 将不会打印到控制台
 
D模式中级别为DEBUG,则代码中的debug,info,warn,error级别的日志都会打印(高于或等于DEBUG级别)
 
D模式中级别为ERROR,则代码中的debug,info,warn将不会打印,只打印error级别的日志(只有error是,其他都比ERROR级别低)
 
实例见studyDemo/case/log4j
 
 
 
 

推荐阅读