
nablarch.core.log.LoggerManager Maven / Gradle / Ivy
The newest version!
package nablarch.core.log;
import nablarch.core.log.LogUtil.ObjectCreator;
import nablarch.core.util.ObjectUtil;
import nablarch.core.util.annotation.Published;
/**
* ログ出力機能の全体を取りまとめるクラス。
*
* クラスローダ毎に設定で指定された{@link LoggerFactory}の生成、保持を行う。
* ログ出力機能の実装に依存する初期処理、終了処理、{@link Logger}の生成は{@link LoggerFactory}に委譲する。
* クラスローダ毎に{@link LoggerFactory}を保持するのは、クラスローダ階層により生じる問題に対応するためである。
*
* 使用する{@link LoggerFactory}は、プロパティファイルに設定する。
* プロパティファイルのパスは、システムプロパティを使用して、”nablarch.log.filePath”をキーにファイルパスを指定する。
* このファイルパスは、クラスパスとファイルシステム上のパスのどちらを指定しても良い。
* ファイルパスの指定方法は、{@link nablarch.core.util.FileUtil#getResource(String)}を参照すること。
* システムプロパティを指定しなかった場合は、クラスパス直下のlog.propertiesを使用する。
* プロパティファイルが存在しない場合は、例外を送出する。
*
* ログの出力先によってはリソースの確保と解放が必要となるため、本クラスは初期処理と終了処理を行う。
* 初期処理は、初回の{@link Logger}の取得が行われるタイミングで本クラスが内部的に実行する。
* 終了処理は、フレームワーク側で実行するタイミングを判断できないので、
* ログの出力要求を行うアプリケーション毎にアプリケーションの終了時に{@link #terminate()}メソッドを呼び出すこと。
* アプリケーションの終了時とは、例えばWebアプリケーションの場合であれば、
* ServletContextListener#contextDestroyedメソッドが呼ばれるタイミングを想定している。
*
* @author Kiyohito Itoh
* @see nablarch.core.log.LoggerFactory
* @see Logger
*/
public final class LoggerManager {
/** 隠蔽コンストラクタ。 */
private LoggerManager() {
}
/** LoggerFactoryを生成する{@link ObjectCreator} */
private static final ObjectCreator LOGGER_FACTORY_CREATOR = new ObjectCreator() {
public LoggerFactory create() {
String filePath = System.getProperty("nablarch.log.filePath", "classpath:log.properties");
LogSettings settings = new LogSettings(filePath);
LoggerFactory loggerFactory = ObjectUtil.createInstance(settings.getRequiredProp("loggerFactory.className"));
loggerFactory.initialize(settings);
return loggerFactory;
}
};
/**
* ログ出力の終了処理を行う。
*
* クラスローダに紐付く全てのオブジェクトを解放する。
*
* @see nablarch.core.log.LoggerFactory#terminate()
*/
@Published(tag = "architect")
public static void terminate() {
LoggerFactory loggerFactory = LogUtil.removeObjectBoundToContextClassLoader(LOGGER_FACTORY_CREATOR);
if (loggerFactory != null) {
loggerFactory.terminate();
}
LogUtil.removeAllObjectsBoundToContextClassLoader();
}
/**
* ロガーを取得する。
*
* 指定されたクラスのFQCNを指定して{@link #get(String)}メソッドを呼び出す。
*
* @param clazz ロガー名に使用するクラス。クラスのFQCNをロガー名に使用する。
* @return ロガー
*/
@Published
public static Logger get(Class> clazz) {
return get(clazz.getName());
}
/**
* ロガーを取得する。
*
* クラスローダに紐付く{@link LoggerFactory}から取得したロガーを返す。
*
* ロガー名に対応するロガーが見つからない場合は、何も処理しないロガーを返す。
*
* @param name ロガー名
* @return ロガー
*/
@Published
public static Logger get(String name) {
LoggerFactory loggerFactory = LogUtil.getObjectBoundToClassLoader(LOGGER_FACTORY_CREATOR);
return loggerFactory.get(name);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy