2011-08-29 23 views
3

我想在幾列保存在數據庫中記錄的信息${message},在下面的例子中,如下所示:

我的記錄消息將遵循的路徑User|Action如:

logger.Info("John Doe|Logged in application"} 
logger.Info("Mike Doe|Deleted a file"} 

現在我想在一列保存User在我的數據庫,如logsTable.user,而在另一列Action,如logsTable.action

有什麼辦法解析${message}與正則表達式或其他規則(根據特定的字符分離消息,在我的例子中它是「|」)保存到參數(在我的情況下,我會比如第一部分消息去參數@user,第二部分參數@action)?

+0

你要求它解析SQL查詢信息?然後將sql標籤添加到您的問題。或者你是否需要一些C#來解析日誌字符串並輸出2個結果字符串? – mtijn

+0

@mtijn你的第二個想法。我想解析'$ {message}'文本來輸出參數中的一部分,而另一部分輸出到另一個參數中。但是這必須在_NLog.config_文件中完成。 – Otiel

回答

4

根據NLog documentation,將自己的屬性添加到日誌事件中應該不會太複雜。然後,你可以在正確的NLOG接口上做的擴展方法,寫這樣的事情(未編譯):

public void LogSomething(this ILog logger, string username, string message) 
{ 
    LogEventInfo myEvent = new LogEventInfo(LogLevel.Debug, "", message); 
    myEvent.LoggerName = logger.Name; 
    myEvent.Properties.Add("User", username); 
    logger.Log(myEvent); 
} 

現在你應該可以參考${event-context:item=User}

+0

工程很棒。在你的回答中只有一個錯誤:我必須在我的_NLog.config_文件中引用'$ {event-context:item = User}'。有關更多詳細信息,請參閱_http://nlog-project.org/wiki/Event-context_layout_renderer_。 – Otiel

+0

thx,我更新了帖子 – flq

+0

上面的答案和評論中的鏈接被破壞。 –