Logback日志记录只在控制台输出sql,未写入日志文件【解决】

原因:持久层框架对于Log接口实现方式不一样,日记记录的位置及展示方式也也不一样

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # sql只会打印到控制台不会输出到日志文件种

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl  # 此种会将sql写入到日志文件中

可以分别配置到两个环境中,dev用StdOutImpl,prod用Slf4jImpl或者其他的都行,具体需要看他是如何实现的,使用logger对象输出的都是会写入日志的,使用System.out或err的只会在控制台显示,以下是实验.log是日志文件

在这里插入图片描述

StdOutImpl和Slf4jImpl的区别就在于实现输出方面的区别

** Slf4jImpl **
import org.apache.ibatis.logging.Log;
public class Slf4jImpl implements Log {
// 部分代码
  private Log log;
	 @Override
  public void error(String s) {
    log.error(s);
  }
  @Override
  public void debug(String s) {
    log.debug(s);
  }
} 

**StdOutImpl 使用的是System.out/err输出**
public class StdOutImpl implements Log {
// 部分代码
  @Override
  public void error(String s) {
    System.err.println(s);
  }
  @Override
  public void debug(String s) {
    System.out.println(s);
  }
}

包括以下接口逗是属于mp活着mybatis可用得日志实现类

在这里插入图片描述

这些都不满足得可以实现Log接口自己写实现了或者继承NoLoggingImpl重写内部方法

同时附上一个logback-spring.xml配置或许用的上


    <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR 
    
    
    

    logback
    
    
    
        
    
    
        
    
    
    

    
    
        
        
        
            INFO
        
        
            
            ${CONSOLE_LOG_PATTERN}
            
            UTF-8
        
    

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

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

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

    
    
        ${log.path}/log_sql.log
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            UTF-8
        
        
        
            ${log.path}/sql/log-sql-%d{yyyy-MM-dd}.%i.log
            
                100MB
            
            
            30
        
        
        
            DEBUG
            ACCEPT
            <!--            DENY-->
        
    

    <!-- 用来设置某一个包或者具体的某一个类的日志打印级别。有name属性,可选的level和可选的addtivity属性,以及可指定appender。
         name:用来指定受此logger约束的某一个包或者具体的某一个类。
         level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,如果未设置此属性,那么当前logger将会继承上级的级别。
         addtivity :是否向上级loger传递打印信息。默认是true。-->
    <!--
        使用mybatis的时候,sql语句是debug下才会打印,spring默认日志级别是INFO,所以想要查看sql语句的话,有以下两种操作:
        第一种把改成这样就会打印sql,不过这样日志那边会出现很多其他消息
        第二种就是单独给mapper下目录配置DEBUG级别:
            例如:
            或者在配置文件中配置:logging.level.com.kingoit.mapper=DEBUG,这样配置sql语句会打印,其他还是正常INFO级别:-->

    
    
        
        
            
        
        
        
            
            
            
            
        
    


    
    
        
        
            
        
        
            
            
            
            
        
    


本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/118c9ec247.html