“Logback 的 FileAppender”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
第141行: 第141行:
  
 
     <!-- 日志文件输出的 appender -->
 
     <!-- 日志文件输出的 appender -->
     <appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
+
     <appender name="file" class="ch.qos.logback.core.FileAppender">
 
         <!-- 日志文件的保存路径 -->
 
         <!-- 日志文件的保存路径 -->
 
         <file>${log_dir}/logback.log</file>
 
         <file>${log_dir}/logback.log</file>
第150行: 第150行:
  
 
     <!-- HTML 格式日志文件输出 -->
 
     <!-- HTML 格式日志文件输出 -->
     <appender name="file" class="ch.qos.logback.core.FileAppender">
+
     <appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
 
         <!-- 日志文件的保存路径 -->
 
         <!-- 日志文件的保存路径 -->
 
         <file>${log_dir}/logback.html</file>
 
         <file>${log_dir}/logback.html</file>
第156行: 第156行:
 
         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
 
         <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
 
             <layout class="ch.qos.logback.classic.html.HTMLLayout">
 
             <layout class="ch.qos.logback.classic.html.HTMLLayout">
                 <pattern>${pattern}</pattern>
+
                 <pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m</pattern>
 
             </layout>
 
             </layout>
 
         </encoder>
 
         </encoder>
第186行: 第186行:
  
 
==== /logs/logback.html ====
 
==== /logs/logback.html ====
<syntaxhighlight lang="console">
+
<syntaxhighlight lang="html">
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html>
 
<html>
第208行: 第208行:
 
<body>
 
<body>
 
<hr/>
 
<hr/>
<p>Log session start time Mon Feb 27 11:54:05 CST 2023</p><p></p>
+
<p>Log session start time Mon Feb 27 12:06:31 CST 2023</p><p></p>
  
 
<table cellspacing="0">
 
<table cellspacing="0">
 
<tr class="header">
 
<tr class="header">
<td class="Literal">Literal</td>
 
 
<td class="Level">Level</td>
 
<td class="Level">Level</td>
<td class="Literal">Literal</td>
 
 
<td class="Date">Date</td>
 
<td class="Date">Date</td>
<td class="Literal">Literal</td>
 
 
<td class="Logger">Logger</td>
 
<td class="Logger">Logger</td>
<td class="Literal">Literal</td>
 
 
<td class="MethodOfCaller">MethodOfCaller</td>
 
<td class="MethodOfCaller">MethodOfCaller</td>
<td class="Literal">Literal</td>
 
 
<td class="LineOfCaller">LineOfCaller</td>
 
<td class="LineOfCaller">LineOfCaller</td>
<td class="Literal">Literal</td>
 
 
<td class="Thread">Thread</td>
 
<td class="Thread">Thread</td>
<td class="Literal">Literal</td>
 
 
<td class="Message">Message</td>
 
<td class="Message">Message</td>
<td class="LineSeparator">LineSeparator</td>
 
 
</tr>
 
</tr>
  
  
 
<tr class="error even">
 
<tr class="error even">
<td class="Literal">[</td>
 
 
<td class="Level">ERROR</td>
 
<td class="Level">ERROR</td>
<td class="Literal">] </td>
+
<td class="Date">2023-02-27 12:06:31.239</td>
<td class="Date">2023-02-27 11:54:05.708</td>
 
<td class="Literal"> </td>
 
 
<td class="Logger">io.github.jihch.LogbackTest</td>
 
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="Literal"> </td>
 
 
<td class="MethodOfCaller">test</td>
 
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
 
 
<td class="LineOfCaller">15</td>
 
<td class="LineOfCaller">15</td>
<td class="Literal"> [</td>
 
 
<td class="Thread">main</td>
 
<td class="Thread">main</td>
<td class="Literal">] </td>
 
 
<td class="Message">error</td>
 
<td class="Message">error</td>
<td class="LineSeparator">
 
</td>
 
 
</tr>
 
</tr>
  
 
<tr class="warn odd">
 
<tr class="warn odd">
<td class="Literal">[</td>
 
 
<td class="Level">WARN</td>
 
<td class="Level">WARN</td>
<td class="Literal">] </td>
+
<td class="Date">2023-02-27 12:06:31.241</td>
<td class="Date">2023-02-27 11:54:05.711</td>
 
<td class="Literal"> </td>
 
 
<td class="Logger">io.github.jihch.LogbackTest</td>
 
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="Literal"> </td>
 
 
<td class="MethodOfCaller">test</td>
 
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
 
 
<td class="LineOfCaller">16</td>
 
<td class="LineOfCaller">16</td>
<td class="Literal"> [</td>
 
 
<td class="Thread">main</td>
 
<td class="Thread">main</td>
<td class="Literal">] </td>
 
 
<td class="Message">warn</td>
 
<td class="Message">warn</td>
<td class="LineSeparator">
 
</td>
 
 
</tr>
 
