1. java.util.logging.config.fileを利用する
Doma2ではログ出力にJDBCLoggerインターフェースを利用し、その実装の一例としてUtilLoggingJdbcLogger
が提供されています。このUtilLoggingJdbcLogger
はログ出力にJUL(java.util.logging
)を採用しているため、ログ出力に関する設定はシステムプロパティjava.util.logging.config.file
が利用できます。
handlers= java.util.logging.ConsoleHandler, java.util.logging.FileHandler
java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.pattern = logging_by_propertiesfile.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
たとえば上記のようなlogging.properties
があって、これをUtilLoggingJdbcLogger
の設定としたい場合、-Djava.util.logging.config.file=\path\to\logging.properties
とすればよいです。
2. java.util.logging.config.fileを利用する
システムプロパティファイルを使わず、自分でUtilLoggingJdbcLogger
を拡張することもできます。
まずUtilLoggingJdbcLogger
を継承したクラスを作成します。このときログ出力の設定はsuper.logger
(JULのインスタンス) に対して実施します。
public class MyUtilLoggingJdbcLogger extends UtilLoggingJdbcLogger {
public MyUtilLoggingJdbcLogger() {
try {
Formatter formatter = new SimpleFormatter();
Handler consoleHandler = new ConsoleHandler();
consoleHandler.setFormatter(formatter);
consoleHandler.setLevel(Level.INFO);
Handler fileHandler = new FileHandler("logging_by_class.log");
fileHandler.setFormatter(formatter);
fileHandler.setLevel(Level.INFO);
super.logger.addHandler(consoleHandler);
super.logger.addHandler(fileHandler);
} catch (SecurityException | IOException e) {
e.printStackTrace();
}
}
}
あとはDoma2のConfigクラスに作成したMyUtilLoggingJdbcLogger
を使うよう設定します。具体的にはgetJdbcLogger
メソッドをオーバライドして、MyUtilLoggingJdbcLogger
インスタンスを戻り値とするだけです。
@SingletonConfig
public class AppConfig implements Config {
private final JdbcLogger logger;
private AppConfig() {
logger = new MyUtilLoggingJdbcLogger();
}
@Override
public JdbcLogger getJdbcLogger() {
return logger;
}
}
環境情報
- java: openjdk version "11.0.3" 2019-04-16
- doma: 2.42.0