2012年9月3日月曜日

Loggerの設定とか

Loggerの設定ファイルを書くことがあったのでその辺りをちらほらと.

1. 設定フィルを準備
 
      設定ファイルの中身はこんな感じ
handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler.level=FINEST

java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

#出力の設定
#ログとして出力するログのレベル. このレベル以上のログだけ出力される.
java.util.logging.FileHandler.level=WARNING
#出力ファイル名. カレントディレクトリから見て場所を指定する.%uと%gは世代番号
#もちろん名前は自由
#この時, ディレクトリがないとエラーになるので, あらかじめ作っておくか,
#なかった場合ディレクトリを作成する処理を行うといい.
java.util.logging.FileHandler.pattern=Log/OutPut%u.%g.log
#フォーマッターの設定, 自作のフォーマッターの宣言も可能
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
#追記設定, trueなら追記, falseなら上書き
java.util.logging.FileHandler.append=true
#最大世代番号, この数だけログファイルを作る
java.util.logging.FileHandler.count=10
#一つのファイルに書き込める最大バイト数の設定
java.util.logging.FileHandler.limit=2000
3つ目のブロックで細かい設定を行う. 上の2ブロックは・・・HandlerとFormatter?


これをパスの通ったところ(src以下など)に置いておく
あとはLoggerを使う際にこの設定を呼んでやればいい

2. 設定を呼び出すクラスの作成

自分は参考にしたサイトのとおり, クラスを作ってみた

/**
 * ログ設定プロパティファイルのファイル名.
 */
protected static final String LOGGING_PROPERTIES = "logger.properties";
//Loggerのプロパティファイルの名前
//パスが通ったところに起きましょう


/**
 * static initializer によるログ設定の初期化.
 */
static {
 File directory = new File("Log");
 if (!directory.exists()) {
  Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)
    .warning("ログディレクトリがありません");
  if (directory.mkdir()) {
   Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).info("Log folder was made");
  } else {
   Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).warning("Log folder couldn't make");
  }
 }
  final Logger logger = Logger.getLogger("オリジナルの名前");
 // クラスパスの中から ログ設定プロパティファイルを取得
 InputStream inStream = "".class
   .getClassLoader().getResourceAsStream(
     LOGGING_PROPERTIES);
 if (inStream != null) {
  try {
   LogManager.getLogManager().readConfiguration(inStream);
  } catch (IOException e) {
   logger.warning("ログ設定のエラー");
  } finally {
   if (inStream != null) {
    try {
     inStream.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 } else {
  logger.info("設定ファイルがありません");
 }
}
//プロパティファイルのローダ
//staticイニシャライザで設定することで, 最初の一度だけ設定を行なう

public static Logger getLogger(){
        return Logger.getLogger("オリジナルの名前");
}
これらを設定した後,
Logger.getLogger("オリジナルの名前").info/warning/severeで呼ぶと設定は反映されている
オリジナルの名前には基本このクラス名を入れるとか


使う際はこのクラスのgetLoggerを呼ぶようにすると, 最初に呼ばれた際にのみstaticイニシャライザで設定ファイルを読み込む.

0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...