Xamarin

NLog を使って Xamarin.Forms からログ出力する方法 補足

はじめに

この記事は、NLog を使って Xamarin.Forms からログ出力する方法 の補足記事です。

背景

先日、元記事の中で公開している GitHub のリポジトリに Issue が追加されていました。

  • File logging doesn't create file
    • NLog の 4.3.11 で動作確認を行った時点では、ログファイルは生成されていた
    • NLog 4.5.4 で動作確認したところ、確かにログファイルが生成されていませんでした

回避策

NLog 4.5.4 では、構成ファイルを自動的に読み込む機能が動いていないようです。NLog の GitHub のリポジトリに Issue が上がっていないようなので、Xamarin 固有の不具合かもしれません。
回避策する方法は、明示的に config ファイルを読み込む処理を記述することです。

  1. XmlLoggingConfiguration クラスのコンストラクタに config ファイルのパスを渡す
  2. LogManager クラスの Configuration プロパティに 1. で生成したインスタンスを設定する

以下にコードの例を記載します。

var configName = string.Empty;
#if __ANDROID__
configName = "assets/NLog.config";
#endif
#if __IOS__
configName = "NLog.config";
#endif
LogManager.Configuration = new XmlLoggingConfiguration(configName);
_logger = LogManager.GetCurrentClassLogger();

補足事項まとめ

  • NLog の構成ファイルを自動的に読み込む機能が動かなくなっている模様
  • 明示的に config ファイルを読み込む処理を記述する必要がある

サンプルコード

修正したサンプルを GitHub に公開しています。