#症状
「サーバで実行1」する際、Logger
を使ってコンソールに出力すると、「構成」レベル以下が表示されなかった。
#結論
- 出力先をファイルにする。コンソールに出力するのは諦めた。
-
FileHandler
のsetLevel(Level.ALL)
だけでなくLogger
のsetLevel(Level.ALL)
も設定する。
#環境
Eclipse 2019-03 (4.11.0)
Tomcat 9
Java 11
macOS 10.13.6
#コメント
コンソールに出力するには設定ファイルがいくつかあるみたい。記事[1]の通りにやったら解決できたが、Formatter
をオーバーライドして使っていたので、設定ファイルを使うやり方は面倒。そこでコンソールに出力するのを諦めてファイルに出力するようにした。
ログファイルを相対パスで指定するときは注意[2]。
Logger
でsetLevel()
のデフォルト値はLevel.INFO
(情報)になっているみたい。ちゃんと設定してあげよう。
#ソースコード
public class Log {
private static final String DEBUG_FILE = "log/test.log";
private static final Level DEBUG_LEVEL = Level.FINER;
public static final Logger logger = Logger.getLogger("Test");
public Log() throws SecurityException, IOException {
logger.setLevel(Level.ALL);
FileHandler debugHandler = new FileHandler(DEBUG_FILE, APPEND);
debugHandler.setLevel(DEBUG_LEVEL);
debugHandler.setFormatter(new MyFormatter());
logger.addHandler(debugHandler);
logger.setUseParentHandlers(false);
test();
}
private static void test() {
File file = new File(DEBUG_FILE);
if (file.exists()) {
System.out.println("logfile: " + file.getAbsolutePath());
} else {
System.out.println("logfile is not exist");
}
logger.finest("log test: FINEST");
logger.finer("log test: FINER");
logger.fine("log test: FINE");
logger.config("log test: CONFIG");
logger.info("log test: INFO");
logger.warning("log test: WARNING");
logger.severe("log test: SEVERE");
}
}
ちなみにMyFormatter
クラスはjava.util.logging.Formatter
を継承した自作クラスである。
使い方は、
new Log();
で初期化して、ログを出力したい場所で
Log.logger.fine("ログメッセージ");
ってする。
#参考
[1] TomcatとEclipseとログ https://qiita.com/utisam/items/e725ccff4062f3078ad9
[2] Eclipse上でTomcatを走らせるときの相対パス https://qiita.com/milmilk/private/99102afbb678b8e82c4c
[3] 【Java入門】Loggerの使い方(ログレベル、出力先の設定も解説) https://www.sejuku.net/blog/61048
[4] java.util.loggingの使い方 https://qiita.com/Qui/items/40077ce9e33738dd3914
-
Eclipse+Tomcatアプリ https://searchman.info/java_eclipse/1100.html ↩