springboot的日志配置:
默认情况SpringBoot程序运行时是不会将日志直接输出到文件的,而在创建Spring Boot工程时引入的spring-boot-starter就已经包含了spring-boot-starter-logging,该依赖内容就是Spring Boot默认的日志框架Logback,为了充分利用LogBack来打印程序运行日志,所以需要对此进行配置。
SpringBoot运行日志有两种配置方式:
第一种:就是在springboot的配置文件中(例如application.properties)简单地配置日志输出级别、日志输出路径、日志文件名来实现。
第二种:是指定日志配置文件,然后在日志配置文件中配置输出属性,该方法可以配置较复杂的日志输出。

一 :application.properties配置文件

#在sparingboot配置文件中配置:
#配置日志文件名
logging.file=project.log
#该属性用来配置日志文件的路径
logging.path=/root/project
#Spring Boot默认级别就是INFO,root表示项目的所有日志级别为warn
logging.level.root=warn
#可指定某路径的特殊级别
logging.level.com.syy.flowable_spring_boot.config=WARN
#没有logback-spring.xml配置文件,系统只认识logging.file,不认识logging.path
 #配置logback-spring.xml,spring boot会默认加载此文件,为什么不配置logback.xml,因为logback.xml会先application.properties加载,
 #而logback-spring.xml会后于application.properties加载,这样我们在application.properties文中设置日志文件名称和文件路径才能生效。

定制自己的日志格式

#logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
 #logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
 #%d{HH:mm:ss.SSS}——日志输出时间
 #%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
 #%-5level——日志级别,并且使用5个字符靠左对齐
 #%logger- ——日志输出者的名字
 #%msg——日志消息
 #%n——平台的换行符

代码使用

1.引入lombok,可在类上加注解 @Slf4j

2.使用原生的看下图

spring boot 日志冲突 spring boot日志配置_spring

二:指定日志配置文件

在sparingboot配置文件中配置:
logging.config=classpath:logback.xml

如果要按日期打印到文件的可添加logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/usr/software/log/cfmoto-server-app" />
    <!-- 日志保存天数 -->
    <property name="maxHistory" value="30" />
    <!-- 日志大小10M -->
    <property name="maxFileSize" value="10MB" />

    <!--控制台日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--文件日志 按照每天生成日志文件 -->
    <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
	     <!--过滤器的日志级别配置为INFO日志 -->
	     <filter class="ch.qos.logback.classic.filter.LevelFilter">   
	       <level>INFO</level>   
	       <onMatch>ACCEPT</onMatch>   
	       <onMismatch>DENY</onMismatch>   
	     </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/info_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>${maxHistory}</MaxHistory>
	        <!--日志文件最大的大小-->
		    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
		    	<maxFileSize>${maxFileSize}</maxFileSize>
		    </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>   
    
        <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--过滤器的日志级别配置为ERROR日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
		    <level>ERROR</level>
		    <onMatch>ACCEPT</onMatch>
		    <onMismatch>DENY</onMismatch>
		</filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/error_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>${maxHistory}</MaxHistory>
	        <!--日志文件最大的大小-->
		    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
		    	<maxFileSize>${maxFileSize}</maxFileSize>
		    </timeBasedFileNamingAndTriggeringPolicy>            
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--文件日志 按照每天生成日志文件 -->
    <appender name="FILEDEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
	     <!--过滤器的日志级别配置为DEBUG日志 -->
	     <filter class="ch.qos.logback.classic.filter.LevelFilter">   
	       <level>DEBUG</level>   
	       <onMatch>ACCEPT</onMatch>   
	       <onMismatch>DENY</onMismatch>   
	     </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/debug_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>${maxHistory}</MaxHistory>
	        <!--日志文件最大的大小-->
		    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
		    	<maxFileSize>${maxFileSize}</maxFileSize>
		    </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

	<logger name="java.sql.PreparedStatement" value="DEBUG" />
	<logger name="java.sql.Connection" value="DEBUG" />
	<logger name="java.sql.Statement" value="DEBUG" />
	<logger name="com.ibatis" value="DEBUG" />
	<logger name="com.ibatis.common.jdbc.SimpleDataSource" value="DEBUG" />
	<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
	<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" value="DEBUG" />
	<logger name="com.apache.ibatis" level="TRACE" /> 
	<!-- 这个很重要,orm对应的接口 -->
	<logger name="com.tsqs.tsqs_server.mapper" level="DEBUG" />
	   
    <!-- root日志输出级别 -->
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILEINFO" />
        <appender-ref ref="FILEERROR"/>
        <appender-ref ref="FILEDEBUG"/>
    </root>

</configuration>
property:该配置文件中通用的变量,name是变量的名称,value是变量定义的值,在该文件中可                     	    以通过${name}的方式来调用;
    appender:日志输出节点,常用的有console、file、rollingfile和socker,其中console是指输出到控制台的输出节点, file是指输出到指定文件的输出节点,rollingfile是指超过指定大小自动归档(rolling)旧的创建新的日志的输出节点,socket是指输出到其他服务器中的输出节点; 
    encoder:日志文件输出格式;
    file:日志输出路径及文件名;
    rollingPolicy:日志滚动策略,例子中配置为按照时间滚动;
    fileNamePattern:滚动日志文件路径及文件名配置;
    maxFileSize:最大日志文件大小;
    maxHistory:日志文件最大保留天数;
    filter:日志过滤器,在appender中配置,有 三个返回值,分别是deny,neutral,accept。返回deny,表示日志将立即被抛弃;返回neutral,表示进入到下一个过滤器中进行处理;返回accept,日志会被立即处理,不再经过剩余过滤器,如果appender中有多个过滤器则按照顺序依次进行处理;
    levelFilter:级别过滤器,该过滤器有三个子节点器:level、onMatch、OnMismatch,它会根据onMatch 和 onMismatch选择接收或拒绝日志,但该过滤器只会过滤出刚好符合日志级别的日志,此外还有一个过滤器为ThresholdFilter,这个过滤器会过滤掉低于指定临界值的日志,当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝;