2011-08-29 27 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

上面的答案和评论中的链接被破坏。 –