2010年12月7日火曜日

NLogを使ってみる

log4netからNLogへの移行を模索中。出力先をファイルにした場合に、最初のロギングまではファイルが生成されない模様。設定ファイルを読んだだけで0バイトのファイルができるlog4netより都合がいい。実行中のEnable,Disableも簡単。

スタートアップオブジェクトのMain()で一旦DisableLogging()を呼んでから、Settingsに従った初期化をする。

[STAThread]
static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);

  NLog.LogManager.DisableLogging();
  Properties.Settings appsettings = Properties.Settings.Default;
  if (String.IsNullOrEmpty(appsettings.LogFolder))
  {
    appsettings.LogFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +    System.IO.Path.DirectorySeparatorChar + "Log";
  }
  SetLocation(appsettings.LogFolder);
  if (appsettings.LogEnabled)
  {
    NLog.LogManager.EnableLogging();
  }

  Application.Run(new MainForm());
}

private static void SetLocation(string folder)
{
  NLog.Config.LoggingConfiguration config = NLog.LogManager.Configuration;
  if (config != null)
  {
    ReadOnlyCollection<NLog.Targets.Target> targets = config.AllTargets;
    foreach (NLog.Targets.Target target in targets)
    {
      NLog.Targets.FileTarget ft = target as NLog.Targets.FileTarget;
      if (ft != null)
      {
        string filename = Path.GetFileName(ft.FileName.Render(NLog.LogEventInfo.CreateNullEvent()));
        ft.FileName = NLog.Layouts.Layout.FromString(folder + Path.DirectorySeparatorChar + filename);
      }
    }
  }
}


2010年12月6日月曜日

.NET Framework 4から旧バージョン用のDLLを参照する

また忘れそうなのでメモ。
log4netとかSQLite.NETを参照する時に必要になる。
 http://msdn.microsoft.com/ja-jp/library/bbx34a2h.aspx
startup要素でuseLegacyV2RuntimeActivationPolicy属性をtrueにしろと。