上記に同意すると、ロギング フレームワークを使用する必要があります。私は SLF4J などの抽象化を使用することを好みます。
この例では、下で log4j を使用できます。Java アプリケーションのクラスパスに配置できる log4j.properties ファイルの例を次に示します。
#Rootlogger logs to console and logfile
log4j.rootLogger=INFO,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=/tmp/apname.log
log4j.appender.logfile.MaxFileSize=1024KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date [thread] priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d [%t] %p [%c] - %m%n
#=============== CREATE A SEPARATE HANDLER FOR LOGGING SPECIFIC PACKAGES
log4j.appender.MYPACKAGEHANDLER=org.apache.log4j.RollingFileAppender
log4j.appender.MYPACKAGEHANDLER.File=/tmp/mypackage.log
# 1/2 GB
log4j.appender.MYPACKAGEHANDLER.MaxFileSize=512MB
# Keep three backup files.
log4j.appender.MYPACKAGEHANDLER.MaxBackupIndex=3
# Pattern to output: message only
log4j.appender.MYPACKAGEHANDLER.layout=org.apache.log4j.PatternLayout
log4j.appender.MYPACKAGEHANDLER.layout.ConversionPattern=%m%n
log4j.additivity.com.techtrip.mypackage=false
log4j.logger.com.techtrip.mypackage=DEBUG, MYPACKAGEHANDLER
この構成を使用すると、ローリング アペンダーを使用して 2 つのログ ファイルが作成され、com.techtrip.mypackage にログを記録するクラスのすべてのデバッグ ログ出力が /tmp/mypackage.log に出力されます。
Logger と Formatter を持つ単純なクラスの例を考えてみましょう:
package com.techtrip.mypackage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Foo {
private Logger logger = LoggerFactory.getLogger(Foo.class);
private String someString;
private Foo() {
super();
}
public void setSomeString(String someString) {
if (logger.isDebugEnabled()){
logger.debug(String.format("Setting someString %s", someString));
}
this.someString = someString;
}
}
これにより、setter の出力がログ ファイルに記録されます。プロパティファイルを変更するだけでオフにできます。とてもシンプルです。