    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}