Java ロギング フレームワークのログバック


元のリンク: 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.xmlMaven項目は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"/>

画像-20210308233746000

アペンダー

画像-20210309230921208

  • 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");
        } 
    }
}

画像-20210309220018552

FileAppender (カスタム形式と HTML)

目的: ファイルへのログ出力。

FileAppender(追加可能) append = trueFileSize bufferSize = new FileSize(8192);(バッファー サイズ)。

画像-20210309233151621

  • 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>

画像-20210309223615545

  • 出力プログラムは以下の 3.2 で確認できます。対応するキーと値のペアの設定は、ソース コードで確認できる、対応する指定クラスまたはその親クラスの関連する set メソッドにすぎません。

ファイルへの出力形式はHTML形式(LayoutWrappingEncoderLayoutを含む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>

画像-20210309224144946

  • テスト手順については 3.2 を参照してください。対応するラベル設定は、対応する設定メソッドにすぎません。
  • 設定可能な対応するものch.qos.logback.core.encoder.LayoutWrappingEncoderが含まれていますlayouthtmllayout

RollingFileAppender

目的:一定間隔でファイルを作成し、ファイルサイズに合わせてカットする。

RollingFileAppenderクラスは実装されていますFileAppender。つまり、, (出力パス)FileAppenderなどの設定可能な属性コンテンツがあります。Encoderfile

<!--  设置路径键值对 -->
<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");
        } 
    }
}

画像-20210309231919221

フィルター

目的: 指定したログ レベルのログ レコードをフィルタリングします。

Filter次のように、任意の に設定できますappender

画像-20210310152956525

  • 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");
        }
    }
}

画像-20210310155141378

原理分析

上記の設定はLevelFilterクラスです。このクラスに含まれる属性を見てみましょう。

画像-20210310214426741

  • LevelFilterクラスにlevelプロパティとメソッドが含まれていることがわかりますset

画像-20210310214452764

  • LevelFilter親クラスにはプロパティとメソッドがAbstractMatcherFilter含まれますonMatchonMismatchset

デフォルト値がFilterReply.NEUTRAL列挙型クラスに対応していることがわかります。列挙型クラスをもう一度見てみましょう。

画像-20210310214645769

  • 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");
        }
    }
}

画像-20210310162021561

説明: 通常、非同期ログは同時実行性が高い状況で使用されます。

ソースコードの予備調査

非同期効果は、構成ファイルで定義された参照をappender使用することによって実現されます。まず、継承関係を確認します。AsyncAppenderappenderAsyncAppender

画像-20210310215022350

AsyncAppenderこのクラスには構成プロパティが含まれています。

画像-20210310215602838

AsyncAppender親クラスにはAsyncAppenderBase構成プロパティが含まれています。

画像-20210310215939919

  • 対応する属性は次のように説明されます。
<!--可设置属性介绍-->
<!--队列的深度,该值会影响性能,默认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複数の実装クラスを持つインターフェイス、つまりキューが含まれていることです。

画像-20210310220124992

AsyncAppenderBaseこのメソッドでは、実装クラスがstart()デフォルトで取得されます。ArrayBlockingQueue

画像-20210310220202562

実際、多くの構成情報はこのキュー実装クラスに間接的に関連しています。当面はここで理解するのに十分なので、これ以上の探索は行いません。

カスタムロガー

導入

目的: カスタマイズにより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>

画像-20210308223412622

  • 実際には依存関係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");
    }
}

画像-20210308223719275

ログ レベルのデフォルトは です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となります。consoleappenderappender

テストプログラム

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");
    }
}

画像-20210308233203742

実行中の内容は設定ファイルの内容と同じであることが表示され、設定は成功です。

log4j.properties から logback.xml へ

元々使用されていたがlog4j現在使用したいlogback一部の古いプロジェクトの場合、対応する設定ファイルも書き換える必要がありますが、公式 Web サイトが提供する変換機能を使用して簡単にそれを実現する方法もあります: ログバック変換ページ

変換したいものをlog4j.propertoes指定した入力フィールドにコピーするだけです。

画像-20210310231129271

変換された内容は次のとおりです

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 は動作しません)。公式TomcatWeb サイトにアクセスしてダウンロードできます。Tomcat

起動してURL の下のページtomcatにアクセスすると、クリックしていくつかのページにアクセスすると、ディレクトリにログ ファイルが作成されます。localhost:8080logs

画像-20210310233356060

実際にlogback使用されるaccessモジュール

最初のステップ:logback-access.jarと をディレクトリlogback-core.jarにコピーします。$TOMCAT_HOME/lib/

つまり、tomcat解凍ディレクトリのlibディレクトリに 2 つの jar パッケージ (両方ともバージョン 1.17) を配置します。

画像-20210310233636961

  • 中央倉庫にアクセスしてダウンロードするか、Baidu ネットワーク ディスクから入手できます (リンク: https://pan.baidu.com/s/1T5CJx1vR1621TDrCRsKr9Q 抽出コード: njy4 )。

ステップ 2 :変更$TOMCAT_HOME/conf/server.xml内の要素にタグをHost追加するvalue

画像-20210310234012876

<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

画像-20210310235832590

出力形式の内容を変更・調整することも可能です。

要約する

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 を参照

おすすめ

転載: blog.csdn.net/qq_29917503/article/details/131049106