OSDN Git Service

from subversion repository
[jindolf/Jindolf.git] / src / main / java / jp / sourceforge / jindolf / LogWrapper.java
1 /*\r
2  * log wrapper\r
3  *\r
4  * Copyright(c) 2009 olyutorskii\r
5  * $Id: LogWrapper.java 888 2009-11-04 06:23:35Z olyutorskii $\r
6  */\r
7 \r
8 package jp.sourceforge.jindolf;\r
9 \r
10 import java.util.logging.Level;\r
11 import java.util.logging.LogRecord;\r
12 import java.util.logging.Logger;\r
13 \r
14 /**\r
15  * 各種ログAPIへの共通ラッパー。\r
16  * 現時点では java.util.logging のみサポート。\r
17  */\r
18 public class LogWrapper{\r
19 \r
20     private final Logger jre14Logger;\r
21 \r
22     /**\r
23      * コンストラクタ。\r
24      * @param logger ラップ対象のjava.util.loggingロガー\r
25      */\r
26     public LogWrapper(Logger logger){\r
27         super();\r
28         if(logger == null) throw new NullPointerException();\r
29         this.jre14Logger = logger;\r
30         return;\r
31     }\r
32 \r
33     /**\r
34      * ラップ対象のjava.util.loggingロガーを取得する。\r
35      * @return ラップ対象のjava.util.loggingロガー\r
36      */\r
37     public Logger getJre14Logger(){\r
38         return this.jre14Logger;\r
39     }\r
40 \r
41     /**\r
42      * ログレコードにスタックトレース情報を埋め込む。\r
43      * @param record ログレコード\r
44      */\r
45     private void fillStackInfo(LogRecord record){\r
46         Thread selfThread = Thread.currentThread();\r
47         StackTraceElement[] stacks = selfThread.getStackTrace();\r
48 \r
49         String thisName = this.getClass().getName();\r
50 \r
51         boolean foundMySelf = false;\r
52         for(StackTraceElement frame : stacks){\r
53             String frameClassName = frame.getClassName();\r
54 \r
55             if( ! foundMySelf && frameClassName.equals(thisName) ){\r
56                 foundMySelf = true;\r
57                 continue;\r
58             }\r
59 \r
60             if( foundMySelf &&  ! frameClassName.equals(thisName) ){\r
61                 record.setSourceClassName(frameClassName);\r
62                 record.setSourceMethodName(frame.getMethodName());\r
63                 break;\r
64             }\r
65         }\r
66 \r
67         return;\r
68     }\r
69 \r
70     /**\r
71      * java.util.loggingロガーへログ出力。\r
72      * @param level ログレベル\r
73      * @param msg メッセージ\r
74      */\r
75     private void logJre14(Level level, CharSequence msg){\r
76         logJre14(level, msg, null);\r
77         return;\r
78     }\r
79 \r
80     /**\r
81      * java.util.loggingロガーへログ出力。\r
82      * @param level ログレベル\r
83      * @param msg メッセージ\r
84      * @param thrown 例外\r
85      */\r
86     private void logJre14(Level level, CharSequence msg, Throwable thrown){\r
87         String message;\r
88         if(msg == null) message = null;\r
89         else            message = msg.toString();\r
90 \r
91         LogRecord record = new LogRecord(level, message);\r
92 \r
93         if(thrown != null){\r
94             record.setThrown(thrown);\r
95         }\r
96 \r
97         fillStackInfo(record);\r
98 \r
99         this.jre14Logger.log(record);\r
100 \r
101         return;\r
102     }\r
103 \r
104     /**\r
105      * 単純な情報を出力する。\r
106      * @param msg メッセージ\r
107      */\r
108     public void info(CharSequence msg){\r
109         logJre14(Level.INFO, msg);\r
110         return;\r
111     }\r
112 \r
113     /**\r
114      * 警告を出力する。\r
115      * @param msg メッセージ\r
116      */\r
117     public void warn(CharSequence msg){\r
118         warn(msg, null);\r
119         return;\r
120     }\r
121 \r
122     /**\r
123      * 警告を出力する。\r
124      * @param msg メッセージ\r
125      * @param thrown 例外\r
126      */\r
127     public void warn(CharSequence msg, Throwable thrown){\r
128         logJre14(Level.WARNING, msg, thrown);\r
129         return;\r
130     }\r
131 \r
132     /**\r
133      * 致命的な障害情報を出力する。\r
134      * @param msg メッセージ\r
135      */\r
136     public void fatal(CharSequence msg){\r
137         fatal(msg, null);\r
138         return;\r
139     }\r
140 \r
141     /**\r
142      * 致命的な障害情報を出力する。\r
143      * @param msg メッセージ\r
144      * @param thrown 例外\r
145      */\r
146     public void fatal(CharSequence msg, Throwable thrown){\r
147         logJre14(Level.SEVERE, msg, thrown);\r
148         return;\r
149     }\r
150 \r
151     // TODO Apache log4j サポート\r
152 }\r