java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot logback打印日志

springboot整合logback打印日志,分文件

作者:格林爱通话

本文主要介绍了springboot整合logback打印日志,分文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言:

接着上面实战03讲,这次我们采用springboot自带的日志打印方式-logback 来打印日志

一、pom.xml配置

因为是springboot自带的日志方式,所以不需要添加依赖

二、application.yml 配置

因为是springboot自带的日志方式,所以不需要添加logback.xml 路径,当然如果你非要加也可以

logging:
  config: classpath:logback.xml

三、logback.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!--定义日志文件的存储地址 ,这个使用的是相对路径,即在日志文件存放在项目根路径logs文件夹下-->
    <property name="LOG_HOME" value="log/" />
    <property name="all-logger" value="all-logger" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" 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>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="${all-logger}" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/all-logger.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${all-logger}.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>250MB</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>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <logger name="com.example.demo" level="DEBUG" ></logger>

    <!-- 日志输出级别 ,一定要把上边定义的appender 写在下面否者会导致日志文件生成不了,或者为空的日志文件-->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="${all-logger}" />
    </root>
</configuration>

四、测试类

因为自带的日志方式,所以可以直接使用注解,@slf4j, 这样就方便很多

启动项目

控制台:

 日志:

五、常见问题:

1、mybatis 的sql 日志无法打印

那是因为确实打印的指定的包,因为我们需要打印所有包的sql,所以直接配置一个最大的包

<logger name="com.example.demo" level="DEBUG" ></logger>

2、mybatis 打印了sql的结果集明细

那是因为日志基本写成了dubug

<root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="${all-logger}" />
</root>

这样就会打印结果集的全部明细,日志量会异常庞大,一般我们只需要打印INFO级别就可以了。

六、日志按照业务类别打印不同文件

1、logback.xml 

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!--定义日志文件的存储地址 ,这个使用的是相对路径,即在日志文件存放在项目根路径logs文件夹下-->
    <property name="LOG_HOME" value="log" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" 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>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="ALLACTIONAPPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/alllogger.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/alllogger.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>250MB</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>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <appender name="TASKACTIONAPPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/taskaction.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/taskaction.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>250MB</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>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <logger name="com.example.demo" level="DEBUG" >
    </logger>

    <!-- 日志输出级别 ,一定要把上边定义的appender 写在下面否者会导致日志文件生成不了,或者为空的日志文件-->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ALLACTIONAPPENDER" />
    </root>

    <!--业务操作日志-->
    <logger name="TASKACTION" level="info" additivity="false">
        <appender-ref ref="TASKACTIONAPPENDER"/>
    </logger>

    <logger name="ALLACTION" level="info" additivity="false">
        <appender-ref ref="ALLACTIONAPPENDER"/>
    </logger>

</configuration>

ALLACTION 打印默认的日志, 
TASKACTION 打印任务类型的日志

2、测试类 

直接通过logger name 来打印自定义的业务日志, logger的配置就是LoggerFactory需要的模板,只有配置了工厂获取才会生效。

3、启动项目

控制台

 alllogger 文件

taskaction 文件

可以看到控制台并没有打印 自定义的业务日志,如果要打印,需要在自定义工厂里面加上控制台输出。

<!--业务操作日志, logger的配置就是LoggerFactory需要的模板,只有配置了工厂获取才会生效。-->
<logger name="TASKACTION" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="TASKACTIONAPPENDER"/>
</logger>

<logger name="ALLACTION" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ALLACTIONAPPENDER"/>
</logger>

再次启动项目

4、注解 + logger.getname 一起用  

因为注解方式打印的就是默认的日志文件,但是我们如果还要打印任务日志怎么办呢,这时就可以结合使用。

测试类

启动项目。

控制台

 allaction默认日志

taskaction

到此这篇关于springboot整合logback打印日志,分文件的文章就介绍到这了,更多相关springboot logback打印日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文