gpt4 book ai didi

c# - 如何将 NLog 中的自定义字段记录到数据库?

转载 作者:IT王子 更新时间:2023-10-29 03:55:52 24 4
gpt4 key购买 nike

我目前在很多项目中使用 NLog。在某些情况下,我登录到数据库。

这是我想做的:

CREATE TABLE [dbo].[NLogEntries](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Origin] [nvarchar](100) NOT NULL,
[LogLevel] [nvarchar](20) NOT NULL,
[Message] [nvarchar](3600) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[OrderId] [int] NULL --Custom field!
)

和具有此目标的 NLog.config:

<target type="Database" name="database" connectionstring="Server=localhost;Database=NLog;Trusted_Connection=True;">
<commandText>
INSERT INTO NLogEntries ([Origin], [Message], [LogLevel],[CreatedOn],[OrderId]) VALUES (@Origin,@Message,@LogLevel,@Date, @OrderId);
</commandText>
<parameter name="@Date" layout="${date}"/>
<parameter name="@Origin" layout="${callsite}"/>
<parameter name="@LogLevel" layout="${level}"/>
<parameter name="@message" layout="${message}"/>
<parameter name="@OrderId" layout="${orderId}"/> <!-- custom field! -->
</target>

然后记录如下内容:

var logger = LogManager.GetCurrentClassLogger();
var orderId = 123;
logger.Debug("What is going on here", orderId);

有没有好的方法可以做到这一点并继续使用 NLog?或者当这些是要求时,我是否必须滚动我自己的记录器并跳过 NLog?

最佳答案

2022 年 2 月 11 日更新:较新版本的 NLOG 有其他解决方案 - 参见 Julian’s answer .

与其使用适用于全局静态数据且并发日志记录失败的 GDC,不如使用 EventProperties-Layout-Renderer允许传递特定于事件的自定义属性

LogEventInfo theEvent = new LogEventInfo(logLevel, "", message);
theEvent.Properties["OrderId"] =orderId;`

log.Log(theEvent);

... and in your NLog.config file:
${event-context:item=OrderId} -- obsolete
${event-properties:item=OrderId} -- renders OrderId

关于c# - 如何将 NLog 中的自定义字段记录到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424301/

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