gpt4 book ai didi

c# - log4net 将自定义数据映射到数据库中的字段

转载 作者:搜寻专家 更新时间:2023-10-30 23:47:39 25 4
gpt4 key购买 nike

我正在从 Enterprise Library 迁移,它的 Write() api 让我们可以指定类别、严重性、标题和优先级等内容。

对于这个具体示例,我想将用户提供的类别值记录到数据库字段中。例如考虑一个在线购物车,我想放入 [Cameras]、[Laptops]、[Routers]、[Account]、[Orders]、[Shipping] 等类别。

我知道 log4net 有一个属性字段,我们已经在配置中这样做以映射到数据库:

<parameter>
<parameterName value="@MachineName" />
<dbType value="String" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{log4net:HostName}" />
</layout>
</parameter>

我希望我的 Api 看起来像这样:

public class LogService
{
public LogService()
{
_log = LogManager.GetLogger(this.GetType());
}

public void WriteDebug(string message, string category)
{
_log.Debug(message);
}
}

我可以这样做吗,会安全吗?还是有别的办法?

public void WriteDebug(string message, string category)
{
ThreadContext.Properties["Category"] = category
_log.Debug(message);
ThreadContext.Properties["Category"] = "";
}

我们的应用程序代码库中确实有很多异步代码...所以我担心这根本不是线程安全的。

最佳答案

log4net.ThreadContext 对于多线程操作是安全的,并为要存储的线程特定信息提供了一个位置。您还可以在 PatternLayout 中指定线程 ID/名称以获得更好的洞察力。在同一布局中提供所有需要的属性,就像您指定的主机名一样。如果您想登录数据库,请使用 AdoNetAppender .

关于c# - log4net 将自定义数据映射到数据库中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26307789/

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