ロギングフレームワーク:logback詳細と最適な構成

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/sinat_27933301/article/details/95861498

  プロジェクトを構成するには、次の春ブーツを書くために他の誰かを指すことを意図し、そして誰もが書き込みをすることが分かったのと同じではありません、そして最終的に真剣に公式文書、logback中国のネットワーク(勉強することを決めたhttp://www.logback.cnを)。

まず、logbackされているもの
  logbackのlog4jから継承され、それがログシステム業界での経験の十年の上に構築されています。他のすべてのロギングシステムは、多くのユニークで便利な機能が含まれてより速く、小さくなっています。

第二に、アーキテクチャ
  Logbackアーキテクチャは、異なる利用シナリオのための非常に一般的です。logbackコア、logback-古典:Logbackは、三つの異なるモジュールに分割され 、logbackアクセス。これら3つの成分と共に、開発者は、ログメッセージの種類及びレベルに応じてログを印刷することを可能にする作用の異なるタイプ。Loggerクラスのlogback-古典的なモジュールの一部として。レイアウトアペンダとlogbackコアの一部としてインターフェース。一般的なモジュールとして、logback-コア概念ロガー。
  logbackコアは、他の2つのモジュールのための基礎です。(log4jのかのjava.util.loggingなど)logackカットバック:あなたが他のロギングフレームワークから解放されているので、logback-古典的なモジュールは、log4jのの最適化されたバージョンとして見ることができ、それは、自然なサポートSLF4Jです。
  Tomcatの、突堤:logback-アクセスサーブレットコンテナは、例えば、と統合することができます。これは、アクセスログHTTPをする機能を提供します。

三、logback設定

1、logbackの初期化手順:
(1)ファイルを探しますが、クラスパスにlogbackのlogback-のtest.xmlと呼ばれます。
見つからない場合は(2)、logback我々はlogback.groovyという名前のファイルを探していきます。
見つからない場合は(3)、logbackはlogback.xmlという名前のファイルを探していきます。
見つからない場合は(4)、ServiceLoaderツールは、JDKによって提供されますコンフィギュレータ・インタフェースを実現するためのクラスパス内のファイルMETA-- INFO /サービス/ ch.qos.logback.classic.spi.Configurator、文書の内容を検索しますクラスの完全修飾クラス名を実装します。
上記が成功しない場合は(5)、logbackはBasicConfigurator介して自分自身のために構成され、ログは、すべてのコンソールに印刷されます。

図2に示すように、コンフィギュレーション・ロガー
  タグロガーの構成により行わ、ロガータグは、name属性、オプショナルレベル属性、オプショナルプロパティ加法を含まなければなりません。加法は、trueまたはfalseです。レベル値TRACE、DEBUG、INFO、WARN、 ERRORは、ALL、OFF、NULL継承されています。レベル値が継承またはNULL場合は、上位の階層レベルの継承ロガーを強制します。
   アペンダ-REF少なくとも一つ以上の要素を含む0ロガー要素。各アペンダは、このようにロガーに追加されます。違いはlog4jの、logbakcクラシックはオフにするか、ロガーで定義された以前のアペンダを削除しないことです。

図3に示すように、コンフィギュレーションロガールートの
  ルート要素を介して設定ルートロガー。それが唯一の財産--levelをサポートしています。加法は、ルートロガーには適用されませんので、他の属性を設定することが許可されていません。また、ルートロガーの名前は、name属性をサポートしていないと言うことです、「ROOT」と命名されています。ロガーレベル値と属性等が挙げられるが、先天性またはNULLに設定することはできません。
  要素に類似<ロガー要素とゼロ個以上の要素を含むことができます。

例として
  、我々はDEBUG情報「chapters.configuration」コンポーネントのどの部分を見たいと思っていませんが、クラスの例外がある場合。

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="chapters.configuration" level="INFO" />
    <logger name="chapters.configuration.Foo" level="DEBUG" />

    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
ロガー名 レベルを指定します。 効果的なレベル
ルート デバッグ デバッグ
chapters.configuration INFO INFO
chapters.configuration.MyApp ヌル INFO
chapters.configuration.Foo デバッグ デバッグ

図4に示すように、構成アペンダ
  アペンダ要素、2人の必須属性名およびクラスを使用して構成。name属性は、アペンダの名前を指定するために使用され、クラス属性が指定されたクラスのインスタンスの完全修飾名にする必要があります。アペンダー要素は、ゼロまたは1つの要素、又はエンコーダ要素0,0、又はフィルタエレメントの複数の複数を含むことができます。これらの共通の要素に加えて、JavaBeanプロパティアペンダー要素は、アペンダー要素と一致する任意のタイプを含むことができます。

  FileAppenderは、イベントログファイルにOutputStreamAppenderが出力のサブクラスです。ファイルによってターゲット・ファイルを指定します。ファイルが存在する場合は、追記の値に応じて、またはログファイルに追加、またはファイルが切り詰められています。

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>myApp.log</file>
        <encoder>
            <pattern>
                %date %level [%thread] %logger{10} [%file:%line] %msg%n
            </pattern>
        </encoder>
    </appender>

  RollingFileAppenderは、FileAppenderから継承されたログファイルの機能を回転しています。例えば、RollingFileAppenderのlog.txtファイルにログ出力は、特定の条件が満たされた後、別のファイルにログを出力します。
  RollingFileAppenderとの対話二つの重要なサブコンポーネントがあります。最初はログローテーション機能を担当してRollingPolicy、です。もう一つは、ログのローテーションのタイミングのために責任があるTriggeringPolicy、です。何が起こったのかを担当しRollingPolicyので、TriggeringPolicyは、それが責任起こったとき。
  RollingFileAppender効果を作るために、それはまた、RollingPolicyとTriggeringPolicyを設定する必要があります。RollingPolicyもTriggeringPolicyインタフェースを実現している場合しかし、その後、あなただけがうまく前を設定する必要があります。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logFile.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
		<!-- 按天轮转 -->
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 保存 30 天的历史记录,最大大小为 30GB -->
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>

        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

  TimeBasedRollingPolicyは、最も一般的なローテーション戦略です。回転に基づいてポリシーを定義するための時間です。例えば、日または月によって。また、両方のロータリーの行動に責任をTimeBasedRollingPolicy、回転をトリガーするための責任。実際には、TimeBasedRollingPolicyはRollingPolicyとTriggeringPolicyインタフェースを実現しながら。
  TimeBasedRollingPolicy構成は必須属性fileNamePatternおよび他の任意の属性が必要です。
  TimeBasedRollingPolicyは、自動ファイル圧縮をサポートしています。fileNamePatternが.gzをまたは.zipで終わっている場合、この機能を開始します。

ローテーション・ポリシーのサイズと時間に基づいて
  、時にはあなたが時間通りに回転しますが、各ログファイルのサイズを制限したいしたいと思います。ポスト処理ツールは、サイズ制限をログに記録する必要がある場合は特に。この需要を満たすために、logbackはSizeAndTimeBasedRollingPolicyを装備します。
  TimeBasedRollingPolicyはアーカイブの合計サイズを制限することができ、注意してください。あなたはこの制限をしたいのであれば、あなたはtotalSizeCapを設定することによって、これを達成することができます。

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>mylog.txt</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
		<!-- 按天轮转 -->
            <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>60</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>

        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

図5は、公式文書によると、コンフィギュレーション・ファイルは、詳細なlogbackを次の

<?xml version="1.0" encoding="UTF-8"?>
<!-- 参考logback中文网(http://www.logback.cn/)-->
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan为true时,如果配置文件发生改变将会进行重新加载 -->
<!-- scanPeriod属性设置监测配置文件修改的时间间隔,默认单位为毫秒,在scan为true时才生效 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds">
    <contextName>logback</contextName>
    <property name="log.path" value="./logs" />
    <property name="app.name" value="bootdemo" />

    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/${app.name}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyyMMdd}/${app.name}_%d{yyyyMMdd}_%i.log</fileNamePattern>
            <!-- 日志文件最大限制 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 日志保留天数 -->
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--过滤掉所有低于该级别的日志-->
        <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>-->
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/${app.name}_error.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyyMMdd}/${app.name}_error_%d{yyyyMMdd}_%i.log</fileNamePattern>
            <!-- 日志文件最大限制 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 日志保留天数 -->
            <maxHistory>30</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <!--只记录ERROR级别日志-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--文件目录控制日志级别-->
    <logger name="com.demo.server.mapper" level="DEBUG" />

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>

</configuration>

おすすめ

転載: blog.csdn.net/sinat_27933301/article/details/95861498