引入pom依赖,slf4j为日志门面,简单理解为一个日志接口,本身没有实现不会输出什么,常用的实现有logback、log4j等,这里也引入了它们的依赖
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <!-- 日志实现 logback 依赖 --> <!-- <dependency>--> <!-- <groupId>ch.qos.logback</groupId>--> <!-- <artifactId>logback-classic</artifactId>--> <!-- <version>1.1.8</version>--> <!-- </dependency>--> <!-- 日志实现 log4j 依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency>
logback.xml配置:
<configuration> <!-- appender是configuration的子节点,是负责写日志的组件。 --> <!-- ConsoleAppender:把日志输出到控制台 --> <!-- name="STDOUT" 取个名字方便引用 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d [ %thread ] %-5level (%logger{36}:%line\) - %msg%n</pattern> <!-- 控制台使用UTF-8,不要使用GBK,否则会中文乱码 %d %p (%file:%line\)- %m%n--> <charset>UTF-8</charset> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <!-- 输出到指定文件 --> <file>d:/code/log/test.log</file> <encoder> <pattern>%d [ %thread ] %-5level %logger{36} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- 在日志配置级别的基础上过滤掉info级别以下的日志 --> <level>INFO</level> </filter> </appender> <!-- 指定一个包下的日志级别 additivity="false"时能阻止日志向上传递 --> <logger name="xyz.lyuan" level="debug" additivity="true"/> <root level="error"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> </root> </configuration>
log4j.properties配置:
# 全局日志配置 log4j.rootLogger=ERROR, stdout # 指定包下的日志输出级别 log4j.logger.xyz.lyuan=INFO log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] %l - %m %n
在代码中要使用slf4j的api,通过切换pom依赖项就可以切换实际的日志实现了
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class App { private static Logger logger = LoggerFactory.getLogger(App.class); public static void main(String[] args) { logger.trace("TRACE----"); logger.debug("debug----"); logger.info("info----"); logger.warn("warn----"); logger.error("error----"); new Thread(() -> { logger.trace("TRACE----"); logger.debug("debug----"); logger.info("info----"); logger.warn("warn----"); logger.error("error----"); }, "thread-name3423423432423423").start(); } }
原文:https://www.cnblogs.com/liuyiyuan/p/13160476.html