slf4j(Simple Logging Facade for Java :简单的Java日志记录),slf4j本身只是提供抽象层的接口,提供了日志记录实现的规范,不需要关心日志记录的底层实现原理;
slf4j的使用非常简单,使用比log4j更加方便高效
第一步:maven工程导入slf4j使用的坐标
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
第二步:将slf4j的配置文件拷贝到项目中
下面是log4j.properties的具体配置
# rootLogger参数分别为:根Logger级别,输出器CONSOLE,输出器LOGFILE
log4j.rootLogger = debug, CONSOLE, LOGFILE
# 输出信息到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# 输出DEBUG级别以上的日志到d:\axis.log
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
另一种是log4j.xml配置文件的方式
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="off" monitorInterval="1800">
<properties>
<!--可以写绝对路径, 默认在C盘用户名下创建名为logs的文件夹作为文件目录 -->
<property name="LOG_HOME"></property>
<!-- 错误日志的名称 -->
<property name="ERROR_LOG_FILE_NAME">error</property>
<property name="BACKUP_HOME">{LOG_HOME}/backup</property>
<property name="SERVER_NAME">global</property>
</properties>
<Appenders>
<!-- 控制台输出 -->
<Console name="Console" target="SYSTEM_OUT" follow="true">
<!-- 日志文件输出格式:%date表示日期 ,%level 表示日志级别,%thread 表示线程,%msg表示消息,%n表示换行 -->
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
</Console>
<!-- 错误日志 -->
<RollingRandomAccessFile name="ErrorLog"
<!-- 日志名称 -->
fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
<!-- 文件格式 -->
filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
<!-- 输出日志格式 -->
<PatternLayout pattern="%d %-5p (%F:%L) - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="30MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingRandomAccessFile>
<!-- 文件日志 -->
<!-- 按天记录日志 -->
<RollingRandomAccessFile name="DevLog" fileName="${LOG_HOME}/dev.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/dev-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
<Policies>
<!-- 1小时滚动一次,modulate="true"表示调整时间 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<!-- 单个文件最大字节 -->
<SizeBasedTriggeringPolicy size="40MB"/>
</Policies>
<!-- 删除最旧的日志文件,默认是3个文件 -->
<DefaultRolloverStrategy max="30"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- 设置日志级别 -->
<logger name="org.springframework.core" level="info"/>
<logger name="org.springframework.beans" level="info"/>
<logger name="org.springframework.context" level="info"/>
<logger name="org.springframework.web" level="info"/>
<logger name="org.hibernate" level="info"/>
<root level="info" includeLocation="true">
<appender-ref ref="Console"/>
<appender-ref ref="DevLog"/>
</root>
</Loggers>
</Configuration>
接下来就可以在代码中使用logger记录日志了!slf4j支持占位符的方式,使用体验更好;和log4j相比降低了字符串拼接的资源损耗,内存占用更少!为什么使用slf4j而不是用log4j:详细说明参照文章
输出日志级别的说明
error :严重错误 ;
warn:警告;
info:一般要显示的信息;
debug:程序的调试信息;
日志严重级别 error>warn>info>debug
级别越低,日志记录信息越多!
最后附一个log4j2的教程