001/*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016package org.opengion.fukurou.util;
017
018/**
019 * Logを書き込む為の LogWriter を呼び出す 簡易クラスです。
020 *
021 * Log の書き込み日時や,キー(識別ID)などを出力します。
022 *
023 * @og.group エラー処理
024 *
025 * @version  4.0
026 * @author   Kazuhiko Hasegawa
027 * @since    JDK5.0,
028 */
029public final class LogSender {
030
031        /** Log出力レベル FATAL  {@value} */
032        public static final int FATAL        = 4;
033        /** Log出力レベル ERROR  {@value} */
034        public static final int ERROR        = 3;
035        /** Log出力レベル WARNING  {@value} */
036        public static final int WARNING      = 2;
037        /** Log出力レベル INFORMATION  {@value} */
038        public static final int INFORMATION  = 1;
039        /** Log出力レベル DEBUG  {@value} */
040        public static final int DEBUG        = 0;
041
042        private static final int LOG_LEVEL              = ERROR;                // 初期値
043
044        private final String userId;
045        private final int    logLevel;
046        private String guiId = null;
047        private String msgId = null;
048        private StringBuilder buf = null;
049
050        /** システム依存の改行記号をセットします。 */
051        private static final String CR = System.getProperty("line.separator");
052
053        /**
054         * デフォルトコンストラクター
055         *
056         */
057        public LogSender() {
058                this( null,LOG_LEVEL );
059        }
060
061        /**
062         * ユーザーIDを与えてのコンストラクター
063         * ユーザーIDは,Logの識別IDとして使用します。
064         *
065         * @param   userId  ユーザーID
066         */
067        public LogSender( final String userId ) {
068                this( userId,LOG_LEVEL );
069        }
070
071        /**
072         * ユーザーIDと、ログレベルを与えてのコンストラクター
073         * ユーザーIDは,Logの識別IDとして使用します。
074         * ログレベルは,0 ~ 4 の数字で、大きくなるほど、出力条件はきつくなります。
075         * 0:DEBUG, 1:INFORMATION, 2:WARNING, 3:ERROR, 4:FATAL
076         * 初期値は、3:ERROR です。
077         *
078         * @param   userId  ユーザーID
079         * @param   logLbl  ログレベル(0 ~ 4 の数字)
080         */
081        public LogSender( final String userId,final int logLbl ) {
082                this.userId = userId;
083                logLevel = logLbl;
084                buf              = new StringBuilder( 200 ); // 4.1.0.1 (2008/01/23)
085
086                if( logLevel < DEBUG || logLevel > FATAL ) {
087                        String errMsg = "ログレベルの指定レベルが、間違っています。"
088                                                + "指定レベル=[" + logLbl + "]"
089                                                + "  指定可能レベル="
090                                                + DEBUG + " ~ " + FATAL ;
091                        throw new RuntimeException( errMsg );
092                }
093        }
094
095        /**
096         * 画面IDを設定します。
097         * ログ集計時の参考情報に使います。
098         *
099         * @param       guiId   画面ID
100         */
101        public void setGuiId( final String guiId ) {
102                this.guiId = guiId;
103        }
104
105        /**
106         * メッセージIDを設定します。
107         * ログ集計時の参考情報に使います。
108         *
109         * @param       msgId   メッセージID
110         */
111        public void setMsgId( final String msgId ) {
112                this.msgId = msgId;
113        }
114
115        /**
116         * Logレベルを取得します。
117         * ログレベルは, FATAL,ERROR,WARNING,INFORMATION,DEBUG から選べます。
118         *
119         * @return   Logレベル
120         */
121        public int getLogLevel() {
122                return logLevel;
123        }
124
125        /**
126         * LogをLogWriter に渡します。
127         * DEBUG ログレベルと,あらかじめ設定されているLogレベルを
128         * 比較して, ログレベルが小さい場合は,出力しません。
129         *
130         * @param   message メッセージ
131         */
132        public void debug( final String message ) {
133                if( DEBUG < logLevel ) { return; }
134                log( "DEBUG",message ) ;
135        }
136
137        /**
138         * LogをLogWriter に渡します。
139         * INFORMATION ログレベルと,あらかじめ設定されているLogレベルを
140         * 比較して, ログレベルが小さい場合は,出力しません。
141         *
142         * @param   message メッセージ
143         */
144        public void info( final String message ) {
145                if( INFORMATION < logLevel ) { return; }
146                log( "INFO",message ) ;
147        }
148
149        /**
150         * LogをLogWriter に渡します。
151         * WARNING ログレベルと,あらかじめ設定されているLogレベルを
152         * 比較して, ログレベルが小さい場合は,出力しません。
153         *
154         * @param   message メッセージ
155         */
156        public void warn( final String message ) {
157                if( WARNING < logLevel ) { return; }
158                log( "WARNING",message ) ;
159        }
160
161        /**
162         * LogをLogWriter に渡します。
163         * ERROR ログレベルと,あらかじめ設定されているLogレベルを
164         * 比較して, ログレベルが小さい場合は,出力しません。
165         *
166         * @param   message メッセージ
167         */
168        public void error( final String message ) {
169                if( ERROR < logLevel ) { return; }
170                log( "ERROR",message ) ;
171        }
172
173        /**
174         * LogをLogWriter に渡します。
175         * FATAL ログレベルと,あらかじめ設定されているLogレベルを
176         * 比較して, ログレベルが小さい場合は,出力しません。
177         *
178         * @param   message メッセージ
179         */
180        public void fatal( final String message ) {
181                if( FATAL < logLevel ) { return; }
182                log( "FATAL",message ) ;
183        }
184
185        /**
186         * LogをLogWriter に渡します。
187         * ただし,引数でセットしたLoglevelと,あらかじめ設定されているLogレベルを
188         * 比較して, 引数のLoglebelの方が小さい場合は,出力しません。
189         * ログレベルは, FATAL,ERROR,WARNING,INFORMATION,DEBUG から選べます。
190         *
191         * @og.rev 3.5.5.4 (2004/04/15) ログにエラーレベルを記述します。
192         * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正します。
193         *
194         * @param   level   ログレベル(FATAL,ERROR,WARNING,INFORMATION,DEBUG)
195         * @param   message メッセージ
196         */
197        private void log( final String level ,final String message ) {
198                buf.append( "[" );
199                buf.append( level );
200                buf.append( " : Time=" ).append( HybsDateUtil.getDate( "yyyy/MM/dd HH:mm:ss.SSS" ) );  // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
201                buf.append( " , User=" ).append( userId );
202                buf.append( " , Gui="  ).append( guiId );
203                buf.append( " , Msg="  ).append( msgId );
204                buf.append( "]");
205                buf.append( CR );
206                buf.append( message );
207        }
208
209        /**
210         * LogWriter を明示的にclose() します。
211         * LogWriter は,内部的に キャッシュを持っており,初めてアクセスされた場合に
212         * すでにオブジェクトが存在していれば,それを使い,無ければ 新たに追加モードで
213         * PrintWriter を作成します。
214         * よって,明示的にclose()する必要性は ほとんど有りません。
215         *
216         */
217        public void flush() {
218                LogWriter.log( buf.toString() );
219        }
220
221        /**
222         * LogWriter を明示的にclose() します。
223         * LogWriter は,内部的に キャッシュを持っており,初めてアクセスされた場合に
224         * すでにオブジェクトが存在していれば,それを使い,無ければ 新たに追加モードで
225         * PrintWriter を作成します。
226         * よって,明示的にclose()する必要性は ほとんど有りません。
227         *
228         */
229        public void close() {
230                LogWriter.close();
231        }
232}