Slf4j + Logback日志框架

先引入相关依赖(当然很多包会间接依赖这些依赖)

 <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>1.18.0version>
        dependency>

        
        <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>

        
        <dependency>
            <groupId>org.junit.jupitergroupId>
            <artifactId>junit-jupiter-apiartifactId>
            <version>5.2.0version>
            <scope>testscope>
        dependency>

这里使用Slf4j的原因,市面上有很多日志框架,Slf4j可以看作一个接口或类似jdbc,将不同的日志框架整合起来,方便我们在一个项目中需要改变日志框架时,可以很好的进行维护。这里我们使用的是Slf4j + logback的方式。

另外,Slf4j 日志输出采用占位符{}的方式,相对于其他的日志框架可以避免很多字符串拼接而造成的性能问题。

接下来聊一聊关于logback配置文件的问题:











<configuration scan="true" scanPeriod="10 seconds">

    <contextName>austincontextName>

    
    
    <property name="log.path" value="logs"/>

    <springProperty scope="context" name="grayLogIp" source="austin.business.graylog.ip"/>

	
	<property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%t][%file:%line][%X{traceId}] -| %m%n"/>





    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            
            <charset>UTF-8charset>
        encoder>
    appender>









   
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/austin-info.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset>
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${log.path}/logs/austin-info-%d{yyyy-MM-dd}.%i.logfileNamePattern>


            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1000MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>infolevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/austin-error.logfile>
        
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%npattern>
            <charset>UTF-8charset> 
        encoder>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logs/austin-error-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1000MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>15maxHistory>
        rollingPolicy>
        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>
    appender>

    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
        
        <graylogHost>${grayLogIp}graylogHost>
        
        <graylogPort>12201graylogPort>
        
        <maxChunkSize>508maxChunkSize>
        
        <useCompression>trueuseCompression>
        <encoder class="de.siegmar.logbackgelf.GelfEncoder">
            
            <includeRawMessage>falseincludeRawMessage>
            <includeMarker>trueincludeMarker>
            <includeMdcData>trueincludeMdcData>
            <includeCallerData>falseincludeCallerData>
            <includeRootCauseData>falseincludeRootCauseData>
            
            <includeLevelName>trueincludeLevelName>
            <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%m%nopexpattern>
            shortPatternLayout>
            <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d - [%thread] %-5level %logger{35} - %msg%npattern>
            fullPatternLayout>

            
            <staticField>app_name:austinstaticField>
        encoder>
    appender>

    <root level="info">
        
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
        <appender-ref ref="GELF"/>
    root>

configuration>

当spring加载时会自动去路径下找到logback.xml的名字的文件并加载配置

另一种写法:


<configuration scan="true" scanPeriod="60 seconds" debug="false">
    

    
    <property name="log.level" value="debug"/>

    
    <property name="log.maxHistory" value="10" />

    
    <property name="log.filePath" value="logs"/>

    <property name="log.pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>


    

    
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">

        
        <encoder>
            <pattern>${log.pattern}pattern>

            
            <charset>UTF-8charset>
        encoder>

    appender>


    
    <appender name="debugAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">

        
        <file>${log.filePath}/debug.logfile>


        
        
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.logfileNamePattern>

            <maxHistory>${log.maxHistory}maxHistory>

        rollingPolicy>

        
        <encoder>
            <pattern>${log.pattern}pattern>

            
            <charset>UTF-8charset>
        encoder>

        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUGlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

    appender>


    
    <appender name="infoAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">

        
        <file>${log.filePath}/info.logfile>


        
        
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.logfileNamePattern>

            <maxHistory>${log.maxHistory}maxHistory>

        rollingPolicy>

        
        <encoder>
            <pattern>${log.pattern}pattern>

            
            <charset>UTF-8charset>
        encoder>

        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFOlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

    appender>


    
    <appender name="errorAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">

        
        <file>${log.filePath}/error.logfile>


        
        
        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

            
            <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.logfileNamePattern>

            <maxHistory>${log.maxHistory}maxHistory>

        rollingPolicy>

        
        <encoder>
            <pattern>${log.pattern}pattern>

            
            <charset>UTF-8charset>
        encoder>

        
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERRORlevel>
            <onMatch>ACCEPTonMatch>
            <onMismatch>DENYonMismatch>
        filter>

    appender>




    
    




    <logger name="com.joofeel.miniprogram" level="${log.level}" additivity="true">
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="debugAppender"/>
        <appender-ref ref="errorAppender"/>
    logger>

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

configuration>

使用

@Slf4j
class UserServiceImpl{
	public void deleteUser(int id){
		log.info("传入id为{}",id);
		}
}

@Slf4j是Lombok的注解,代替了一下语句

Logger log=LoggerFactory.getLogger();

你可能感兴趣的:(java项目工具,spring,java,junit)