问题标签 [nlog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4606 浏览

wpf - 如何在 WPF 应用程序中使用 NLog 的 RichTextBox 目标?

如何在 WPF 应用程序中使用 RichTextBox Target?我不想有一个单独的日志窗口,我希望所有日志消息都输出到 WPF 对话框中的richTextBox 中。

我曾尝试在内部使用带有 RichTextBox 框的 WindowsFormsHost,但这对我不起作用:NLog 还是打开了单独的 Windows 窗体。

0 投票
3 回答
40655 浏览

nlog - NLog 时间格式化

如何为 NLog 编写一个以毫秒为单位输出时间的布局11:32:08:123?我使用${date:format=yyyy-MM-dd HH\:mm\:ss}但我的日志需要更多的时间精度。

0 投票
1 回答
15852 浏览

.net - log4net.ThreadContext 和 log4net.LogicalThreadContext 有什么区别?

2014 年 11 月 18 日更新 - 在浏览 log4net 源存储库时,我发现 LogicalThreadContext 的实现在 2011 年 11 月被修改为它使用 CallContext.LogicalSetData 存储其属性(并使用 LogicalGetData 获取它们)。这很重要,因为这意味着 LogicalThreadContext 现在应该可以正常工作。存储在 LogicalThreadContext 中的任何数据都应该“流向”任何子线程或任务。这与 ThreadContext(以及 LogicalThreadContext 的旧实现)相比,其中存储在上下文中的数据将保持在当前线程的本地,并且不会流向子线程/任务。

如果你有兴趣,这里是变化:

http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Util/LogicalThreadContextProperties.cs?r1=1165341&r2=1207948&diff_format=h

希望遇到这个老问题的人会发现这些信息很有用。

log4net 提供了两个不同的“线程上下文”对象: ThreadContextLogicalThreadContext,每个对象都有一个属性包,Properties。ThreadContext 有一个ThreadContextProperties包,而 LogicalThreadContext 有一个LogicalThreadContextProperties包。

ThreadContext 可能更常被称为“MDC”。LogicalContext 可能更常被称为“LDC”。我将在这篇文章的其余部分使用简称。

MDC.Properties 使用System.Threading.Thread.SetData实现,而 LDC.Properties 使用System.Runtime.Remoting.Messaging.CallContext.SetData实现。

为了比较,NLog 只公开“MDC”(现在称为 MappedDiagnosticContext)来存储线程本地属性。NLog的实现使用System.Threading.Thread.SetData,所以它的实现和log4net的一样。

在 log4net 和 NLog 中,“MDC”属性都存储在字典中,而字典本身存储在线程本地存储中。

在这种情况下,将字典存储在用 [ThreadStatic] 修饰的类成员变量中是否等效?

使用 .NET 4.0 的新 ThreadLocal 类的等效(或类似)声明是什么?

最终,LDC 和 MDC 之间真正的、实际的区别是什么?即使在阅读了上面链接的 MSDN 主题之后,我也不清楚。你什么时候真的会使用其中一个?似乎我在 log4net 和上下文中看到的绝大多数参考/示例都是针对 GDC(全局 - 我理解)、NDC(嵌套 - 我也理解)和 MDC。我在谷歌搜索时可以找到的大多数 LDC(或 LogicalThreadContext)参考资料都与签入 log4net 源代码存储库有关,而不是实际使用。LDC 几乎从不提出问题或示例。

我确实发现这个链接提供了一些关于与 log4net 开发人员之一 Nicko Cadell 的区别的非常好的信息,但我仍然不清楚。

与 log4net 没有直接关系的一个更大的问题是 Thread.SetData 和 CallContext.SetData 之间的实际区别是什么?

根据CallContext MSDN 文章,CallContext 数据可以传播到另一个 AppDomain。要传播,存储在 CallContext 中的数据项必须公开ILogicalThreadAffinative接口。所以,这似乎是 Thread.SetData 和 CallContext 之间的区别之一。

根据 Nicko Cadell 链接,log4net 没有实现 ILogicalThreadAffinative,因此不会传播 LDC 属性。

也许这里有足够的东西我应该能够回答我自己的问题,也许不是。我仍在努力理解。

如果你使用 log4net,你每个人都使用 MDC、LDC 吗?如果你使用 MDC,是不是因为大多数“现实世界”的例子似乎都在使用它?如果您使用 LDC,您有使用它的具体原因吗?如果你同时使用,你如何选择何时使用哪个?

请注意,我看过一些关于 MDC(可能是 LDC)的文章,由于线程切换,可能无法在 ASP.net 应用程序中正常工作。我对这个问题不是特别感兴趣,因为我不在 ASP.net 中工作。

实际上,我在这里找到了一些关于 SO 的有用帖子,它们可能有助于讨论:

在 .NET 中使用线程本地存储的最佳实践是什么?

.Net:逻辑线程和线程本地存储?

提前致谢!

0 投票
2 回答
7058 浏览

logging - Custom NLog LogLevels or multiple loggers per class?

How can I separate my normal logging/auditing from my security logging/auditing? The Windows Event Log makes this distinction with Application Events and Security Events.

If I could create a custom LogLevel, e.g. LogLevel.AuditSuccess or LogLevel.AuditFailure, then I could set my config file rules to equal these and output those events. For example,

Then I could just use 1 table, record the "Level" in a column, and be able to search and sort my data using this column info. (I don't think we can create a custom LogLevel.)

One workaround that I come up with is to use 2 loggers per class--with each logger being saved to a different target. However, this seems like overkill, especially if I need to add additional similar target types.

With this, I could create two database targets--each with a different table--and then create 1 rule for each destination target.

Any suggestions?

0 投票
2 回答
29878 浏览

c# - NLog 性能

日志记录的预期开销应该是多少?我试过这个例子

MAXTEST 值为 100,500,1000, 5000

结果在 MAXTEST,noLogging, Logging

诚然,人们可能永远不会记录这么多的数据,但这是人们期望的性能表现吗?

我也尝试在配置中使用 asyncwrapper

0 投票
2 回答
2587 浏览

c# - 使用 NLog 通过 WebService 记录自定义类

问题如下:

在日志事件中,我想将我的自定义对象(比如说以某种方式包装日志事件的 LogMessage)发送到我的 Web 服务。可以像 log4net 中的 appenders 一样工作,或者在 Nlog 中是否有这种东西?或者我该如何做这种 NLog 方式?

注意:我正在使用 WebService 目标包装器(如果这有任何帮助)。

0 投票
1 回答
2873 浏览

vb.net - NLog 未登录简单应用程序

我正在尝试使用以下代码使用 Nlog 1.0 实现一个简单的日志

以及下面的 NLog.config。

该应用程序似乎没有记录,有什么想法吗?

干杯

伊恩

0 投票
3 回答
885 浏览

asp.net - NHibernate 与 NLog 或 Log4Net 或其他什么?

我想在我的项目中使用 NHibernate,它默认带有 log4net。

在我看来,选择 Nlog 将是一个更明智的选择,因为它仍在更新,另一方面,log4net 已经完全过时了。

是否有最佳选择,因为我真的不相信在我的应用程序中使用过时的技术。另一方面,它是在 nhibernate 的包中交付的......

欢迎提出建议!

* 用“不再更新”替换过时的

0 投票
1 回答
8517 浏览

nlog - 匹配特定 NLog 记录器名称的问题

我在中配置了两个规则NLog.config

我正在尝试使用以下代码写入第一个:

但它一直落入第二条规则。我原以为eventInfo.LoggerName = "Model";会直接将其发送到第一条规则?

0 投票
1 回答
6966 浏览

logging - 自定义 log4net 属性 PatternLayoutConverter(带索引)

是否可以创建一个允许配置“索引”值的 log4net 自定义 PatternLayoutConverter?我知道允许您编写如下代码的“属性”转换字符串:

并像这样指定:

该值应包含在输出中。

如果我要记录的值在其他“字典”中怎么办?我想我可以编写一些逻辑来将这些值从字典复制到 log4net 上下文之一,然后只使用内置%property令牌。如果我希望 log4net 根据配置文件中指定的索引值直接从我自己的“字典”中记录值怎么办?

我可以编写自己的 PatternLayoutConverter 来配置这样的东西吗:

然后从我自己的“字典”中拉出对应的“ID”值?

对于任何感兴趣的人,用 NLog 做同样的事情很容易:

并像这样配置:

告诉 NLog 任何带有扩展的程序集:

在布局中使用“indexed”属性:

在这个例子中,我实际上使用 NLog 的 GDC 对象作为我的“字典”,但我展示了我如何能够编写自己的“可索引”LayoutRenderer(或多或少相当于 log4net 的 PatternLayoutConverter)来访问由值索引的值配置文件。

[编辑] 我得到了我想要的答案。我在这里包含了我的示例 PatternLayoutRenderer 的代码。在我的测试中,我的主表单类中有一个静态字典,我可以在其中存储“应用程序设置”。我创建了一个 PatternLayoutConverter,它可以接受一个键作为参数,以便转换器可以在字典中查找正确的值。我可能能够使用 log4net(或 NLog)上下文对象实现相同的功能,但在我们的应用程序中,我们可能有一些设置或会话信息,应用程序将用于其他目的,我们希望能够将其添加到记录输出。由于它已经在查找结构中,因此能够直接引用数据而不是必须显式地将其复制到 log4net(或 NLog 上下文)中会很好。

无论如何,这是代码:

布局配置: