[英]NLog won't store log in database
我需要將 NLog 添加到遺留的 asp.net 4.6.2 web 表單應用程序。 在全局類中,我正在為 SQL Server 數據庫中的數據庫目標配置記錄器
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
void Application_Start(object sender, EventArgs e)
{
var dbTarget = new DatabaseTarget("DbTarget")
{
DBProvider = "mssql",
CommandText = "INSERT INTO dbo.ApplicationLog (ApplicationId, Login, HostName, VisitedPage, PageURL, ReferrerURL, LogDate) values (@ApplicationId, @Login, @HostName, @VisitedPage, @PageURL, @ReferrerURL, @LogDate);",
ConnectionString = "Server=DBSERVER;Database=ApplicationLogging_Test;Trusted_Connection=True;"
};
dbTarget.Parameters.Add(new DatabaseParameterInfo("@ApplicationId", "${applicationId}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@Login", "${login}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@HostName", "${hostName}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@VisitedPage", "${visitedPage}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@PageURL", "${pageURL}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@ReferrerURL", "${referrerURL}"));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogDate", "${event-properties:LogDate}"));
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(dbTarget, LogLevel.Info);
}
void Session_Start(object sender, EventArgs e)
{
// Bunch of stuff omitted for brevity, all vars in object below are populating.
Logger.Info(message, new { ApplicationId = 1049, Login, HostName, VisitedPage, PageURL, ReferrerURL });
}
問題是我任意添加布局渲染器,因為我將它們誤解為將映射到我的 SQL 查詢的變量。 可以有自定義變量,但需要將它們添加為事件屬性。 布局渲染器受到控制,它們的列表可在此處獲得:
https://nlog-project.org/config/?tab=layout-renderers
固定代碼是:
dbTarget.Parameters.Add(new DatabaseParameterInfo("@ApplicationId", "${event-properties:applicationId}"));
我必須這樣添加 applicationId:
LogEventInfo theEvent = new LogEventInfo(LogLevel.Info, null, "Session_Start");
theEvent.Properties["applicationId"] = 1049;
Logger.Log(theEvent);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.