記事ディレクトリ
元のリンク: https://changlu.blog.csdn.net/article/details/114860566
ログバックの概要
公式ウェブサイト: https://logback.qos.ch/index.html
Logback: これも、log4j の創設者が Apache を去った後に設計したオープンソースのログ コンポーネントであり、そのパフォーマンスは Log4j よりも優れています。
logback は、logback-core、logback-classic、logback-access の 3 つのモジュールに分かれています。 logback-
core: 他の 2 つのモジュールの基礎を築きます。
logback-classic: log4j の改良版であり、slf4j API を完全に実装しています。
logback-access: アクセス モジュールはサーブレット コンテナと統合され、HTTP 経由でログにアクセスする機能を提供します。
現在、ログ フレームワークは slf4j ログ ファサードを使用してログ システムを構築していますが、ほとんどのログ実装フレームワークには slf4j-api 依存関係が含まれており、主に設定ファイルと pom.xml を変更します。
ログレベル (5)
package ch.qos.logback.classic;
public final class Level implements Serializable {
public static final Level OFF = new Level(2147483647, "OFF");
public static final Level ERROR = new Level(40000, "ERROR");
public static final Level WARN = new Level(30000, "WARN");
public static final Level INFO = new Level(20000, "INFO");
public static final Level DEBUG = new Level(10000, "DEBUG");
public static final Level TRACE = new Level(5000, "TRACE");
public static final Level ALL = new Level(-2147483648, "ALL");
...
}
ログ レベルは次のように並べ替えられます: TRACE
< DEBUG
< INFO
< WARN
< ERROR
。デフォルトのログ レベルは ですDebug
。ここでOFF
、 と はALL
ログ スイッチとして使用されます。
関連コンポーネント
Logback には、Log4j に似た Logger、Appender、Layout の 3 つのコンポーネントも含まれています。 Logger
: Logger は、アプリケーションの対応するコンテキストに関連付けた後、主にログ オブジェクトを保存するために使用され、ログのタイプとレベルを定義することもできます。 。
アペンダー: ログ出力の宛先を指定するために使用されます。宛先はコンソール、ファイル、データベースなどです。
Layout: イベントを文字列に変換し、フォーマットされたログ情報を出力します。Logback では、Layout オブジェクトはエンコーダ内にカプセル化されます。
ログバック設定ファイル (XML)
ロギング フレームワークを使用する場合、logback
次のタイプの構成ファイルがデフォルトで読み取られます。
logback.groovy
logback-test.xml
logback.xml
存在しない場合は、デフォルトの設定が使用され、ログ レベルはDEBUG
、デフォルトの出力は ですconsole
。
一般作成logback.xml
(Maven
項目はresource
下にあります)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--....相关配置信息-->
</configuration>
ルートロガーの設定
ルートの基本設定
<!-- 设置root的日志等级为ALL -->
<root level="ALL">
<!-- 指定appender引用,这里例如引用下面的appender -->
<appender-ref ref="console"/>
</root>
キーと値のペアを構成し、対応するキーの値を取得します。
<!-- ①配置一对键值对,其name可被引用-->
<property name="pattern" value="%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
<!-- 配置appender过程中引用对应键值对 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 设置自定义格式布局 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- ******************** -->
<!-- ②注意这里使用${name}包裹能够引用property中name对应的value -->
<pattern>${pattern}</pattern>
<!-- ******************** -->
</encoder>
</appender>
- ①②に注目し、②で事前に設定されているものを参照し
property
、それを使用して値${}
を取得しますvalue
ログ出力形式
<!--
日志输出格式:
%-5level:日志等级
%d{yyyy-MM-dd HH:mm:ss.SSS}:日期
%c:类的完整名称
%M:method
%L:行号
%thread:线程名称
%m或者%msg:信息
%n:换行
-->
<!--配置一对键值对 日志等级(值为靠左对齐5个位子) 日期 类完整名 方法 行号 线程名 信息及换行-->
<property name="pattern" value="%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
アペンダー
ConsoleAppender
: 画面に出力します。FileAppender
: 指定したファイルに出力します。RollingFileAppender
:一定の間隔でファイルを作成し、ファイルサイズに合わせてカットします。
コンソールアペンダー
目的:画面への出力。
構成logback.xml
:
デモの例
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 可见root基本设置中的格式介绍 -->
<property name="pattern" value="%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
<!-- ******************** -->
<!-- 配置ConsoleAppender -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 输出流对象 -->
<target>System.err</target>
<!-- 日志格式配置 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 设置输出格式引用上面的键值对及输出的格式 -->
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 设置root,引用appender -->
<root level="ALL">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
プログラムを実行します。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
//获取Logger实例
public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
//为了效果明显循环10000次
for (int i = 0; i < 10000; i++) {
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
}
FileAppender (カスタム形式と HTML)
目的: ファイルへのログ出力。
FileAppender
(追加可能) append = true
、FileSize bufferSize = new FileSize(8192);
(バッファー サイズ)。
- FileAppender クラス自体に含まれており
setFile()
、その親クラスには がOutputStreamAppender
含まれていますsetEncoder
。
カスタム形式(
PatternLayoutEncoder
)のファイルに出力します。
<!-- 配置路径以及日志格式 -->
<property name="log_dir" value="d:/logs"/>
<property name="pattern" value="%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
<!-- ******************** -->
<!-- 配置fileAppender -->
<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的日志等级为ALL,以及引用上面的name为console的appender -->
<root level="ALL">
<!-- 这里console只用来表示root标签可设置多个appender,无引用上面的意思 -->
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
- 出力プログラムは以下の 3.2 で確認できます。対応するキーと値のペアの設定は、ソース コードで確認できる、対応する指定クラスまたはその親クラスの関連する set メソッドにすぎません。
ファイルへの出力形式はHTML形式(
LayoutWrappingEncoder
Layoutを含むHTMLLayout
)です。
<!-- 配置路径以及日志格式 -->
<property name="log_dir" value="d:/logs"/>
<property name="pattern" value="%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
<!-- ******************** -->
<!-- 配置HTML格式的Appender -->
<appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
<!-- 配置文件路径 -->
<file>${log_dir}/logback.html</file>
<!-- 日志格式设置 -->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<!-- 设置了HTMLLayout的layout -->
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<!-- 注意:输出格式为HTML时,不需要有空格或者其他符号或者换行,否则输出格式会有空格不美观 -->
<pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m</pattern>
</layout>
</encoder>
</appender>
<!-- ******************** -->
<!-- 设置root的日志等级为ALL,引用console和 -->
<root level="ALL">
<!-- 这里console只用来表示root标签可设置多个appender,无引用上面的意思 -->
<appender-ref ref="console"/>
<appender-ref ref="htmlFile"/>
</root>
- テスト手順については 3.2 を参照してください。対応するラベル設定は、対応する設定メソッドにすぎません。
- に設定可能な対応するもの
ch.qos.logback.core.encoder.LayoutWrappingEncoder
が含まれています。layout
htmllayout
RollingFileAppender
目的:一定間隔でファイルを作成し、ファイルサイズに合わせてカットする。
RollingFileAppender
クラスは実装されていますFileAppender
。つまり、, (出力パス)FileAppender
などの設定可能な属性コンテンツがあります。Encoder
file
<!-- 设置路径键值对 -->
<property name="log_dir" value="d:/logs"/>
<!-- ******************** -->
<!-- 日志拆分和归档的appender对象 -->
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置文件路径 -->
<file>${log_dir}/roll_logback.log</file>
<!-- 自定义日志格式设置 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!-- 指定日志文件拆分与压缩规则 -->
<RollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 通过指定压缩文件名称来确定分割文件方式,这里是设置为年月日
可精确到毫秒:%d{yyyy-MM-dd-hh-mm-ss-SSS}
-->
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd-hh-mm-ss}.log%i.gz</fileNamePattern>
<!-- 文件拆分大小,超过1MB即拆分 -->
<maxFileSize>1MB</maxFileSize>
</RollingPolicy>
</appender>
<!-- ******************** -->
<!-- 设置root的日志等级为ALL,引用appender -->
<root level="ALL">
<appender-ref ref="rollingFile"/>
</root>
fileNamePattern
行 13: 設定されたログ ファイルの分割および圧縮ルール クラス。これには、分割ファイルの名前と分割時間 (上記のfile
ファイルの分割)を決定するための2 つの属性が含まれます。またmaxFileSize
、単一ファイルのサイズを設定できます。ここにあります1MB
。
試験手順:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
//获取Logger实例
public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
//为了效果明显循环10000次
for (int i = 0; i < 10000; i++) {
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
}
フィルター
目的: 指定したログ レベルのログ レコードをフィルタリングします。
Filter
次のように、任意の に設定できますappender
。
EvaluatorFilter
: クリティカル フィルター。指定されたしきい値を下回るログをフィルターで除外します。LevelFilter
: レベル フィルター。特定のレベルのログをフィルターします。
レベルフィルター
設定手順
LevelFilter 構成の 3 つの属性の概要:
level: フィルタリングのログ レベルを設定します。
onMatch: ログレベルが一致した場合にアクションを実行します。
onMismatch: ログレベルが一致しない場合にアクションを実行します。
このうち、onMatch と onMismatch は、指定された列挙値 (3 つ) に対応します。
DENY: ログは他のフィルターを通過せずにすぐに破棄されます。(否定的な意味)
NEUTRAL: 順序付きリストの次のフィルターが通過し、ログが処理されます (このレベルは処理も破棄もされません。つまり、処理は行われず、ログはこのアペンダーで保存および実行されます) (中立)
ACCEPT: ログは残りのフィルターを通過せずにすぐに処理されます。(意味的に)
使用例
要件:error
ログ レベルのみをファイルに出力します。
logback.xml
構成は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置fileAppender -->
<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>
<!-- ******************** -->
<!-- 配置日志等级过滤器:LevelFilter -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 指定日志等级 -->
<level>error</level>
<!-- 若是>=error(匹配)直接通过不过滤 -->
<onMatch>ACCEPT</onMatch>
<!-- 若是<error(不匹配)过滤掉 -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- ******************** -->
</appender>
<!-- 设置root的日志等级为ALL,以及引用上面的name为console的appender -->
<root level="ALL">
<appender-ref ref="file"/>
</root>
</configuration>
試験手順:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
//获取Logger实例
public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
}
原理分析
上記の設定はLevelFilter
クラスです。このクラスに含まれる属性を見てみましょう。
LevelFilter
クラスにlevel
プロパティとメソッドが含まれていることがわかりますset
。
LevelFilter
親クラスには、プロパティとメソッドがAbstractMatcherFilter
含まれます。onMatch
onMismatch
set
デフォルト値がFilterReply.NEUTRAL
列挙型クラスに対応していることがわかります。列挙型クラスをもう一度見てみましょう。
- 3 つの例に対応する、対応する意味については上記を参照してください。
非同期ログ構成
導入
以前は同期ログを使用してログを出力していましたが、高い同時実行性と低遅延の要件を持つシステムには非同期を設定できます。
非同期: ログを印刷するとき、毎回ディスクに直接書き込む同期ログとは異なり、印刷タスクはメモリ キューに入れられ、直接返されます。
使用例
FileAppender
非同期ログを使用するには、logback.xml
構成は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置fileAppender -->
<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>
<!-- 配置日志等级过滤器:LevelFilter -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 指定日志等级 -->
<level>error</level>
<!-- 若是>=error(匹配)直接通过不过滤 -->
<onMatch>ACCEPT</onMatch>
<!-- 若是<error(不匹配)过滤掉 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 设置异步日志 -->
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<!--设为0表示队列达到80%,也不丢弃任务-->
<discardingThreshold>0</discardingThreshold>
<!--队列的深度,该值会影响性能,默认256,这里设置1024-->
<queueSize>1024</queueSize>
<!--队列满了直接丢弃要写的消息-->
<neverBlock>true</neverBlock>
<!--One and only one appender may be attached to AsyncAppender,添加多个的话后面的会被忽略-->
<appender-ref ref="file"/>
</appender>
<!-- 设置root的日志等级为ALL,以及引用上面的name为console的appender -->
<root level="ALL">
<appender-ref ref="file"/>
</root>
</configuration>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
//获取Logger实例
public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
}
説明: 通常、非同期ログは同時実行性が高い状況で使用されます。
ソースコードの予備調査
非同期効果は、構成ファイルで定義された参照をappender
使用することによって実現されます。まず、継承関係を確認します。AsyncAppender
appender
AsyncAppender
AsyncAppender
このクラスには構成プロパティが含まれています。
AsyncAppender
親クラスにはAsyncAppenderBase
構成プロパティが含まれています。
- 対応する属性は次のように説明されます。
<!--可设置属性介绍-->
<!--队列的深度,该值会影响性能,默认256-->
<queueSize>512</queueSize>
<!--设为0表示队列达到80%,也不丢弃任务-->
<discardingThreshold>0</discardingThreshold>
<!--日志上下文关闭后,AsyncAppender继续执行写任务的时间,单位毫秒-->
<maxFlushTime>1000</maxFlushTime>
<!--队列满了直接丢弃要写的消息-->
<neverBlock>true</neverBlock>
<!--是否包含调用方的信息,false则无法打印类名方法名行号等-->
<includeCallerData>true</includeCallerData>
<appender-ref ref="file"/>
知っておく必要があるのは、非同期ロガーの属性には、BlockingQueue
複数の実装クラスを持つインターフェイス、つまりキューが含まれていることです。
AsyncAppenderBase
このメソッドでは、実装クラスがstart()
デフォルトで取得されます。ArrayBlockingQueue
実際、多くの構成情報はこのキュー実装クラスに間接的に関連しています。!!当面はここで理解するのに十分なので、これ以上の探索は行いません。
カスタムロガー
導入
目的: カスタマイズによりLogger
、独自に定義したメッセージをコンソールに出力したり、システムメッセージをログファイルに出力したりするなど、ビジネスニーズに応じてカスタマイズできます。LoggerFactory.getLogger(指定类或包名);
指定された構成のインスタンスは、 を使用して取得できますlogger
。
使い方
<!--自定义logger additivity:表示是否从 rootLogger继承配置-->
<logger name="xyz.changlu" level="debug" additivity="false">
<appender-ref ref="console"/>
</logger>
- ここではラベルはカスタム ラベルとして使用されます
<logger>
。 additivity
: 継承するかどうかを示すブール値を設定しますRootLogger
。
ログバックの簡単な使用 (構成ファイルなし)
まず依存関係を導入しslf4j-api
(統合 API を容易にするため)、次にlogback-classic
モジュールを導入します。
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
- 実際には依存関係
slf4j-classic
も含まれていますが、slf4j-api
ログを一元管理するために依存関係はAPI
別途導入されていますslf4j-api
。(このように考えてください。個別のslf4j-api
依存関係をインポートしない場合、ログ フレームワークを変更すると、slf4j-api
対応する異なる依存関係の導入で問題が発生します)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
//获取Logger实例
public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
ログ レベルのデフォルトは ですdebug
。
構成ファイルでのログバックの使用
ディレクトリlogback.xml
に新たに配置されたもの:resource
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
日志输出格式:
%-5level:日志等级
%d{yyyy-MM-dd HH:mm:ss.SSS}:日期
%c:类的完整名称
%M:method
%L:行号
%thread:线程名称
%m或者%msg:信息
%n:换行
-->
<!--配置一对键值对-->
<property name="pattern" value="%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"/>
<!-- 配置ConsoleAppender -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 输出流对象 -->
<target>System.err</target>
<!-- 日志格式配置 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 引用上面的键值对及输出的格式 -->
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 设置root的日志等级为ALL,以及引用上面的name为console的appender -->
<root level="ALL">
<!-- 可设置多个appender -->
<appender-ref ref="console"/>
</root>
</configuration>
- 設定された
root
ログ レベルは でありALL
、出力ストリーム オブジェクトとログ形式の構成 (カスタム ログ形式のレイアウト、形式も参照) を設定するための参照appender
となります。consoleappender
appender
テストプログラム
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
//获取Logger实例
public static final Logger LOGGER = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
実行中の内容は設定ファイルの内容と同じであることが表示され、設定は成功です。
log4j.properties から logback.xml へ
元々使用されていたがlog4j
現在使用したいlogback
一部の古いプロジェクトの場合、対応する設定ファイルも書き換える必要がありますが、公式 Web サイトが提供する変換機能を使用して簡単にそれを実現する方法もあります: ログバック変換ページ
変換したいものをlog4j.propertoes
指定した入力フィールドにコピーするだけです。
変換された内容は次のとおりです。
log4j.properties
log4j.rootLogger = trace,file
# FileAppender
# file为名称 其中属性file:文件路径 encoding:编码
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.file = C:/Users/93997/Desktop/projectexers/logs/log.txt
log4j.appender.file.encoding = UTF-8
# 设置自定义布局(自定义输出格式)
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern= [%-5p]%r %l %d{
yyyy-MM-dd HH:mm:ss:SSS} %m%n
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- For assistance related to logback-translator or configuration -->
<!-- files in general, please contact the logback user mailing list -->
<!-- at http://www.qos.ch/mailman/listinfo/logback-user -->
<!-- -->
<!-- For professional support please see -->
<!-- http://www.qos.ch/shop/products/professionalSupport -->
<!-- -->
<configuration>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>C:/Users/93997/Desktop/projectexers/logs/log.txt</file>
<encoding>UTF-8</encoding>
<encoder>
<pattern>[%-5p]%r %l %d{yyyy-MM-dd HH:mm:ss:SSS} %m%n</pattern>
</encoder>
</appender>
<root level="trace">
<appender-ref ref="file"/>
</root>
</configuration>
注: 注意すべき唯一の点は、そこで設定されているpattern
形式です。logback
これは では利用できないため%l
、変換された構成ファイルの出力形式pattern
を変更できます。
Logbackのアクセスモジュール
アクセスモジュールを知る
はじめに: Logback-access モジュールは、Servlet コンテナ (Tomcat、Jetty など) を継承し、HTTP アクセス ログの機能を提供するモジュールで、Tomcat のアクセス ログを置き換えることができます。
目的: Tomcat ログを同じ方法で管理したい場合、ログ出力をカスタマイズしたい場合などに、このモジュールを使用できます。
アクセスモジュールを使用する
今回はコンテンツ
Tomcat8.5.63
が使用されています (10.0.2 は動作しません)。公式Tomcat
Web サイトにアクセスしてダウンロードできます。Tomcat
起動してURL の下のページtomcat
にアクセスすると、クリックしていくつかのページにアクセスすると、ディレクトリにログ ファイルが作成されます。localhost:8080
logs
実際に
logback
使用されるaccess
モジュール
最初のステップ:logback-access.jar
と をディレクトリlogback-core.jar
にコピーします。$TOMCAT_HOME/lib/
つまり、tomcat
解凍ディレクトリのlib
ディレクトリに 2 つの jar パッケージ (両方ともバージョン 1.17) を配置します。
- 中央倉庫にアクセスしてダウンロードするか、Baidu ネットワーク ディスクから入手できます (リンク: https://pan.baidu.com/s/1T5CJx1vR1621TDrCRsKr9Q 抽出コード: njy4 )。
ステップ 2 :変更$TOMCAT_HOME/conf/server.xml
内の要素にタグをHost
追加するvalue
<Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
ステップ 3 : 準備したものをディレクトリlogback-access.xml
にコピーします$TOMCAT_HOME/conf/
logback-access.xml
内容は以下の通りです。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- always a good activate OnConsoleStatusListener -->
<!-- 设置一个监听器 -->
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
<!-- 添加一对键值对,LOG_DIR对应着指定路径 -->
<property name="LOG_DIR" value="${catalina.base}/logs"/>
<!-- 添加RollingFileAppender,按照天来进行分割文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出文件路径 -->
<file>${LOG_DIR}/access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 指定文件名称(压缩包) -->
<fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<!-- 官网进行了简化使用一个名称即可代表指定格式:
combined相当于"%h %l %u [%t] "%r" %s %b "%i{Referer}" "%i{User-Agent}" -->
<pattern>combined</pattern>
</encoder>
</appender>
<appender-ref ref="FILE"/>
</configuration>
pattern
指定された名前は、公式 Web サイトで確認できます (複数の名前の定義): https://logback.qos.ch/access.html#configuration
次に、 を起動しtomcat
、クリックしていくつかのページにアクセスし、 でlogs
生成されたファイルを確認しますaccess.log
。
出力形式の内容を変更・調整することも可能です。
要約する
1. Logback には 5 つのログ レベルがあり、デフォルトのログ レベルはデバッグです。コンポーネントには、ロガー、アペンダー、エンコーダー (レイアウトをカプセル化) も含まれます。— 第 1 章を参照
2. カスタム構成ファイルは通常 logback.xml を使用し、よく使用される Appender は RollingFileAppender (ログ ファイルを時間通りに追加し、ファイル サイズに応じて分割する) で、LevelFilter はフィルタリング ログ レベルを設定できます。—第 2 章アペンダー、フィルターを参照
3. logback で非同期ログを構成できるため、パフォーマンスが大幅に向上します。—第 2 章「非同期ログ構成」を参照
4. Log4j.properties は logback 公式 Web サイトで logback.xml に変換できますが、log4j.properties 内のフォーマット設定文字 %l は logback では無効であるため、変更する必要があることに注意してください。— パート 4 を参照
5. Loback のアクセス モジュールは、Servet コンテナ (Tomcat、Jetty など) のアクセス ログを置き換えることができ、形式をカスタマイズできます。— セクション 5 を参照