SLF4J不提供具体实现,可以理解为一个接口层面的框架,底层框架要用log4j或logback来实现。
使用log4j:
添加maven依赖:
<!-- log4j2,使用log4j2,需要log4j-api、log4j-core、log4j、slf4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<!-- slf4j-log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
在类路径(如src/main/resources)下添加log4j.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >
<!-- 控制台输出 -->
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<!-- 输出日志样式布局 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p [%t] %C:%M - %m%n" />
</layout>
</appender>
<!-- 所有日志文件输出,到达100MB产生新的文件,最多100个 -->
<appender name="ALL-FILE" class="org.apache.log4j.RollingFileAppender">
<!-- 文件位置 -->
<param name="File" value="./logs/all/sys-all-log.log" />
<!-- 最大生成文件个数(默认1) -->
<param name="MaxBackupIndex" value="100" />
<!-- 一个文件最大大小(默认10MB) -->
<param name="MaxFileSize" value="100MB" />
<!-- 输出日志样式布局 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p [%t] %C:%M - %m%n" />
</layout>
</appender>
<!-- 错误日志文件输出,每天生成一个新的文件 -->
<appender name="ERROR-FILE" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 文件位置 -->
<param name="File" value="./logs/error/sys-error-log.log" />
<!-- 前一天文件的后缀 -->
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<!-- 输出日志样式布局 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %-5p [%t] %C:%M - %m%n" />
</layout>
<!-- 过滤器设置输出的级别-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="error" />
<param name="levelMax" value="error" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<!-- 日志策略 -->
<category name="org.hibernate">
<priority value="debug" />
</category>
<category name="java.sql">
<priority value="debug" />
</category>
<!-- 默认控制器root -->
<root>
<priority value ="info"/>
<appender-ref ref="CONSOLE" />
<appender-ref ref="ALL-FILE" />
<appender-ref ref="ERROR-FILE" />
</root>
</log4j:configuration>
这个配置是在控制台输出,同时把所有日志保存到一个文件,同时把error错误日志单独保存到一个文件。
使用logback:
添加maven依赖:
<!-- 使用logback,需要slf4j-api和logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
在类路径(如src/main/resources)下添加logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds" debug="false">
<!-- 格式 -->
<property name="LOG_FORMAT" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %-5level [%thread] %class.%method\\(%F:%L\\) - %msg%n" />
<!-- 生成文件根目录 -->
<property name="LOG_HOME" value="./logs" />
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<Encoding>UTF-8</Encoding>
<!-- 布局 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} %-5level [%thread] %C:%M - %msg%n</pattern>
</layout>
</appender>
<!-- 日志分级别分开保存 -->
<!-- 所有日志 -->
<appender name="ALL-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Encoding>UTF-8</Encoding>
<encoder charset="UTF-8">
<pattern>${LOG_FORMAT}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/all/sys_all_log_%d{yyyyMMdd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>100</maxHistory>
</rollingPolicy>
</appender>
<!-- ERROR日志 -->
<appender name="ERROR-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> -->
<!-- <level>ERROR</level> -->
<!-- </filter> -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>DENY</onMatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>DENY</onMatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
</filter>
<Encoding>UTF-8</Encoding>
<encoder charset="UTF-8">
<pattern>${LOG_FORMAT}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error/sys_error_log_%d{yyyyMMdd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>100</maxHistory>
</rollingPolicy>
</appender>
<!-- 默认控制器 -->
<root level="INFO">
<appender-ref ref="ALL-FILE" />
<appender-ref ref="ERROR-FILE" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
这个配置是在控制台输出,同时把所有日志保存到一个文件,同时把error错误日志单独保存到一个文件。
以上两份xml是比较通用的了,若有别的需求可以自行百度进行改动,请大家参考。