1 package charactermanaj.util;
\r
4 import java.io.FileInputStream;
\r
5 import java.io.FileOutputStream;
\r
6 import java.io.InputStream;
\r
7 import java.util.logging.ConsoleHandler;
\r
8 import java.util.logging.Level;
\r
9 import java.util.logging.LogManager;
\r
10 import java.util.logging.Logger;
\r
13 public final class ApplicationLoggerConfigurator {
\r
15 private static final String LOGGING_PROPERTIES = "logging.properties";
\r
17 private ApplicationLoggerConfigurator() {
\r
21 public static void configure() {
\r
23 // 初期時にJRE等にある初期設定がなされている.
\r
24 LogManager logManager = LogManager.getLogManager();
\r
27 // ルートロガーがInfoになり、ハンドラはすべてリセット。ルートロガー以外の設定は空にされる.
\r
30 Exception configurationError = null;
\r
32 // ユーザーごとのアプリケーション設定ディレクトリ上の設定ファイルを取得する.
\r
33 File appDataDir = ConfigurationDirUtilities.getUserDataDir();
\r
34 File logConfig = new File(appDataDir, LOGGING_PROPERTIES);
\r
36 if ( !logConfig.exists()) {
\r
37 // ユーザ指定のロギングプロパティがない場合、リソースからコピーする
\r
38 copyDefaultLogProperty(logConfig);
\r
41 InputStream is = null;
\r
42 if (logConfig.exists()) {
\r
43 // ユーザー指定のロギングプロパティがある場合
\r
44 is = new FileInputStream(logConfig);
\r
47 is = ApplicationLoggerConfigurator.class.getResourceAsStream("/" + LOGGING_PROPERTIES);
\r
52 logManager.readConfiguration(is);
\r
59 } catch (Exception ex) {
\r
60 // 初期化に失敗した場合はログに記録するために例外を保存するが、
\r
62 configurationError = ex;
\r
66 Logger logger = Logger.getLogger(ApplicationLoggerConfigurator.class.getName());
\r
68 // 初期化時に失敗した場合、デフォルトのコンソールハンドラを設定し、ログに出力する.
\r
69 if (configurationError != null) {
\r
70 logger.addHandler(new ConsoleHandler());
\r
71 logger.addHandler(new ApplicationLogHandler());
\r
72 logger.log(Level.WARNING, "LogConfigurationFailed", configurationError);
\r
76 logger.info("open logger.");
\r
77 logger.info("application configuration: baseDir="
\r
78 + ConfigurationDirUtilities.getApplicationBaseDir() + " appData="
\r
79 + ConfigurationDirUtilities.getUserDataDir());
\r
83 * デフォルトのログプロパティをユーザディレクトリにコピーする.
\r
84 * @param logConfig ユーザディレクトリ上のログプロパティファイル位置
\r
86 private static void copyDefaultLogProperty(File logConfig) {
\r
88 InputStream is = ApplicationLoggerConfigurator.class
\r
89 .getResourceAsStream("/" + LOGGING_PROPERTIES);
\r
92 FileOutputStream fos = new FileOutputStream(logConfig);
\r
94 byte buf[] = new byte[4096];
\r
96 int rd = is.read(buf);
\r
100 fos.write(buf, 0, rd);
\r
110 } catch (Exception ex) {
\r
111 ex.printStackTrace();
\r