Caliburn.Micro:Loggerの使い方
機能にLoggingって書いてあるので、ソースコードを検索してみた。
標準でSystem.Diagnostics.Debugを使ったLoggerが入っているので、BootStrapperで初期化すればいい。
public AppBootstrapper() { LogManager.GetLog = type => new DebugLog(type); this.Initialize(); }
ログ出力したいクラスの先頭で宣言すれば、使えるようになる。
public class ShellViewModel : Screen, IShell { static readonly ILog Log = LogManager.GetLog(typeof(ShellViewModel));
ここで出力してみると、、、
[ImportingConstructor] public ShellViewModel(IWindowManager windowManager, IEventAggregator eventAggregator) { Log.Info("★今ココ★");
こんな感じ。
いつも使っているNLogを使うには、NLog用のILogクラスを作ればいい。
作るほどの内容ではないけど。
public class NLogLogger : ILog { private readonly NLog.Logger logger; public NLogLogger(Type type) { logger = NLog.LogManager.GetLogger(type.Name); } public void Error(Exception exception) { logger.Error(exception); } public void Info(string format, params object[] args) { logger.Info(format, args); } public void Warn(string format, params object[] args) { logger.Warn(format, args); } }
んで、BootStrapperを、LogManager.GetLog = type => new NLogLogger(type);
こうする。
毎回クラス名を入力するのがめんどいので、NLogのGetCurrentClassLoggerが欲しい。
けど、LogManagerがstaticクラスなので、どうしようもないな。
こんなヘルバーで、なんとか。
public static class LogManagerHelper { public static ILog Factory() { var callerFrame = new StackFrame(1); return LogManager.GetLog(callerFrame.GetMethod().ReflectedType); } }
宣言が楽になった。
public class ShellViewModel : Screen, IShell { static readonly ILog Log = LogManagerHelper.Factory();
ログレベルが3つなのも何とかしたいけど、 ライブラリの改造以外に、いい方法が見つからない。