ログバックコンソールの印刷情報

1) logback ログコンポーネント

はじめに: logback はオープン ソースのログ コンポーネントであり、Log4j のアップグレード バージョンに属しており、現在プロジェクト チームによって使用されることが増えています。

アドバンテージ:

1. 初期ロードメモリが少ない

2. 構成が変更されると、構成ファイルが自動的に再ロードされ、スキャンプロセスが高速かつ安全になります。

構成モジュール: logback-core、logback-classic、logback-access

logback-core は、logback のコア機能を提供し、他の 2 つのコンポーネントの基礎となります。

logback-classic モジュールは SLF4J API を実装します。

logback-access モジュールはサーブレット コンテナと統合されており、ログにアクセスするための Http を提供します。

使用方法: Maven の pom.xml に jar をインポートします。

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.11</version>
</dependency>
	
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.11</version>
</dependency>
	
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.11</version>
</dependency>
 
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

Logback ログ スキャン順序: (logback は、接尾辞名が groovy と xml の 2 つの構成方法をサポートします)

ステップ 1: まず、システム プロパティ システム構成ファイルに logback.configurationFile に対応する値があるかどうかを確認します。

ステップ 2: クラスパスに logback.groovy ファイルがあるかどうかを確認する

ステップ 3: クラスパスに logback-test.xml ファイルがあるかどうかを確認する

ステップ 4: クラスパスに logback.xml ファイルがあるかどうかを確認する

上記の 4 つの手順は、いずれかのロジックに準拠するだけで済みます。具体的なコード実装は、ch.qos.logback.classic.util.ContextInitializer クラスの findURLOfDefaultConfigurationFile メソッドで確認できます。

上記の 4 つの手順が満たされている場合、logback はデフォルトでコンソール出力ログを構築し、デフォルトのログ形式が存在します。

初期化方法:

1つ目: 名前を指定して初期化する

プライベート最終静的ロガー LOGGER = LoggerFactory.getLogger(“HelloLogback”);

2 番目のメソッド: クラスによって初期化される

プライベート最終静的ロガー LOGGER = LoggerFactory.getLogger(HelloLogback.class);
パッケージcom.oysept.logback;

org.slf4j.Logger をインポートします。
org.slf4j.LoggerFactory をインポートします。

パブリック クラス HelloLogback {

private final static Logger LOGGER = LoggerFactory.getLogger(HelloLogback.class);

public static void main(String[] args) {
    LOGGER.debug("this is debug message");
    LOGGER.info("this is info message");
    LOGGER.warn("this is warning message");
    LOGGER.error("this is error message");
    LOGGER.warn("this is  login message");
}

2
) Logback ログ コンソール出力
logback.xml にコンソール出力ログ設定を追加します。

<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<!-- 自定义属性 -->
<property name="pattern" value="%X{thread} [%date{yyyy-MM-dd HH:mm:ss.SSS}] %level %logger{36} %line - %msg%n"/>

<!--控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <!-- 设置日志输出格式 -->
        <pattern>${pattern}</pattern>
		
        <!-- 设置输出字符集编码 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>

<!-- 根root looger -->
<root level="DEBUG">
    <appender-ref ref="STDOUT" />
</root>
logback.xml設定ファイルの詳細説明

1. 設定: ルートノードを設定します。

2. プロパティ: 属性変数 3. アペンダー: ログ出力先 ${pattern}
    <!-- 设置输出字符集编码 -->
    <charset>UTF-8</charset>
</encoder>
4. root: ルートログオブジェクト 3) logback ログディスクファイル出力

logback.xml にディスク出力ログ構成を追加します (この方法はあまり使用されません)

<?xml バージョン="1.0" エンコーディング="UTF-8" ?>
<!-- 自定义变量 -->
<property name="appName" value="ouyangjun-logback" />

<!-- 日志文件名称, 可随便命名 -->
<property name="baseFile" value="ouyangjun-logback" />

<!-- 项目所在盘符的根目录下, 也可以指定具体盘符位置, 如:E:\\app\\ouyangjun-logback\\logs -->
<property name="rootPath" value="/app/ouyangjun-logback/logs" />

<!-- 日志输出格式 -->
<property name="pattern" value="%X{thread} [%date{yyyy-MM-dd HH:mm:ss.SSS}] %level %logger{36} %line - %msg%n"/>

<!-- 设置上下文名称 -->
<contextName>${appName}</contextName>

<!-- 磁盘文件输出日志 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <File>${rootPath}/${baseFile}.log</File>
    <append>true</append>  
    <prudent>false</prudent>
	
    <!-- 日志输出格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${pattern}</pattern>
        
        <!-- 设置字符集 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>

<root level="INFO">
    <appender-ref ref="FILE" />
</root>
4) logback ログローリング出力 (ディスク)

logback.xml にディスク出力ログ設定を追加します。設定が有効になると、特定の設定に従ってログ ファイルが生成されます。たとえば、ログ ファイルが特定のサイズを超えると、新しいログ ファイルが再生成されて保存されます。

最適化ポイント:ログをディスクに出力するたびにIOストリーム操作が行われるため、非同期出力ログと組み合わせることで機能を実現 ログが一定量に達したらディスクに書き出す再度ファイルします。

<?xml バージョン="1.0" エンコーディング="UTF-8" ?>
<!-- 自定义变量 -->
<property name="appName" value="ouyangjun-logback" />

