log 4 j 2 ThresholdFilterを構成し、infoファイルにerrorログを記録させる

12926 ワード

ログ・レベル:
重大度(重要度)によって分けられます(以下の6種類).
ALL <
TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
 
ログを印刷するルール:
levelP>=levelQの場合、levelPはlevelQのロゴに印刷されます.
すなわち、設定されたログ・レベルがinfoの場合、info、warn、errorなどの高レベルのログが含まれます.
 
次のdemoはコンソールに印刷してテストします.
 
log 4 j 2依存
    <properties>
        <log4j.version>2.5log4j.version>
    properties>

    <dependencies>
        
        
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-coreartifactId>
            <version>${log4j.version}version>
        dependency>
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-apiartifactId>
            <version>${log4j.version}version>
        dependency>

    dependencies>

 
 
log4j2.xml
Springcontextファイルはlog 4 jファイルを導入する必要はありません.log 4 jフレームワークは、ファイルを自動的に検出します.
以下log 4 j 2構成Rootのレベルはinfoです.したがって、デフォルトではFilterが設定されていない場合、INFO WARN ERROR FATALレベルのログが印刷されます.
xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] (%F:%L) - %m%n"/>
            <Filters>
                ~~~
            Filters>
        Console>

        
        <RollingFile name="ManageWebInfo" fileName="d:\logs\log4j2study_info.log"
                     filePattern="d:\logs\log4j2study_info_%d{yyyy-MM-dd}_%i.log.gz">
            。。。
        RollingFile>

        <RollingFile name="ManageWebError" fileName="d:\logs\log4j2study_error.log"
                     filePattern="d:\logs\log4j2study_error_%d{yyyy-MM-dd}_%i.log.gz">
            。。。
        RollingFile>
    Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="CONSOLE"/>
            <AppenderRef ref="ManageWebInfo"/>
            <AppenderRef ref="ManageWebError"/>
        Root>
        <Logger name="study" level="WARN">
            <AppenderRef ref="CONSOLE"/>
        Logger>
    Loggers>
Configuration>

 
test class
package study;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Log4j2Test {
    public static void main(String[] args) throws Exception {
//        Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
        Logger logger = LogManager.getLogger(/*"study"*/);
        logger.trace("trace level");
        logger.debug("debug level");
        logger.info("info level");
        logger.warn("warn level");
        logger.error("error level");
        logger.fatal("fatal level");

//        Thread.sleep(10);
        throw new Exception("test");
    }
}

 
 
テスト
コンソール出力を例にテストを行い、上記の「CONSOLE」のノードで異なるThresholdFilterを定義して出力をテストします.
2018-12-28 16:07:44,477 INFO [main] (MyLogTest.java:11) - info level2018-12-28 16:07:44,479 WARN [main] (MyLogTest.java:12) - warn level
2018-12-28 16:09:43,849 INFO [main] (MyLogTest.java:11) - info level
INFOより高いものは印刷されません.rootログレベルはinfoなので、ログは印刷されません.
INFOとERRORのみ印刷
ERRORおよびそれ以上(すなわちERRORとFATAL)(error.logファイルの標準)のみを印刷します.
(FiltersノードにこのFilterが1つしかない場合)INFO、WARN、ERROR(一般的なinfo.logファイルの標準)を印刷する
 
まとめa)ThresholdFilter属性:onMatchはマッチング設定のログレベルの後がDENYかACCEPTか、onMismatchは不マッチング設定のログレベルがDENYかACCEPTかNEUTRALbかを示す)上記のmatch/misMatchは設定以上のログレベルを指す.したがって、ログレベルの高いFilterを定義します.
————————————————————————————
mainメソッドは、ログを印刷する文の後ろにthrowに異常があります.mainメソッドを実行してコンソールの出力を見ると、異常情報がlogログより先に出力される場合があり、log 4 j 2は非同期ログであることがわかります.————————————————————————————————————————————未取得の例外はログ・ファイルに記録されません.--くだらない話のようです~———————だから、プログラムは必ず異常をキャプチャして印刷しなければなりません.そうしないと、catelinaを見るしかありません——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————関係をカスタマイズする場合は、Loggerノードを構成してname属性名(通常class/interfaceのname)を設定し、Loggerオブジェクトのインスタンスを定義するときにこのnameを指定します.