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