リモートアプリケーションがログテーブルにログできるように、NLogのWEB APIコールを作成しています。私のコントローラでダブルログからNLogを停止する方法
私は(今健全性チェックなどのためにハードコードされた)があります。
public static void LogError(string msg, string ex, int appid, string machineName)
{
LogEventInfo logEvent = new LogEventInfo(LogLevel.Error, "Api Logger", "Another test msg");
logEvent.Properties["myMsg"] = msg;
logEvent.Properties["myEx"] = ex;
logEvent.Properties["myAppId"] = appid;
logEvent.Properties["myMachineName"] = machineName;
NLogManager.Instance.Log(logEvent);
}
:
NLogger.LogError("Some Error Message", "An exception", 5, "A computer name");
その後、私の静的のlogErrorメソッドは、この(私も)(LogEventInfoを試してみました)ように見えます
最後に、これはそのルールの私のコード最初の設定である(異なるデシベルターゲットと2つの他の人があります):
private static void ConfigureApiLog()
{
var dbApiErrorTarget = new DatabaseTarget
{
ConnectionString = ConnectionFactory.GetSqlConnection().ConnectionString,
CommandText = "usp_LogError",
CommandType = CommandType.StoredProcedure
};
dbApiErrorTarget.Parameters.Add(new DatabaseParameterInfo("@level",
new global::NLog.Layouts.SimpleLayout("${level}")));
dbApiErrorTarget.Parameters.Add(new DatabaseParameterInfo("@logger",
new global::NLog.Layouts.SimpleLayout("${logger}")));
dbApiErrorTarget.Parameters.Add(new DatabaseParameterInfo("@message",
new global::NLog.Layouts.SimpleLayout("${event-properties:item=myMsg}")));
dbApiErrorTarget.Parameters.Add(new DatabaseParameterInfo("@exception",
new global::NLog.Layouts.SimpleLayout("${event-properties:item=myEx}")));
dbApiErrorTarget.Parameters.Add(new DatabaseParameterInfo("@AppId",
new global::NLog.Layouts.SimpleLayout("${event-properties:item=myAppId}")));
dbApiErrorTarget.Parameters.Add(new DatabaseParameterInfo("@MachineName",
new global::NLog.Layouts.SimpleLayout("${event-properties:item=myMachineName}")));
Config.AddTarget("database", dbApiErrorTarget);
Config.LoggingRules.Add(new LoggingRule("*", LogLevel.Error, LogLevel.Fatal, dbApiErrorTarget));
}
私は、ロガーインスタンスへのログ呼び出しごとに1つのログを期待するが、私は2を取得していると私は、なぜ正確にはわからない:
Id Date Level Logger Message Exception AppId MachineName
1 2017-03-03 22:43:20.557 Error Api Logger Another test msg 0 mylocalmachine
2 2017-03-03 22:43:20.603 Error Api Logger Some Error Message An exception 5 A computer name
APPID 0は、私のAPIであり、5は、いくつかのリモートアプリです、ハードで符号化この点をPOCとする。
金曜日だとは限りませんが、コードの何が間違っているのかわかりません。どんな助けもありがとう!
'Config.LoggingRules'に他のルールが含まれていないか確認してください。私はそれが賭ける。 – Amy
そうです、それは累積していることが分かります:http://nlog-forum.1685105.n2.nabble.com/Log-generated-twice-in-logfile-td4682750.html。ルールは私が思ったように特定のターゲットではないと思います(なぜ私はそれらのターゲットを渡すのですか)。私は答えとして自由に投稿してください。私はそれを受け入れて、質問を閉じたものとしてマークします。私は、エラーmin maxを記録するという面倒なルールを設定し、もう一つは致命的なmin maxを記録するように設定しましたが、私の問題は理想的ではありませんでしたが、後でApiのカスタムレベルを作るでしょう。 – RandomUs1r
ルール*はターゲット固有のものにすることができます。 XMLを介して設定するルールには、 'writeTo'プロパティがあり、コンマで区切られたターゲットのリストがあります。また、そのプロパティを省略して、すべてのターゲットに書き込みます。私はあまりAPIの設定に精通していませんが、それはおそらく類似しています。デフォルトのルールはすべてのターゲットに書き込まれる可能性があります。 – Amy