前言
以前写代码,不注重书写log日志,都是通过system.out.println来当做日志使用。后来看了别人的代码,才知道日志的重要性。一般来说,在调用其他地方接口之前一定要打印日志,将传参打印一下,便于排查问题。
即使我们不配置logback.xml,其实控制台依然会输出日志(有默认的输出方案)。我们可以通过logback.xml做一些个性化的日志输出,也可以定义一些输出到文件的日志输出方式等等。
写这个博客,主要是方便以后需要用到logback
能一下找到。在此之前,搜到很多一模一样的关于logback
的博客,但是可能不太符合我的要求,所以我整理多家的博客荟聚成一个xml配置文件(相对来说,还算完整)。
本文及配置文件有些粗糙,读者见谅,欢迎给出建议。由于参考多个博客(内容几乎一样),遂不贴原文。
logback.xml详细配置及标签解释(内附打印SQL的第三种方式)
这个配置文件,主要起标签解释用,里面顺带提了三种打印SQL的方式(三种情况),其中示例的是配置文件中所说的第三种方式(一般不使用第一种),详情请见配置文件。根据这个配置文件,读者可以自己配出一种自己需要的打印需求。
注意:
不要在yml或是properties去做日志的配置
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!--
configuration:
scan:默认为true,当配置文件发生改变时,将被重新加载
scanPeriod:scan为true时生效,检测配置文件是否有修改的时间间隔,如果没给单位,默认毫秒。默认时间间隔1min
debug:默认为false,当为true时,会打印logback内部日志信息,实时查看logback运行状态
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter过滤只记录本级别的日志 -->
<!--*****************************************************************************-->
<!--自定义项 start-->
<!--*****************************************************************************-->
<!-- 定义日志文件的输出位置 -->
<property name="log.homeDir" value="E:/LogFiles/LogbackDemo"/>
<!-- 定义项目名,作为日志输出位置的一项 -->
<property name="log.proName" value="logbackDemo"/>
<!-- 日志文件最大保留天数 -->
<property name="log.maxHistory" value="30"/>
<!-- 日志文件最大存储空间 -->
<property name="log.maxSize" value="3kb"/>
<!-- 打印mybatis的sql语句 需要指定dao层包的位置 -->
<property name="mapper.package" value="pers.liuchengyin.mapper" />
<!--
定义日志打印格式 - 彩色日志 - 用于控制台高亮
magenta:洋红 boldMagenta:粗红 cyan:青色 white:白色 magenta:洋红 highlight:高亮
使用颜色需要用 %颜色名(内容),如下所示
分别是:日期 | 日志等级 | 线程 | 代码文件及行数 | 所在包 | 日志信息
-->
<property name="CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
<!-- 输出到文件的日志格式 -->
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %-5level %logger{50} - %msg%n"/>
<!--*****************************************************************************-->
<!--自定义项 end-->
<!--*****************************************************************************-->
<!--
appender:
负责写日志的组件
name:指定appender的名字
class:指定appender的全限定名
ch.qos.logback.core.ConsoleAppender - 控制台输出
ch.qos.logback.core.FileAppender - 输出到文件(一般不用这个输出日志文件)
ch.qos.logback.core.rolling.RollingFileAppender - 滚动输出到文件(一般采用这个输出日志文件)
-->
<!-- ConsoleAppender 控制台输出日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder:负责将日志信息转换成字节数组,然后把字节数组写入到输出流 -->
<encoder>
<!-- pattern:设置日志输出格式 -->
<pattern>
${CONSOLE_LOG_PATTERN}
</pattern>
</encoder>
<!--
过滤器,返回一个枚举值
DENY:日志将立即被抛弃不再经过其他过滤器
NEUTRAL:有序列表里的下一个过滤器接着处理日志
ACCEPT:日志将被立即处理不再经过其他过滤器
LevelFilter - 级别过滤器,根据日志级别进行过滤,根据onMatch和onMismatch接收或拒绝日志(需要onMatch和onMismatch)
ThresholdFilter - 临界值过滤器,当日志级别大于等于临界值时,过滤器返回NEUTRAL。当日志级别小于临界值时,日志被拒绝(仅level即可)
.....其他过滤器,见官网及百度
-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 后面即使logger、root里设置了低于INFO的级别,低于INFO级别的日志仍然会被这个过滤器过滤掉 -->
<level>INFO</level>
</filter>
</appender>
<!-- WARN级别日志 appender -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时&#