</tr>
  
 
<tr class="info even">
 
<tr class="info even">
<td class="Literal">[</td>
 
 
<td class="Level">INFO</td>
 
<td class="Level">INFO</td>
<td class="Literal">] </td>
+
<td class="Date">2023-02-27 12:06:31.242</td>
<td class="Date">2023-02-27 11:54:05.711</td>
 
<td class="Literal"> </td>
 
 
<td class="Logger">io.github.jihch.LogbackTest</td>
 
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="Literal"> </td>
 
 
<td class="MethodOfCaller">test</td>
 
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
 
 
<td class="LineOfCaller">17</td>
 
<td class="LineOfCaller">17</td>
<td class="Literal"> [</td>
 
 
<td class="Thread">main</td>
 
<td class="Thread">main</td>
<td class="Literal">] </td>
 
 
<td class="Message">info</td>
 
<td class="Message">info</td>
<td class="LineSeparator">
 
</td>
 
 
</tr>
 
</tr>
  
 
<tr class="debug odd">
 
<tr class="debug odd">
<td class="Literal">[</td>
 
 
<td class="Level">DEBUG</td>
 
<td class="Level">DEBUG</td>
<td class="Literal">] </td>
+
<td class="Date">2023-02-27 12:06:31.242</td>
<td class="Date">2023-02-27 11:54:05.711</td>
 
<td class="Literal"> </td>
 
 
<td class="Logger">io.github.jihch.LogbackTest</td>
 
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="Literal"> </td>
 
 
<td class="MethodOfCaller">test</td>
 
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
 
 
<td class="LineOfCaller">18</td>
 
<td class="LineOfCaller">18</td>
<td class="Literal"> [</td>
 
 
<td class="Thread">main</td>
 
<td class="Thread">main</td>
<td class="Literal">] </td>
 
 
<td class="Message">debug</td>
 
<td class="Message">debug</td>
<td class="LineSeparator">
 
</td>
 
 
</tr>
 
</tr>
  
 
<tr class="trace even">
 
<tr class="trace even">
<td class="Literal">[</td>
 
 
<td class="Level">TRACE</td>
 
<td class="Level">TRACE</td>
<td class="Literal">] </td>
+
<td class="Date">2023-02-27 12:06:31.242</td>
<td class="Date">2023-02-27 11:54:05.712</td>
 
<td class="Literal"> </td>
 
 
<td class="Logger">io.github.jihch.LogbackTest</td>
 
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="Literal"> </td>
 
 
<td class="MethodOfCaller">test</td>
 
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
 
 
<td class="LineOfCaller">19</td>
 
<td class="LineOfCaller">19</td>
<td class="Literal"> [</td>
 
 
<td class="Thread">main</td>
 
<td class="Thread">main</td>
<td class="Literal">] </td>
 
 
<td class="Message">trace</td>
 
<td class="Message">trace</td>
<td class="LineSeparator">
 
</td>
 
 
</tr>
 
</tr>
  
 
</syntaxhighlight>
 
</syntaxhighlight>

2023年2月27日 (一) 04:07的最新版本

https://www.bilibili.com/video/BV1iJ411H74S?p=28

示例 输出到普通文本文件的 FileAppender

logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--
        配置集中管理属性
        可以直接该属性的 value 值
        格式:${name}
    -->
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"></property>
    <!--
    日志输出格式:
        %-5level 日志级别
        %d{yyyy-MM-dd HH:mm:ss.SSS} 时间
        %c 类的全限定名
        %M 方法名
        %L 行号
        %thread 线程名称
        %m 或者 %msg 为信息
        %n 换行
    -->
    <!-- 定义日志文件保存路径属性 -->
    <property name="log_dir" value="/logs"></property>

    <!-- 控制台日志输出的 appender -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 控制输出流对象 默认 System.out 改为 System.err -->
        <target>System.err</target>
        <!-- 日志消息格式配置 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!-- 日志文件输出的 appender -->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!-- 日志文件的保存路径 -->
        <file>${log_dir}/logback.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!-- root logger 配置 -->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

</configuration>

LogbackTest.java

package io.github.jihch;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogbackTest {

    public static final Logger LOGGER = LoggerFactory.getLogger(LogbackTest.class);

    // 快速入门
    @Test
    public void test() {
        // 日志输出
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info");
        LOGGER.debug("debug");
        LOGGER.trace("trace");
    }

}

控制台输出

[ERROR] 2023-02-27 11:43:16.758 io.github.jihch.LogbackTest test 15 [main] error
[WARN ] 2023-02-27 11:43:16.760 io.github.jihch.LogbackTest test 16 [main] warn
[INFO ] 2023-02-27 11:43:16.760 io.github.jihch.LogbackTest test 17 [main] info
[DEBUG] 2023-02-27 11:43:16.760 io.github.jihch.LogbackTest test 18 [main] debug
[TRACE] 2023-02-27 11:43:16.761 io.github.jihch.LogbackTest test 19 [main] trace

