Slf4j
slf4j
(Simple Loging Facade For Java)是 Java 程序提供日志输出的统一接口,它对日志相关功能进行限制,不提供具体实现,只是告诉其他具体日志实现方案应该满足什么功能、实现什么接口
所以单独的slf4j
是不能工作的,必须搭配其他具体的日志实现方案,比如 apache 的 org.apache.log4j.Logger,JDK 自带的 java.util.logging.Logger 以及 log4j 等
POM
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
log4j.properties 配置文件
配置文件
在Maven的src/main/resources
目录下创建log4j.properties
文件,名字不可变,log4j会自动查找该名字的文件并加载配置
log4j.rootLogger=INFO, console, file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=logs/log.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.file.layout.ConversionPattern=%d %p [%c] - %m%n
属性解释
log4j.rootLogger
:根日志,配置日志级别INFO
,预定义了两种附加器(console
和file
),附加器的作用是控制日志输出的位置
colsole
附加器的配置
log4j.appender.console
:日志输出位置在控制台log4j.appender.console.layout
:采用匹配器布局模式org.apache.log4j.HTMLLayout
:网页布局,以 HTML 表格形式布局org.apache.log4j.SimpleLayout
:简单布局,包含日志信息的级别和信息字符串org.apache.log4j.PatternLayout
:匹配器布局,其通过设置 PatternLayout 的ConversionPattern 属性值来控制具体输出格式的
- log4j.appender.console.layout.ConversionPattern:由于使用了匹配器布局,所以需要配此项,日志输出格式为:日期 日志级别 [类名] - 消息换行符
file
附加器配置 log4j.appender.file
:每天产生一个日志文件log4j.appender.file.File
:日志文件输出位置 logs/log.loglog4j.appender.file.layout
:采用匹配器布局模式log4j.appender.A3.MaxFileSize
:日志文件最大值log4j.appender.A3.MaxBackupIndex
:最多纪录文件数log4j.appender.file.layout.ConversionPattern
:日志输出格式为:日期 日志级别 [类名] - 消息换行符
格式参数
%m
:代码设定的消息%p
:优先级,即 DEBUG,INFO,WARN,ERROR,FATAL%r
:自应用启动到输出该 log 信息耗费的毫秒数%c
:所属的类目,通常就是所在类的全名%t
:产生该日志事件的线程名%n
:换行%d
:日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28,921%l
:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyTest {
public static final Logger logger = LoggerFactory.getLogger(MyTest.class);
public static void main(String[] args) {
logger.info("slf4j for info");
logger.debug("slf4j for debug");
logger.error("slf4j for error");
logger.warn("slf4j for warn");
String message = "Hello SLF4J";
// {}为log4j提供的占位符
logger.info("slf4j message is : {}", message);
}
}