log 4 jをlog 4 j 2にアップグレード
12907 ワード
本文の主な内容は、log 4 jをlog 4 j 2にアップグレードし、ログの自動削除を実現する操作手順と注意事項を含む.
一、アップグレードの原因:
log 4 jには天然欠陥がある: log 4 jは同期出力モードを採用し、高同時&ログ出力が多すぎる場合、スレッドがブロックする可能性があり、消費時間が大きすぎる . log 4 jでは日付によるログの自動削除は実現できず、既存のプロジェクトではタイミングスクリプトによるログの削除が行われている.
調査によりlog 4 j 2は非同期出力を採用し,構成によりログの自動削除を実現できる.
二、既存のログ方式
1.commons-logging
紹介:commons-loggingはApache内のログインタフェースであり、LogFactoryによってlogオブジェクトを取得し、ただのインタフェースであり、具体的には依存関係jarパッケージを実現する.
アップグレード方式:この方式はLogFactoryの実装パッケージをlog 4 j 2に変更するだけでよい(log 4 jパッケージを削除することでlog 4 j 2パッケージを導入して実装する).
2.slf 4 j(この方式で実現することを強く推奨)
紹介:slf 4 jは1と類似しており、関連jarパケットに依存するログ実装インタフェースである.LoggerFactoryでlogオブジェクトを取得します.文字列の代わりに{}プレースホルダを使用できます.
アップグレード方法:ロガーファクトリのインプリメンテーションパッケージをlog 4 j 2に変更するだけです(log 4 jパッケージを削除することでlog 4 j 2パッケージを導入してインプリメンテーションします).
3.Loggerオブジェクト
紹介:log 4 jが提供するLoggerオブジェクトを直接使用します.
アップグレード方法:コードを変更しない:ブリッジパッケージlog 4 j-1.2-apiを導入します.すべてのlog 4 jパケットをクリアしたほうがいいです.できない場合は、ブリッジパケットをすべてのlog 4 jパケットの前に置くことを保証する必要があります.そうしないと、log 4 jパケットに上書きされ、ブリッジ機能の変更コードを実現できません.slf 4 jのLoggerFactoryを使用してlogオブジェクトを取得します.
三、ログのアップグレード
ステップ maven依存をクリーンアップし、自分が導入したlog 4 jパケットを除去する. はブリッジパケットlog 4 j-1.2-api及びlog 4 j 2関連パケットをpomに導入する.xmlファイルの最前面.
3.プロファイルを変更します.log4j.propertites–>>log4j2.xmlファイル(ここではタイミング削除が可能で、log 4 j 2バージョン2.5以上が必要)
TimeBasedTriggeringPolicyラベルのmodulateは生産ログを表し、intervalは生産ログの時間を表し、単位はログフォーマットfilePatternの最後のビットです.たとえば、ここのログ形式はfilePattern=".../log/vip_scf_vipidentity/vip_vipidentity.log.%d{yyyy-MM-dd}.log」は、intervalが1である場合、毎日ログを生成することを意味します.DefaultRolloverStrategyラベルはログファイルの生存時間を設定し、IfFileNameは削除するログのフォーマットに正規表現を使用して一致し、IfLastModifiedはログの有効期間を表し、単位はs、m、h、dであり、ここでは前述に合わせて5日間保存するログを表す.
注意事項ログ自動削除機能を実現するには、jdkをjdk 7以上にアップグレードする必要があります(jdk 8が推奨され、jdk 7では全面的なテストは行われていません).これは、log 4 j 2のログ削除機能が2.5バージョン以上でサポートされているのに対し、jdk 6は最大2.3バージョンまでサポートされているためです. log 4 j-1.2-apiバッグ最前端まで!!! 起動時にコンソールに次のログが表示されるのは、log 4 jを検索するプロファイルが見つからないためです.log 4 j 2にアップグレードされていないことを証明します(ブリッジパケットが有効ではありません).maven依存性を確認し、ブリッジパケットの前にlog 4 jパケットが導入されているかどうかを確認する必要があります(ここで解決する必要があります.いいえ、jarパケット内のログが出力されない可能性があります). 起動時に次のログが表示されるのは、log 4 j 2のバージョンが低すぎてdeleteラベルが導入されていないため、maven依存性を確認する必要があるためです.(ここではログ自動削除機能のみに影響し、必要でなければ気にしない) はslf 4 jのLoggerFactoryを統一してlogオブジェクトを取得することを提案し、後でログのメンテナンスを容易にする.
一、アップグレードの原因:
log 4 jには天然欠陥がある:
調査によりlog 4 j 2は非同期出力を採用し,構成によりログの自動削除を実現できる.
二、既存のログ方式
1.commons-logging
紹介:commons-loggingはApache内のログインタフェースであり、LogFactoryによってlogオブジェクトを取得し、ただのインタフェースであり、具体的には依存関係jarパッケージを実現する.
アップグレード方式:この方式はLogFactoryの実装パッケージをlog 4 j 2に変更するだけでよい(log 4 jパッケージを削除することでlog 4 j 2パッケージを導入して実装する).
2.slf 4 j(この方式で実現することを強く推奨)
紹介:slf 4 jは1と類似しており、関連jarパケットに依存するログ実装インタフェースである.LoggerFactoryでlogオブジェクトを取得します.文字列の代わりに{}プレースホルダを使用できます.
アップグレード方法:ロガーファクトリのインプリメンテーションパッケージをlog 4 j 2に変更するだけです(log 4 jパッケージを削除することでlog 4 j 2パッケージを導入してインプリメンテーションします).
3.Loggerオブジェクト
紹介:log 4 jが提供するLoggerオブジェクトを直接使用します.
アップグレード方法:コードを変更しない:ブリッジパッケージlog 4 j-1.2-apiを導入します.すべてのlog 4 jパケットをクリアしたほうがいいです.できない場合は、ブリッジパケットをすべてのlog 4 jパケットの前に置くことを保証する必要があります.そうしないと、log 4 jパケットに上書きされ、ブリッジ機能の変更コードを実現できません.slf 4 jのLoggerFactoryを使用してlogオブジェクトを取得します.
三、ログのアップグレード
ステップ
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-1.2-apiartifactId>
<version>2.7version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-apiartifactId>
<version>2.7version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-coreartifactId>
<version>2.7version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-jclartifactId>
<version>2.7version>
dependency>
<dependency>
<groupId>org.apache.logging.log4jgroupId>
<artifactId>log4j-slf4j-implartifactId>
<version>2.7version>
dependency>
<dependency>
<groupId>com.bj58.spatgroupId>
<artifactId>com.bj58.spat.scfartifactId>
<version>4.2.21version>
<type>pomtype>
dependency>
3.プロファイルを変更します.log4j.propertites–>>log4j2.xmlファイル(ここではタイミング削除が可能で、log 4 j 2バージョン2.5以上が必要)
<Configuration status="WARN">
<Appenders>
<Console name="myConsole" target="SYSTEM_OUT">
<ThresholdFilter level="info" onMatch="ACCEPT"/>
<PatternLayout pattern="[%d{MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n"/>
Console>
<RollingFile name="activexAppender" fileName="../log/vip_scf_vipidentity/vip_vipidentity.log"
filePattern="../log/vip_scf_vipidentity/vip_vipidentity.log.%d{yyyy-MM-dd}.log">
<ThresholdFilter level="info" onMatch="ACCEPT"/>
<PatternLayout>
<Pattern>[%d{MM-dd HH:mm:ss SSS} %-5level] [%t] %c{3}.%M - %m%n%exPattern>
PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
Policies>
<DefaultRolloverStrategy>
<Delete basePath="../log" maxDepth="1">
<IfFileName glob="vip_vipidentity*.log" />
<IfLastModified age="5d" />
Delete>
DefaultRolloverStrategy>
RollingFile>
Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="myConsole"/>
<AppenderRef ref="activexAppender"/>
Root>
Loggers>
Configuration>
TimeBasedTriggeringPolicyラベルのmodulateは生産ログを表し、intervalは生産ログの時間を表し、単位はログフォーマットfilePatternの最後のビットです.たとえば、ここのログ形式はfilePattern=".../log/vip_scf_vipidentity/vip_vipidentity.log.%d{yyyy-MM-dd}.log」は、intervalが1である場合、毎日ログを生成することを意味します.DefaultRolloverStrategyラベルはログファイルの生存時間を設定し、IfFileNameは削除するログのフォーマットに正規表現を使用して一致し、IfLastModifiedはログの有効期間を表し、単位はs、m、h、dであり、ここでは前述に合わせて5日間保存するログを表す.
注意事項
log4j:WARN No appenders could be found for logger (com.bj58.testLog4j.TestLog4j).
log4j:WARN Please initialize the log4j system properly.
ERROR DefaultRolloverStrategy contains an invalid element or attribute "Delete"
private static Logger log = LoggerFactory.getLogger(RedisClientPool.class);