Javaログデザイン&実践(2)-デザイン編
4785 ワード
設計段階では主にいくつかの問題を考慮する.アプリケーションまたは機能によってログを分割するが、把握度は に及ばない.ログ構成動的調整 をサポートする必要がある
SpringのLog 4 jConfigListenerを使用して、ログ・レベルの動的調整を実現
web.xml対応位置は以下の内容を加える
【注意】
1.log 4 jConfigLocationを/WEB-INF/classes/log 4 jに指定しない.properties
log 4 jConfigLocationが/WEB-INF/classes/log 4 jとして指定する.propertiesは、ログ構成を動的に調整する必要がある場合、クラスの再ロードを引き起こす可能性があります.ただし動的調整/WEB-INF/log 4 j.propertiesはクラスの再ロードを起こさない
2.log 4 jRefreshIntervalの単位はミリ秒
3. /WEB-INF/log4j.propertiesと/WEB-INF/classes/log 4 j.propertiesは同時に存在しない.そうしないと異常を報告する.
4.JUnitユニットテストクラスの問題
ユニットテストの実行中に、次のエラーが発生しました.
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
デフォルトのlog 4 jプロファイルが見つからないため、以下のように手動で指定できます.
Log4jConfigurer.initLogging("classpath:log4j.test.properties");
log4j.test.propertiesは、実行ユニットテストクラスに特化したプロファイルです.
プロジェクトごとに独立したログファイルを指定
/WEB-INF/log4j.propertiesの構成は次のとおりです.
log4j.appender.file.File=${catalina.home}/logs/projectName
のprojectNameは、プロジェクト名など、プロジェクトを一意に識別する文字列です.
${catalina.home}は現在のtomcatエンジニアリングルートディレクトリを表し、Tomcat起動時にこの変数を設定します.
以上の構成により、プロジェクトごとに独立したログファイルを指定できるディレクトリ
小結
以下のいくつかの質問に答えます.
【質問】1つのTomcatが複数のプロジェクトをロードし、ログの内容がどのプロジェクトであるかをどのように決定しますか?
【答】工程ごとに独立したログファイルを指定し、複数の工程ログファイルが1つのファイルに出力される問題を回避する
【質問】複数のTomcatが同時に同じプロジェクトをロードする場合、log 4 jのDailyRollingFileAppenderなどのファイルクラスAppenderを使用できますか?
【答】はい、ファイル名を指定する場合は、類似のものを使用できます
log4j.appender.file.File=${catalina.home}/logs/projectName
の構成で、Tomcatのログごとに保存されます.
【問】複数のTomcatが同時に同じプロジェクトをロードする場合、ログ出力ディレクトリを個別に指定できますか?
【答え】前の質問と同じ答えができる
【問】クラスのログレベルを動的に調整できますか?
【答え】本論文ではすでに一つの考え方を提供している
SpringのLog 4 jConfigListenerを使用して、ログ・レベルの動的調整を実現
web.xml対応位置は以下の内容を加える
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>10000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
【注意】
1.log 4 jConfigLocationを/WEB-INF/classes/log 4 jに指定しない.properties
log 4 jConfigLocationが/WEB-INF/classes/log 4 jとして指定する.propertiesは、ログ構成を動的に調整する必要がある場合、クラスの再ロードを引き起こす可能性があります.ただし動的調整/WEB-INF/log 4 j.propertiesはクラスの再ロードを起こさない
2.log 4 jRefreshIntervalの単位はミリ秒
3. /WEB-INF/log4j.propertiesと/WEB-INF/classes/log 4 j.propertiesは同時に存在しない.そうしないと異常を報告する.
4.JUnitユニットテストクラスの問題
ユニットテストの実行中に、次のエラーが発生しました.
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
デフォルトのlog 4 jプロファイルが見つからないため、以下のように手動で指定できます.
Log4jConfigurer.initLogging("classpath:log4j.test.properties");
log4j.test.propertiesは、実行ユニットテストクラスに特化したプロファイルです.
プロジェクトごとに独立したログファイルを指定
/WEB-INF/log4j.propertiesの構成は次のとおりです.
log4j.rootLogger=info, file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/projectName
log4j.appender.file.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%p %d %m [%l] %n
log4j.appender.file.File=${catalina.home}/logs/projectName
のprojectNameは、プロジェクト名など、プロジェクトを一意に識別する文字列です.
${catalina.home}は現在のtomcatエンジニアリングルートディレクトリを表し、Tomcat起動時にこの変数を設定します.
以上の構成により、プロジェクトごとに独立したログファイルを指定できるディレクトリ
小結
以下のいくつかの質問に答えます.
【質問】1つのTomcatが複数のプロジェクトをロードし、ログの内容がどのプロジェクトであるかをどのように決定しますか?
【答】工程ごとに独立したログファイルを指定し、複数の工程ログファイルが1つのファイルに出力される問題を回避する
【質問】複数のTomcatが同時に同じプロジェクトをロードする場合、log 4 jのDailyRollingFileAppenderなどのファイルクラスAppenderを使用できますか?
【答】はい、ファイル名を指定する場合は、類似のものを使用できます
log4j.appender.file.File=${catalina.home}/logs/projectName
の構成で、Tomcatのログごとに保存されます.
【問】複数のTomcatが同時に同じプロジェクトをロードする場合、ログ出力ディレクトリを個別に指定できますか?
【答え】前の質問と同じ答えができる
【問】クラスのログレベルを動的に調整できますか?
【答え】本論文ではすでに一つの考え方を提供している