springboot项目使用slf4j控制台输出日志+输出日志文件到本地

控制台输出日志

先引入maven依赖


    org.slf4j
    slf4j-api
    1.7.25

然后在使用日志的类中创建logger全局变量

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public Logger logger = LoggerFactory.getLogger(TestController.class);

然后就可以使用logger.info、logger.error等在控制台输出日志了

logger.info("测试输出日志");
logger.error(e.toString(), e);

输出日志文件到本地

首先,在application.yml中配置日志输出

logging:
  file: mylogs.log
  path: D:/SuperMapDataLogs/mylogs

如果就这样,那么本地是不会出现相关的日志文件的,接下来,就是要在xml中配置logging.path

我们在src/main/resources中创建一个logback-spring.xml,注意:-spring在application之后可以扫描到,如果只写logback.xml那么该xml就会优先于application.yml进行扫描,因此无效

logback-spring.xml(修改后面的包名即可)







    logback-spring

    
    

    
    
    
    
    
    
    

    
    
        
        
            debug
        
        
            ${CONSOLE_LOG_PATTERN}
            
            UTF-8
        
    

    
    
    
        
        ${logging.path}/web_debug.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        
            
            ${logging.path}/web-debug-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            debug
            ACCEPT
            DENY
        
    

    
    
        
        ${logging.path}/web_info.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8
        
        
        
            
            ${logging.path}/web-info-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            info
            ACCEPT
            DENY
        
    

    
    
        
        ${logging.path}/web_warn.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        
            ${logging.path}/web-warn-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            warn
            ACCEPT
            DENY
        
    

    
    
        
        ${logging.path}/web_error.log
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8 
        
        
        
            ${logging.path}/web-error-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            15
        
        
        
            ERROR
            ACCEPT
            DENY
        
    

    

    

    

    
    
    
        
    

    
        
        
        
        
        
    

    

下面对日志结构进行说明:

(1)FILE_LOG_PATTERN:日志输出格式变量,在控制台输出和文件中输出的append中都引用了此变量。

(2)consoleLog:定义一个控制台的appender

(3)fileLog:定义一个日志文件的appender,这就是文件输出的详细配置,是日志文件的输出地址:必须要为${LOG_PATH}/${LOG_FILE},这样我们在application.properties中的配置才有效。level标签:如果我们设置了level为info,只会输出info的日志信息,其他日志级别的日志就会过滤掉,建议不配置level属性。

(4)logger:其name就是项目中对应的包路径,appender-ref是appender的引用,在本配置文件中,意思就是com.example.xyx.MySpringBootTest包下文件的日志,按照fileLog的配置去输出,即按照FILE_LOG_PATTERN的格式,输出到D:/data/mylog/myLog.log文件中。标签level="debug"是设置日志级别:作用是debug级别及其以上级别的日志会输出(debug、info、warn、error,,,),注意此处的level是一个下线,比其日志级别高的日志信息也会输出,很重要。additivity="false"是配置此logger是否提交给其他的logger或者root节点,如果true,则root也会执行或者其他的可以拦截到的logger节点,且logger的level优先级高;否则不会执行,在本配置文件中即控制台不会输出com.example.xyx.MySpringBootTest包下文件的日志。

(5)root:根节点,在logback-spring.xml中只引用了控制台日志输出配置,不会输出到文件,如果想输出到文件,可以写再写一个引用。level=info,在控制台输出into级别及其以上级别的日志。会拦截所有包下的日志,但是其输出会受到logger的影响,即注意logger中的additivity属性,如果为false,com.example.xyx.MySpringBootTest包下的日志不会输出到控制台。

配置完成之后,下面进行演示:

      启动项目,刷新项目,此时多了一个文件夹

springboot项目使用slf4j控制台输出日志+输出日志文件到本地_第1张图片

打开本地路径application.yml中配置的输出路径,此时多了一个文件夹

springboot项目使用slf4j控制台输出日志+输出日志文件到本地_第2张图片

打开文件查看日志,看到日志生成成功

springboot项目使用slf4j控制台输出日志+输出日志文件到本地_第3张图片

 

 

 

 

你可能感兴趣的:(java基础,springboot)