【日志】logback配置与使用

  • Post author:
  • Post category:其他




logback日志的配置与使用



背景

日志级别有(从高到低):

FATAL

(致命),

ERROR

(错误),

WARN

(警告),

INFO

(信息),

DEBUG

(调试),

TRACE

(跟踪)或者

OFF

(关闭),默认的日志配置在消息写入时将消息回显到控制台。默认情况下,将记录错误级别、警告级别和信息级别的消息


官网



最终效果图

在这里插入图片描述

  • %d 时间
  • %le 隔离级别
  • %t 当前线程名
  • %lo 类名
  • %m 日志信息



最终配置



application.properties

logging.config=classpath:logback-spring.xml
logging.level.root=info
logging.level.web=info
logging.level.sql=debug
logging.level.xxx=debug



logback-spring.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!--
   logback日志配置
-->
<configuration debug="false">

    <!--获取spring上下文配置-->
    <springProperty scope="context" name="SERVER_NAME" source="server.servlet.application-display-name"/>
    <springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root"/>
    <!--定义日志文件的存储地址及日志级别 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="${sys:catalina.base:-.}/output/logs"/>
    <!-- pattern -->
    <property name="CONSOLE_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
    <property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5le [%15(%.15t)] %-60(%lo{60}) - %m%n"/>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${CONSOLE_PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 INFO-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>15</MaxHistory>
            <!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 ERROR -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <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.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/dev/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>15</MaxHistory>
            <!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 多环境配置 按照active profile选择分支 -->
    <springProfile name="dev">
        <!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
        <root level="${LOG_ROOT_LEVEL}">
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>

    <springProfile name="test|prod">
        <!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
        <root level="${LOG_ROOT_LEVEL}">
            <appender-ref ref="FILE"/>
            <appender-ref ref="FILE_ERROR"/>
        </root>
    </springProfile>
</configuration>


注意:SpringBoot推荐我们使用带-spring后缀的 logback-spring.xml 扩展配置,因为默认的的logback.xml标准配置,Spring无法完全控制日志初始化。(spring扩展对springProfile节点的支持)



配置console输出日志

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- pattern -->
    <property name="CONSOLE_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${CONSOLE_PATTERN}</pattern>
        </encoder>
    </appender>
</configuration>



配置file输出日志

<?xml version="1.0" encoding="UTF-8"?>
<!--
   logback日志配置
-->
<configuration debug="false">
    <!--定义日志文件的存储地址及日志级别 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="${sys:catalina.base:-.}/output/logs"/>
    <!-- pattern -->
    <property name="CONSOLE_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
    <!-- 按照每天生成日志文件 INFO-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>15</MaxHistory>
            <!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
    </appender>
     <!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
     <root level="INFO">
         <appender-ref ref="FILE"/>
     </root>
</configuration>



根节点 <configuration>

<configuration scan="true" scanPeriod="30 seconds" debug="false"> 
    <!--其他配置省略...--> 
</configuration/>

  • san

    : 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true!

  • scanPeriod

    : 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟!

  • debug

    : 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false!



节点<appender>

  <property name="LOG_HOME" value="${sys:catalina.base:-.}/output/logs"/>
  • spring中配置property使用一致



节点<springProperty>

<springProperty scope="context" name="SERVER_NAME" source="server.servlet.application-display-name"/>
  • 获取spring上线文中的配置,注意:xml的名称必须-spring结尾 例如:logback-spring.xml



节点<appender>

  • 负责写日志的组件,它有两个必要属性name和class。
  • name指定appender名称
  • class指定appender的全限定名

    • ConsoleAppender(输出到控制台)
    • RollingFileAppender(输出到文件)
    • SMTPAppender(输出到邮件)
    • DBAppender(输出到数据库)
    • AsyncAppender(异步输出)
    • XxxAppender (不单独使用)


ConsoleAppender
<property name="CONSOLE_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5le) [%11(%.11t)] %cyan(%-50(%lo{50})) - %m%n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
         <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
         <pattern>${CONSOLE_PATTERN}</pattern>
     </encoder>
</appender>
  • <encoder>: 对日志进行格式化


RollingFileAppender
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>15</MaxHistory>
            <!--给定日志文件大小,超过指定的大小就新建一个日志文件-->
            <maxFileSize>100MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
  </appender>
  • <FileNamePattern>:日志文件输出的文件名
  • <MaxHistory>:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且<maxHistory>是6,则只保存最近6天的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。
  • <maxFileSize>:这是活动文件的大小,默认值是10MB。



pattern日志格式

定义每行日志记录的格式,官网地址:https://logback.qos.ch/manual/layouts.html ,

常用变量别名(包括全称和简称)有:

变量名

%logger(简写:%c或%lo): 当前日志名称,如: Slf4jAndLogbackMain
%class(简写:%C): 日志调用所在类,如: com.dragon.study.log.Slf4jAndLogbackMain
%method(简写:%M): 日志所在方法,如: main
%caller: 日志调用位置,如:at com.dragon.study.log.Slf4jAndLogbackMain.main(Slf4jAndLogbackMain.java:15)
%thread(简写:%t): 日志调用所有线程序,如:main
%level(简写:%p或%le): 日志级别,如:INFO
%date(简写:%d): 日期,如: 2018-12-15 21:40:12,890
%msg(简写:%m): 日志记录内容
%exception(简写:%ex): 异常记录

宽度设置
%20logger:当字符数少于20个字符时,则左侧留空白;
%-20logger:当字符数少于20个字符时,则右侧留空白;
%.30logger:当字符数据大于30个时,则截断;

显示设置
%highligth:突出显示
%green(%red、%blue、%white):字体显示为指定颜色
{length}可指定长度,如%logger{36}

网络访问设置(依赖logger-access包)
%remoteIP(简写:%a):远程ip;
%localIP(简写:%A):本地ip;
%clientHost(简写:%h):远程主机名;
%localPort:本地端口;
%requestMethod(简写:%m):http请求方法;
%protocol(简写:%H):http请求协议;
%statusCode(简写:%s):http请求status code;
%requestURL(简写:%r):http请求地址;
%requestURI(简写:%U):http请求资源地址;
%queryString(简写:%q):http请求参数;
%server(简写:%v):服务器地址;
%elapsedTime(简写:%D):http请求处理的时间,单位是毫秒;
%elapsedSeconds(简写:%T):http请求处理的时间,单位是秒;
%date(简写:%t):日志记录时间;
%threadName(简写:%I):处理请求的线程名;
%reqAttribute{attributeName}:http请求attribute值;
%reqCookie{cookie}:http请求cookie值;
%reqContent:http请求体内容;
%fullRequest:http完整请求;
%responseContent:http响应;
%fullResponse:http完整响应;



版权声明:本文为hjj19930729原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。