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}