/logs/logback.log

[ERROR] 2023-02-27 11:43:16.758 io.github.jihch.LogbackTest test 15 [main] error
[WARN ] 2023-02-27 11:43:16.760 io.github.jihch.LogbackTest test 16 [main] warn
[INFO ] 2023-02-27 11:43:16.760 io.github.jihch.LogbackTest test 17 [main] info
[DEBUG] 2023-02-27 11:43:16.760 io.github.jihch.LogbackTest test 18 [main] debug
[TRACE] 2023-02-27 11:43:16.761 io.github.jihch.LogbackTest test 19 [main] trace



示例 输出到 HTML 文件的 FileAppender

logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--
        配置集中管理属性
        可以直接该属性的 value 值
        格式:${name}
    -->
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"></property>
    <!--
    日志输出格式:
        %-5level 日志级别
        %d{yyyy-MM-dd HH:mm:ss.SSS} 时间
        %c 类的全限定名
        %M 方法名
        %L 行号
        %thread 线程名称
        %m 或者 %msg 为信息
        %n 换行
    -->
    <!-- 定义日志文件保存路径属性 -->
    <property name="log_dir" value="/logs"></property>

    <!-- 控制台日志输出的 appender -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 控制输出流对象 默认 System.out 改为 System.err -->
        <target>System.err</target>
        <!-- 日志消息格式配置 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!-- 日志文件输出的 appender -->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <!-- 日志文件的保存路径 -->
        <file>${log_dir}/logback.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!-- HTML 格式日志文件输出 -->
    <appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
        <!-- 日志文件的保存路径 -->
        <file>${log_dir}/logback.html</file>
        <!-- HTML 消息格式配置 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m</pattern>
            </layout>
        </encoder>
    </appender>

    <!-- root logger 配置 -->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
        <appender-ref ref="htmlFile"/>
    </root>

</configuration>


LogbackTest.java

内容不变


控制台

日志记录内容不变

/logs/logback.log

日志记录内容不变


/logs/logback.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>Logback Log Messages</title>
<style  type="text/css">
table { margin-left: 2em; margin-right: 2em; border-left: 2px solid #AAA; }
TR.even { background: #FFFFFF; }
TR.odd { background: #EAEAEA; }
TR.warn TD.Level, TR.error TD.Level, TR.fatal TD.Level {font-weight: bold; color: #FF4040 }
TD { padding-right: 1ex; padding-left: 1ex; border-right: 2px solid #AAA; }
TD.Time, TD.Date { text-align: right; font-family: courier, monospace; font-size: smaller; }
TD.Thread { text-align: left; }
TD.Level { text-align: right; }
TD.Logger { text-align: left; }
TR.header { background: #596ED5; color: #FFF; font-weight: bold; font-size: larger; }
TD.Exception { background: #A2AEE8; font-family: courier, monospace;}
</style>

  </head>
<body>
<hr/>
<p>Log session start time Mon Feb 27 12:06:31 CST 2023</p><p></p>

<table cellspacing="0">
<tr class="header">
<td class="Level">Level</td>
<td class="Date">Date</td>
<td class="Logger">Logger</td>
<td class="MethodOfCaller">MethodOfCaller</td>
<td class="LineOfCaller">LineOfCaller</td>
<td class="Thread">Thread</td>
<td class="Message">Message</td>
</tr>


<tr class="error even">
<td class="Level">ERROR</td>
<td class="Date">2023-02-27 12:06:31.239</td>
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="MethodOfCaller">test</td>
<td class="LineOfCaller">15</td>
<td class="Thread">main</td>
<td class="Message">error</td>
</tr>

<tr class="warn odd">
<td class="Level">WARN</td>
<td class="Date">2023-02-27 12:06:31.241</td>
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="MethodOfCaller">test</td>
<td class="LineOfCaller">16</td>
<td class="Thread">main</td>
<td class="Message">warn</td>
</tr>

<tr class="info even">
<td class="Level">INFO</td>
<td class="Date">2023-02-27 12:06:31.242</td>
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="MethodOfCaller">test</td>
<td class="LineOfCaller">17</td>
<td class="Thread">main</td>
<td class="Message">info</td>
</tr>

<tr class="debug odd">
<td class="Level">DEBUG</td>
<td class="Date">2023-02-27 12:06:31.242</td>
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="MethodOfCaller">test</td>
<td class="LineOfCaller">18</td>
<td class="Thread">main</td>
<td class="Message">debug</td>
</tr>

<tr class="trace even">
<td class="Level">TRACE</td>
<td class="Date">2023-02-27 12:06:31.242</td>
<td class="Logger">io.github.jihch.LogbackTest</td>
<td class="MethodOfCaller">test</td>
<td class="LineOfCaller">19</td>
<td class="Thread">main</td>
<td class="Message">trace</td>
</tr>