プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2018/04/18

NLog の MethodCall を使用する

event_note2018/04/17 23:46

NLog で指定できるターゲットの一つである MethodCall を使用してみました。

MethodCall を使用することで、NLog の出力結果を受け取って処理することができます。

私の場合は、NLog の出力結果を WebSocket で通知したかったので使ってみました。

環境

  • Visual Studio 2017
  • .NET Core 2.0

NLog のインストールや設定は省略します。

コード例

先にコードの例を示します。

コールしたいメソッド

namespace MyApplication
{
    public class MethodCallTest
    {
        public static void Foo(string date, string level, string message)
        {
            Console.WriteLine($"MethodCallTest:{date} [{level}] {message}");
        }
    }
}

NLog.config

targets に以下のように記述します。

<target xsi:type="MethodCall"
        name="m"
        className="MyApplication.MethodCallTest, MyApplication"
        methodName="Foo">
  <parameter layout="${longdate}" />
  <parameter layout="${level:padding=-5:uppercase=true}" />
  <parameter layout="${message}" />
</target>

あとは rules で以下のように指定します。

<rules>
  <logger name="*" minlevel="Debug" writeTo="m" />
</rules>

簡単な解説

GitHub に全て載っていますが、簡単に解説します。

target の設定

xsi:type

MethodCall を指定します。

name

target の名前です。rules でターゲットを指定するときに使用します。

methodName

メソッド名です。
対象のメソッドは public かつ static でなければなりません。

className

クラス名です。
以下のようにアセンブリ名を含めて記述する必要があります。

名前空間.クラス名, アセンブリ名

parameter の設定

layout

パラメーターの値を計算するために使用するレイアウトです。
使用できるレイアウトはこちらで定義されています。

name

パラメーターの名前を指定します。

type

パラメーターの型を指定します。

参考 URL