OSDN Git Service

ver 2.23 init
[hayashilib/hayashi.git] / src / hayashi / yuu / tools / logger / LoggerFactory.java
1 package hayashi.yuu.tools.logger;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.UnsupportedEncodingException;
7 import java.util.logging.LogManager;
8 import java.util.logging.Logger;
9
10 /**
11  * ロギングファイルに動作ログを出力する簡単なモデル
12  * "log"+日時+".log"ファイルに出力される。
13  * 利用例:
14  * (1) インスタンスを取得する。
15  *              Logger logger = LoggerFactory.getInstance();
16  * (2) ログ出力例
17  *              logger.finest("[finest] 詳細レベル(高)");
18  *              logger.finer("[finer] 詳細レベル(中)");
19  *              logger.fine("[fine] 詳細レベル(小)");
20  *              logger.config("[config] 設定");
21  *              logger.info("[info] 情報");
22  *              logger.warning("[warning] 警告");
23  *              logger.severe("[severe] 致命的");
24  * @author yuu
25  * @version 2010/02/07
26  * @since 2010/02/07
27  */
28 public abstract class LoggerFactory 
29 {
30         public static void main(String[] args) {
31                 /*
32                  * (設定例)
33                  *              handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler
34                  *              .level=FINEST
35                  * 
36                  *              java.util.logging.ConsoleHandler.level=FINEST
37                  *              java.util.logging.ConsoleHandler.formatter=hayashi.yuu.tools.logger.YuuLogFormatter
38                  * 
39                  *              java.util.logging.FileHandler.level=WARNING
40                  *              java.util.logging.FileHandler.pattern=SampleLogging%u.%g.log
41                  *              java.util.logging.FileHandler.formatter=hayashi.yuu.tools.logger.YuuLogFormatter
42                  *              java.util.logging.FileHandler.count=10
43                  *              
44                  * 
45                  * 標準設定時でのログ出力。
46                  * info、warning、severeの3つのレベルのみ標準エラー出力に出力されます。
47                  * また、同時にファイルへも出力します。
48                  * 出力先ファイルは「Logging%u.%g.txt」。ログファイルは10個でローテーションする。
49                  * 
50                  * 情報: [info] 情報
51                  * 警告: [warning] 警告
52                  * 致命的: [severe] 致命的
53                  */
54                 Logger logger = LoggerFactory.getInstance();
55                 logger.finest("[finest] 詳細レベル(高)");
56                 logger.finer("[finer] 詳細レベル(中)");
57                 logger.fine("[fine] 詳細レベル(小)");
58                 logger.config("[config] 設定");
59                 logger.info("[info] 情報");
60                 logger.warning("[warning] 警告");
61                 logger.severe("[severe] 致命的");
62         }
63         
64     public static Logger logger;
65     
66     /**
67      * 簡単な標準ロガーを得る
68      * @return  標準ロガー
69      */
70     public static Logger getInstance() {
71         if (logger == null) {
72             //FileHandler handler = new FileHandler("GuardixMonitor.log", 1000, 3);     // ハンドラオブジェクトの生成
73             //handler.setFormatter(new SimpleFormatter());              // 出力フォーマットの指定
74             logger = Logger.getLogger("log");           // Loggerオブジェクトの生成
75             //GuardixMonitor.logger.addHandler(handler);                // Loggerオブジェクトにハンドラを追加
76         }
77                 return logger;
78     }
79         
80     /**
81          * ログ設定プロパティファイルのファイル内容
82          * 
83          */
84         protected static final String LOGGING_PROPERTIES_DATA
85             = "handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler\n"
86             + ".level=INFO\n"
87             + "java.util.logging.ConsoleHandler.level=FINEST\n"
88             + "java.util.logging.ConsoleHandler.formatter=hayashi.yuu.tools.logger.YuuLogFormatter\n"
89             + "java.util.logging.FileHandler.level=INFO\n"
90             + "java.util.logging.FileHandler.pattern=Logging%u.%g.txt\n"
91             + "java.util.logging.FileHandler.formatter=hayashi.yuu.tools.logger.YuuLogFormatter\n"
92             + "java.util.logging.FileHandler.count=10";
93
94     
95     /**
96          * static initializer によるログ設定の初期化
97          */
98     static {
99         final Logger logger = Logger.getLogger("SampleLogging");
100         InputStream inStream = null;
101         try {
102             inStream = new ByteArrayInputStream(LOGGING_PROPERTIES_DATA.getBytes("UTF-8"));
103             try {
104                 LogManager.getLogManager().readConfiguration(inStream);
105                 logger.config("ログ設定: LogManagerを設定しました。");
106             }
107             catch (IOException e) {
108                 logger.warning("ログ設定: LogManager設定の際に例外が発生しました。:" + e.toString());
109             }
110         }
111         catch (UnsupportedEncodingException e) {
112             logger.severe("ログ設定: UTF-8エンコーディングがサポートされていません。:" + e.toString());
113         }
114         finally {
115             try {
116                 if (inStream != null) inStream.close();
117             }
118             catch (IOException e) {
119                 logger.warning("ログ設定: ログ設定プロパティファイルのストリームクローズ時に例外が発生しました。:" + e.toString());
120             }
121         } 
122     }
123 }