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
パラメーターの型を指定します。