前提・実現したいこと
ログ出力をする共通クラスの設計について悩んでいます。
発生している問題
下記ソースのクラスを作成し、 呼び出し元のクラスでログ出力時に次のメソッドと引数を渡してログ出力することを考えています。 クラス:LogUtil メソッド:outLog 引数:fileName(ファイル名), ←呼び出し元クラスが変われば変わる logLevel(出力時のログレベル), ←呼び出し元クラスでDEBUG or INFO or WARN or ERRORを設定 logClass(log4j2.xmlのロガー名), ←呼び出し元クラスでA or Bを設定 msg(出力するメッセージ) ←呼び出し元クラスで出力したいメッセージを設定 今の時点だと呼び出し元で毎度当該クラスをnewしてインスタンスを生成するのは効率的ではないとと考えています。 staticなメソッドにすることで毎度当該クラスをnewしなくてもよくなることが分かったのですが、 outLogメソッドをそのままstaticにしても問題ないか分からなくなってしまいました。 クラスの設計は初めてのためアドバイスなどございましたら、よろしくお願いいたします。
該当のソースコード
java
1package sub; 2 3import org.apache.logging.log4j.LogManager; 4import org.apache.logging.log4j.Logger; 5 6public class LogUtil { 7 //定数の設定 8 static final String LOGCLASS_A = "A"; 9 static final String LOGCLASS_B = "B"; 10 11 static final String LOGGER_A = "Alogger"; 12 static final String LOGGER_B = "Blogger"; 13 14 static final String LOGLEVEL_D = "DEBUG"; 15 static final String LOGLEVEL_I = "INFO"; 16 static final String LOGLEVEL_W = "WARN"; 17 static final String LOGLEVEL_E = "ERROR"; 18 19 //コンストラクタ 20 public LogUtil() {} 21 22 public int outLog(String fileName, String logLevel, String logClass, String msg) { 23 24 //処理結果 25 int rc = 0; 26 27 //ファイル名の設定 28 System.setProperty("logFileName",fileName); 29 30 try { 31 //loggerの取得 32 Logger logger = null; 33 34 switch(logClass) { 35 case LOGCLASS_A: 36 logger = LogManager.getLogger(LOGGER_A); 37 break; 38 case LOGCLASS_B: 39 logger = LogManager.getLogger(LOGGER_B); 40 break; 41 } 42 43 //ログ出力 44 this.writeLogMsg(logger, logLevel, msg); 45 46 return rc; 47 48 }catch(Throwable T) { 49 return rc = 9; 50 } 51 } 52 53 //ログ書き出し 54 private void writeLogMsg(Logger logger, String logLevel, String msg) throws Throwable { 55 switch(logLevel) { 56 case LOGLEVEL_D: 57 logger.debug(msg); 58 break; 59 case LOGLEVEL_I: 60 logger.info(msg); 61 break; 62 case LOGLEVEL_W: 63 logger.warn(msg); 64 break; 65 case LOGLEVEL_E: 66 logger.error(msg); 67 break; 68 } 69 } 70}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/04 12:05