“Logback 的 FileAppender”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) (→示例) |
||
第1行: | 第1行: | ||
https://www.bilibili.com/video/BV1iJ411H74S?p=28 | https://www.bilibili.com/video/BV1iJ411H74S?p=28 | ||
− | === 示例 === | + | === 示例 输出到普通文本文件的 FileAppender === |
==== logback.xml ==== | ==== logback.xml ==== | ||
第98行: | 第98行: | ||
[DEBUG] 2023-02-27 11:43:16.760 io.github.jihch.LogbackTest test 18 [main] debug | [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 | [TRACE] 2023-02-27 11:43:16.761 io.github.jihch.LogbackTest test 19 [main] trace | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === 示例 输出到 HTML 文件的 FileAppender === | ||
+ | |||
+ | ==== logback.xml ==== | ||
+ | <syntaxhighlight lang="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="htmlFile" 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="file" 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>${pattern}</pattern> | ||
+ | </layout> | ||
+ | </encoder> | ||
+ | </appender> | ||
+ | |||
+ | <!-- root logger 配置 --> | ||
+ | <root level="ALL"> | ||
+ | <appender-ref ref="console"/> | ||
+ | <appender-ref ref="file"/> | ||
+ | <appender-ref ref="htmlFile"/> | ||
+ | </root> | ||
+ | |||
+ | </configuration> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | ==== LogbackTest.java ==== | ||
+ | 内容不变 | ||
+ | |||
+ | |||
+ | |||
+ | ==== 控制台 ==== | ||
+ | 日志记录内容不变 | ||
+ | |||
+ | ==== /logs/logback.log ==== | ||
+ | 日志记录内容不变 | ||
+ | |||
+ | |||
+ | ==== /logs/logback.html ==== | ||
+ | <syntaxhighlight lang="console"> | ||
+ | <!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 11:54:05 CST 2023</p><p></p> | ||
+ | |||
+ | <table cellspacing="0"> | ||
+ | <tr class="header"> | ||
+ | <td class="Literal">Literal</td> | ||
+ | <td class="Level">Level</td> | ||
+ | <td class="Literal">Literal</td> | ||
+ | <td class="Date">Date</td> | ||
+ | <td class="Literal">Literal</td> | ||
+ | <td class="Logger">Logger</td> | ||
+ | <td class="Literal">Literal</td> | ||
+ | <td class="MethodOfCaller">MethodOfCaller</td> | ||
+ | <td class="Literal">Literal</td> | ||
+ | <td class="LineOfCaller">LineOfCaller</td> | ||
+ | <td class="Literal">Literal</td> | ||
+ | <td class="Thread">Thread</td> | ||
+ | <td class="Literal">Literal</td> | ||
+ | <td class="Message">Message</td> | ||
+ | <td class="LineSeparator">LineSeparator</td> | ||
+ | </tr> | ||
+ | |||
+ | |||
+ | <tr class="error even"> | ||
+ | <td class="Literal">[</td> | ||
+ | <td class="Level">ERROR</td> | ||
+ | <td class="Literal">] </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="Literal"> </td> | ||
+ | <td class="MethodOfCaller">test</td> | ||
+ | <td class="Literal"> </td> | ||
+ | <td class="LineOfCaller">15</td> | ||
+ | <td class="Literal"> [</td> | ||
+ | <td class="Thread">main</td> | ||
+ | <td class="Literal">] </td> | ||
+ | <td class="Message">error</td> | ||
+ | <td class="LineSeparator"> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr class="warn odd"> | ||
+ | <td class="Literal">[</td> | ||
+ | <td class="Level">WARN</td> | ||
+ | <td class="Literal">] </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="Literal"> </td> | ||
+ | <td class="MethodOfCaller">test</td> | ||
+ | <td class="Literal"> </td> | ||
+ | <td class="LineOfCaller">16</td> | ||
+ | <td class="Literal"> [</td> | ||
+ | <td class="Thread">main</td> | ||
+ | <td class="Literal">] </td> | ||
+ | <td class="Message">warn</td> | ||
+ | <td class="LineSeparator"> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr class="info even"> | ||
+ | <td class="Literal">[</td> | ||
+ | <td class="Level">INFO</td> | ||
+ | <td class="Literal">] </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="Literal"> </td> | ||
+ | <td class="MethodOfCaller">test</td> | ||
+ | <td class="Literal"> </td> | ||
+ | <td class="LineOfCaller">17</td> | ||
+ | <td class="Literal"> [</td> | ||
+ | <td class="Thread">main</td> | ||
+ | <td class="Literal">] </td> | ||
+ | <td class="Message">info</td> | ||
+ | <td class="LineSeparator"> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr class="debug odd"> | ||
+ | <td class="Literal">[</td> | ||
+ | <td class="Level">DEBUG</td> | ||
+ | <td class="Literal">] </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="Literal"> </td> | ||
+ | <td class="MethodOfCaller">test</td> | ||
+ | <td class="Literal"> </td> | ||
+ | <td class="LineOfCaller">18</td> | ||
+ | <td class="Literal"> [</td> | ||
+ | <td class="Thread">main</td> | ||
+ | <td class="Literal">] </td> | ||
+ | <td class="Message">debug</td> | ||
+ | <td class="LineSeparator"> | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
+ | <tr class="trace even"> | ||
+ | <td class="Literal">[</td> | ||
+ | <td class="Level">TRACE</td> | ||
+ | <td class="Literal">] </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="Literal"> </td> | ||
+ | <td class="MethodOfCaller">test</td> | ||
+ | <td class="Literal"> </td> | ||
+ | <td class="LineOfCaller">19</td> | ||
+ | <td class="Literal"> [</td> | ||
+ | <td class="Thread">main</td> | ||
+ | <td class="Literal">] </td> | ||
+ | <td class="Message">trace</td> | ||
+ | <td class="LineSeparator"> | ||
+ | </td> | ||
+ | </tr> | ||
</syntaxhighlight> | </syntaxhighlight> |
2023年2月27日 (一) 03:58的版本
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="htmlFile" 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="file" 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>${pattern}</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 11:54:05 CST 2023</p><p></p>
<table cellspacing="0">
<tr class="header">
<td class="Literal">Literal</td>
<td class="Level">Level</td>
<td class="Literal">Literal</td>
<td class="Date">Date</td>
<td class="Literal">Literal</td>
<td class="Logger">Logger</td>
<td class="Literal">Literal</td>
<td class="MethodOfCaller">MethodOfCaller</td>
<td class="Literal">Literal</td>
<td class="LineOfCaller">LineOfCaller</td>
<td class="Literal">Literal</td>
<td class="Thread">Thread</td>
<td class="Literal">Literal</td>
<td class="Message">Message</td>
<td class="LineSeparator">LineSeparator</td>
</tr>
<tr class="error even">
<td class="Literal">[</td>
<td class="Level">ERROR</td>
<td class="Literal">] </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="Literal"> </td>
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
<td class="LineOfCaller">15</td>
<td class="Literal"> [</td>
<td class="Thread">main</td>
<td class="Literal">] </td>
<td class="Message">error</td>
<td class="LineSeparator">
</td>
</tr>
<tr class="warn odd">
<td class="Literal">[</td>
<td class="Level">WARN</td>
<td class="Literal">] </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="Literal"> </td>
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
<td class="LineOfCaller">16</td>
<td class="Literal"> [</td>
<td class="Thread">main</td>
<td class="Literal">] </td>
<td class="Message">warn</td>
<td class="LineSeparator">
</td>
</tr>
<tr class="info even">
<td class="Literal">[</td>
<td class="Level">INFO</td>
<td class="Literal">] </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="Literal"> </td>
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
<td class="LineOfCaller">17</td>
<td class="Literal"> [</td>
<td class="Thread">main</td>
<td class="Literal">] </td>
<td class="Message">info</td>
<td class="LineSeparator">
</td>
</tr>
<tr class="debug odd">
<td class="Literal">[</td>
<td class="Level">DEBUG</td>
<td class="Literal">] </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="Literal"> </td>
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
<td class="LineOfCaller">18</td>
<td class="Literal"> [</td>
<td class="Thread">main</td>
<td class="Literal">] </td>
<td class="Message">debug</td>
<td class="LineSeparator">
</td>
</tr>
<tr class="trace even">
<td class="Literal">[</td>
<td class="Level">TRACE</td>
<td class="Literal">] </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="Literal"> </td>
<td class="MethodOfCaller">test</td>
<td class="Literal"> </td>
<td class="LineOfCaller">19</td>
<td class="Literal"> [</td>
<td class="Thread">main</td>
<td class="Literal">] </td>
<td class="Message">trace</td>
<td class="LineSeparator">
</td>
</tr>