问题标签 [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.
wpf - 如何在 WPF 应用程序中使用 NLog 的 RichTextBox 目标?
如何在 WPF 应用程序中使用 RichTextBox Target?我不想有一个单独的日志窗口,我希望所有日志消息都输出到 WPF 对话框中的richTextBox 中。
我曾尝试在内部使用带有 RichTextBox 框的 WindowsFormsHost,但这对我不起作用:NLog 还是打开了单独的 Windows 窗体。
nlog - NLog 时间格式化
如何为 NLog 编写一个以毫秒为单位输出时间的布局11:32:08:123
?我使用${date:format=yyyy-MM-dd HH\:mm\:ss}
但我的日志需要更多的时间精度。
.net - log4net.ThreadContext 和 log4net.LogicalThreadContext 有什么区别?
2014 年 11 月 18 日更新 - 在浏览 log4net 源存储库时,我发现 LogicalThreadContext 的实现在 2011 年 11 月被修改为它使用 CallContext.LogicalSetData 存储其属性(并使用 LogicalGetData 获取它们)。这很重要,因为这意味着 LogicalThreadContext 现在应该可以正常工作。存储在 LogicalThreadContext 中的任何数据都应该“流向”任何子线程或任务。这与 ThreadContext(以及 LogicalThreadContext 的旧实现)相比,其中存储在上下文中的数据将保持在当前线程的本地,并且不会流向子线程/任务。
如果你有兴趣,这里是变化:
希望遇到这个老问题的人会发现这些信息很有用。
log4net 提供了两个不同的“线程上下文”对象: ThreadContext和LogicalThreadContext,每个对象都有一个属性包,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 的有用帖子,它们可能有助于讨论:
提前致谢!
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?
c# - NLog 性能
日志记录的预期开销应该是多少?我试过这个例子
MAXTEST 值为 100,500,1000, 5000
结果在 MAXTEST,noLogging, Logging
诚然,人们可能永远不会记录这么多的数据,但这是人们期望的性能表现吗?
我也尝试在配置中使用 asyncwrapper
c# - 使用 NLog 通过 WebService 记录自定义类
问题如下:
在日志事件中,我想将我的自定义对象(比如说以某种方式包装日志事件的 LogMessage)发送到我的 Web 服务。可以像 log4net 中的 appenders 一样工作,或者在 Nlog 中是否有这种东西?或者我该如何做这种 NLog 方式?
注意:我正在使用 WebService 目标包装器(如果这有任何帮助)。
vb.net - NLog 未登录简单应用程序
我正在尝试使用以下代码使用 Nlog 1.0 实现一个简单的日志
以及下面的 NLog.config。
该应用程序似乎没有记录,有什么想法吗?
干杯
伊恩
asp.net - NHibernate 与 NLog 或 Log4Net 或其他什么?
我想在我的项目中使用 NHibernate,它默认带有 log4net。
在我看来,选择 Nlog 将是一个更明智的选择,因为它仍在更新,另一方面,log4net 已经完全过时了。
是否有最佳选择,因为我真的不相信在我的应用程序中使用过时的技术。另一方面,它是在 nhibernate 的包中交付的......
欢迎提出建议!
* 用“不再更新”替换过时的
nlog - 匹配特定 NLog 记录器名称的问题
我在中配置了两个规则NLog.config
:
我正在尝试使用以下代码写入第一个:
但它一直落入第二条规则。我原以为eventInfo.LoggerName = "Model";
会直接将其发送到第一条规则?
logging - 自定义 log4net 属性 PatternLayoutConverter(带索引)
是否可以创建一个允许配置“索引”值的 log4net 自定义 PatternLayoutConverter?我知道允许您编写如下代码的“属性”转换字符串:
并像这样指定:
该值应包含在输出中。
如果我要记录的值在其他“字典”中怎么办?我想我可以编写一些逻辑来将这些值从字典复制到 log4net 上下文之一,然后只使用内置%property
令牌。如果我希望 log4net 根据配置文件中指定的索引值直接从我自己的“字典”中记录值怎么办?
我可以编写自己的 PatternLayoutConverter 来配置这样的东西吗:
然后从我自己的“字典”中拉出对应的“ID”值?
对于任何感兴趣的人,用 NLog 做同样的事情很容易:
并像这样配置:
告诉 NLog 任何带有扩展的程序集:
在布局中使用“indexed”属性:
在这个例子中,我实际上使用 NLog 的 GDC 对象作为我的“字典”,但我展示了我如何能够编写自己的“可索引”LayoutRenderer(或多或少相当于 log4net 的 PatternLayoutConverter)来访问由值索引的值配置文件。
[编辑] 我得到了我想要的答案。我在这里包含了我的示例 PatternLayoutRenderer 的代码。在我的测试中,我的主表单类中有一个静态字典,我可以在其中存储“应用程序设置”。我创建了一个 PatternLayoutConverter,它可以接受一个键作为参数,以便转换器可以在字典中查找正确的值。我可能能够使用 log4net(或 NLog)上下文对象实现相同的功能,但在我们的应用程序中,我们可能有一些设置或会话信息,应用程序将用于其他目的,我们希望能够将其添加到记录输出。由于它已经在查找结构中,因此能够直接引用数据而不是必须显式地将其复制到 log4net(或 NLog 上下文)中会很好。
无论如何,这是代码:
布局配置: