gpt4 book ai didi

c# - 以编程方式将数据库参数添加到 NLog

转载 作者:行者123 更新时间:2023-11-30 17:43:27 28 4
gpt4 key购买 nike

我想通过 NLog 将消息记录到我的数据库中。假设我已经准备好数据库。

    var dbTarget = new DatabaseTarget();
dbTarget.Name = "test";
dbTarget.ConnectionString = loggerModel.connection_string;
dbTarget.CommandText = "insert into NlogLogTable(LogDate,LogLevel,LogLogger,LogMessage,LogMachineName,LogUserName,LogCallSite,LogThreadId,LogThreadName,LogException,LogStackTrace) values(@LogDate,@LogLevel,@LogLogger,@LogMessage,@LogMachineName,@LogUserName,@LogCallSite,@LogThreadId,@LogThreadName,@LogException,@LogStackTrace);";
var dateTime = DateTime.Now.ToString();
var dateTimeOffset = DateTimeOffset.Now.ToString();
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogDate", new NLog.Layouts.SimpleLayout("${LogDate}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogLevel", new NLog.Layouts.SimpleLayout("${LogLevel}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogLogger", new NLog.Layouts.SimpleLayout("${LogLogger}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogMessage", new NLog.Layouts.SimpleLayout("${LogMessage}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogMachineName", new NLog.Layouts.SimpleLayout("${LogMachineName}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogUserName", new NLog.Layouts.SimpleLayout("${LogUserName}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogCallSite", new NLog.Layouts.SimpleLayout("${LogCallSite}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogThreadId", new NLog.Layouts.SimpleLayout("${LogThreadId}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogThreadName", new NLog.Layouts.SimpleLayout("${LogThreadName}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogException", new NLog.Layouts.SimpleLayout("${LogException}")));
dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogStackTrace", new NLog.Layouts.SimpleLayout("${LogStackTrace}")));

问题是我不知道如何将参数传递给它。假设 LogDate 是今天的日期时间。我也有命令超时(毫秒)值,我也不确定如何传递它。

最佳答案

有多种选项可以传递 LogDate 和其他自定义值。

  1. 使用 ${event-properties:LogDate} 并将属性添加到您的 logEvent。 (参见 EventProperties-Layout-Renderer
  2. 使用 ${date} 布局渲染器,例如 ${date:format=yyyyMMdd}
  3. 使用 ${mdc:item=String}${gdc:item=String}

对于命令超时,您可以使用 2. 或 3.

所有可能的值都列在 the NLog wiki 上.

编辑:命令超时的代码

添加到目标:

dbTarget.Parameters.Add(new DatabaseParameterInfo("@LogDate", new NLog.Layouts.SimpleLayout("${event-properties:CommandTimeout}")));

写事件时(使用流畅的界面,见3)

var logger = LogManager.GetCurrentClassLogger();
logger.Info()
.Message("This is a test fluent message '{0}'.", DateTime.Now.Ticks)
.Property("CommandTimeout", YourCommandTimeout)
.Write();

关于c# - 以编程方式将数据库参数添加到 NLog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878255/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com