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}