<!-- 日志文件名称, 可随便命名 -->
<property name="baseFile" value="ouyangjun-logback" />

<!-- 项目所在盘符的根目录下, 也可以指定具体盘符位置, 如:E:\\app\\ouyangjun-logback\\logs -->
<property name="rootPath" value="/app/ouyangjun-logback/logs" />

<!-- 日志输出格式 -->
<property name="pattern" value="%X{thread} [%date{yyyy-MM-dd HH:mm:ss.SSS}] %level %logger{36} %line - %msg%n"/>

<!-- 设置上下文名称 -->
<contextName>${appName}</contextName>

<!-- 磁盘文件滚动输出日志 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${rootPath}/${baseFile}.log</File>
    <append>true</append>  
    <prudent>false</prudent>
	
    <!-- 磁盘日志文件rolling策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${rootPath}/${baseFile}_%d{yyyy-MM-dd}.log.gz</FileNamePattern>
        
        <!-- 日志在磁盘上保留天数 -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>

    <!-- 日志输出格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${pattern}</pattern>
        
        <!-- 设置字符集 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>

<!-- 把日志异步输出到磁盘文件中,避免每次都进行磁盘IO操作 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <discardingThreshold>0</discardingThreshold>
    <queueSize>10000</queueSize>
    <appender-ref ref="FILE" />
</appender>

<root level="INFO">
    <!-- <appender-ref ref="FILE" /> -->
    
    <appender-ref ref="ASYNC" />
</root>
毎回のディスク IO 操作を回避するために、ログをディスク ファイルに非同期的に出力します。 0 10000

ログローリングポリシーローリングポリシーの詳細説明

1 つ目の方法: 時間に基づいてログ ファイルのローリング戦略を策定します。たとえば、日、時間、分ごとにログ ファイルを生成します。

ch.qos.logback.core.rolling.TimeBasedRollingPolicy

${rootPath}/${baseFile}_%d{yyyy-MM-dd}.log.gz
<!-- 日志在磁盘上保留天数 -->
<maxHistory>30</maxHistory>
2 番目のタイプ: ログ ファイルのサイズが指定された範囲を超える場合、ファイル名に従って複数のファイルに分割されることを示します。

ch.qos.logback.core.rolling.FixedWindowRollingPolicy

${baseFile}_.%i.log.gz
1
3 3

番目のタイプ:triggeringPolicy は、rollingPolicy と同じレベルであり、ログ ファイルのサイズに応じて、指定されたサイズのスクロールを超えると、ログがトリガーされます。

ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy

5MB

5) 実戦でのlogback.xml設定ファイル

<?xml バージョン="1.0" エンコーディング="UTF-8" ?>
<!-- 自定义变量 -->
<property name="appName" value="ouyangjun-logback" />

<!-- 日志文件名称, 可随便命名 -->
<property name="baseFile" value="ouyangjun-logback" />

<!-- 项目所在盘符的根目录下, 也可以指定具体盘符位置, 如:E:\\app\\ouyangjun-logback\\logs -->
<property name="rootPath" value="/app/ouyangjun-logback/logs" />

<!-- 日志输出格式 -->
<property name="pattern" value="%X{thread} [%date{yyyy-MM-dd HH:mm:ss.SSS}] %level %logger{36} %line - %msg%n"/>

<!-- 设置上下文名称 -->
<contextName>${appName}</contextName>

<!-- 把日志在控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${pattern}</pattern>
        
        <!-- 设置字符集 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>

<!-- 磁盘文件输出日志 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${rootPath}/${baseFile}.log</File>
    <append>true</append>  
    <prudent>false</prudent>
	
    <!-- 日志文件rolling策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${rootPath}/${baseFile}_%d{yyyy-MM-dd}.log.gz</FileNamePattern>
        <!-- 日志保留天数 -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>

    <!-- 日志输出格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${pattern}</pattern>
        
        <!-- 设置字符集 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>

<!-- 文件输出日志 (文件大小策略进行文件输出,每小时产生一个日志文件给异常监控平台进行分析) -->
<appender name="ERRORFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${rootPath}/${baseFile}_error.log</File>
    <append>true</append>  
    <prudent>false</prudent>
	
    <!-- 日志文件rolling策略 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${rootPath}/${baseFile}_error_%d{yyyy-MM-dd}.log.gz</FileNamePattern>
        
        <!-- 日志在磁盘上保留天数 -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    
    <!-- 过滤器,只ACCEPT接收ERROR级别的日志,其它日志级别都DENY拒绝 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    
    <!-- 日志输出格式 -->
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${pattern}</pattern>
        
        <!-- 设置字符集 -->
        <charset>UTF-8</charset>
    </encoder>
</appender>

<!-- 把日志异步输出到磁盘文件中,避免每次都进行磁盘IO操作 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <discardingThreshold>0</discardingThreshold>
    <queueSize>10000</queueSize>
    <appender-ref ref="FILE" />
</appender>

<root level="INFO">
    <!-- 生产环境,可以不需要再控制台输出日志 -->
    <appender-ref ref="STDOUT" />
    
    <!-- 异步输出日志到磁盘文件中 -->
    <appender-ref ref="ASYNC" />
    
    <!-- 错误文件,需要实时输出到磁盘中 -->
    <appender-ref ref="ERRORFILE" />
</root>

おすすめ

転載: blog.csdn.net/qq_34690003/article/details/130922383