【Java】# 在项目中使用SLF4J+Logback来记录日志

1. 简介

1.1 SLF4J概述

SLF4J 代表 Simple Logging Facade for Java。相当于一个门面,提供了 Java 中所有日志框架的简单抽象。

  • 使用 SLF4J 框架,可以在部署时,迁移到所需的日志记录框架(如 Log4j, JUL, Simple logging,NOP等)
  • SLF4J 支持参数化日志记录消息
  • SLF4J提供了一个简单的Java工具,称为迁移器。

日志严重程度

序号 严重程度 描述
1 Fatal 导致应用程序终止的严重问题
2 ERROR 运行时错误
3 WARNING 大多数情况下,这种级别的错误是由于使用了已弃用的API
4 INFO 运行时发生的事件
5 DEBUG 有关系统流程的信息
6 TRACE 有关系统流程的更多详细信息

SLF4J 和 Log4j的关系

【Java】# 在项目中使用SLF4J+Logback来记录日志_第1张图片

1.2 Logback概述

Logback 分为三个不同的模块,logback-core(核心代码模块),logback-classic(log4j的一个改良版本,同时实现了slf4j的接口,这样如果之后要切换其他日志组件也是一件很容易的事),logback-access(访问模块与Servlet容器集成提供通过Http来访问日志的功能)

LoggerLoggerFactory 是 SLF4J包中的类 , LoggerContext 的作用是获得内部状态信息

logback在启动的时候,会按照下面的顺序加载配置文件(只要获取到配置之后就不再继续获取了)

  • 如果Java程序启动时指定了logback.configurationFile属性,就用该属性指定的配置文件。
    • java -D logback.configurationFile=/path/myLogback.xml Test,这样执行Test类的时候就会加载/path/myLogback.xml配置
  • 在classpath(resources目录下)中查找 logback.groovy 文件
  • 在classpath中查找 logback-test.xml 文件
  • 在classpath中查找 logback.xml 文件
  • 如果是 JDK6+,那么会调用ServiceLoader 查找 com.qos.logback.classic.spi.Configurator接口的第一个实现类
  • 自动使用 ch.qos.logback.classic.BasicConfigurator 在控制台输出日志

2. 项目中进行使用

使用 Maven进行快速开发

【Java】# 在项目中使用SLF4J+Logback来记录日志_第2张图片

2.1 导入依赖

<dependency>
    <groupId>org.slf4jgroupId>
    <artifactId>slf4j-apiartifactId>
    <version>1.7.25version>   
dependency>

<dependency>
    <groupId>ch.qos.logbackgroupId>
    <artifactId>logback-classicartifactId>
    <version>1.2.3version>  
dependency>

2.2 在resources目录下添加logback.xml

示例文件



<configuration debug="true" scan="true" scanPeriod="1 minutes">
    
	<property name="log.path" value="./logs" />

	
    
    
    <property name="console.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> 
    
    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        
        
        <encoder>
			<pattern>${console.pattern}pattern>
		encoder>
	appender>

	
    
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-info.logfile>
        
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.logfileNamePattern>
			
			<maxHistory>30maxHistory>
		rollingPolicy>
		<encoder>
			<pattern>${log.pattern}pattern>
		encoder>
        
        
        
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>INFOlevel>
            
            <onMatch>ACCEPTonMatch>
            
            <onMismatch>DENYonMismatch>
        filter>
	appender>

	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/sys-error.logfile>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.logfileNamePattern>
			
			<maxHistory>40maxHistory>
        rollingPolicy>
        <encoder>
            <pattern>${log.pattern}pattern>
        encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            
            <level>ERRORlevel>
			
            <onMatch>ACCEPTonMatch>
			
            <onMismatch>DENYonMismatch>
        filter>
    appender>

	
    
    
	<logger name="com.lwclick" level="debug" />            

    
	<root level="info">
        
		<appender-ref ref="console" />
	root>

	
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    root>
configuration>

2.3 代码中使用

public class Main {
    static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        logger.info("{}", "测试信息");
    }
}

你可能感兴趣的:(Java,logback,slf4j)