gpt4 book ai didi

.net - NLog FindTargetByName 返回 Null

转载 作者:行者123 更新时间:2023-12-04 03:01:52 26 4
gpt4 key购买 nike

我在 VB.NET 4.5 Visual Studio 2013 解决方案中使用 NLog 4.4.12(撰写本文时的最新版本)。当我尝试检索 MailTarget 以便以编程方式修改配置时(例如,设置用户的服务器详细信息、“收件人”地址等),我可以使用

Dim oTargets As ReadOnlyCollection(Of Targets.Target) = LogManager.Configuration.AllTargets

这将返回我配置的两个目标:DatatbaseTarget (index = 0, Name = "Database_Target") 和 MailTarget (index = 1, Name = "Email_Target").

但是如果我尝试使用

Dim oTarget as Targets.Target = LogManager.Configuration.FindTargetByName("Email_Target")

Dim oTarget As Targets.MailTarget = LogManager.Configuration.FindTargetByName(Of Targets.MailTarget)("Email_Target")

甚至

Dim oTarget as Targets.Target = LogManager.Configuration.FindTargetByName(oTargets(1).Name)

我得到空值。

我通常在错误列表、GitHub 和在线搜索解决方案,但一无所获,所以我可能做错了什么。但我看不出它是什么。有人有什么想法吗?

最佳答案

根据 Rolf 的回复,这是完整的问题。 注意:当您阅读本文时,这个问题(或混淆)可能会得到解决。

问题是我正确地创建了 Targets 并在它们的参数中包含了一个名称值,例如:

Dim oConfig As LoggingConfiguration = New LoggingConfiguration
Dim oMailTarget As New MailTarget
With oMailTarget
.Name = "Email_Target"
.SmtpServer = "mail.mydomain.com"
.EnableSsl = True
...
oConfig.AddTarget("Email", oMailTarget)

但是最后一行,我在其中添加了带有可选名称(“Email”)的 oMailTarget,可能会覆盖 oMailTarget.Name 值。

将最后一行简单地更改为:

oConfig.AddTarget(oMailTarget)

解决了问题。

如果是我,我会转储 AddTarget(Name, Target) 重载,这样如果你想命名一个 Target,它必须在 >Target 对象本身。只是我的 2c。

感谢 Rolf 的帮助。

关于.net - NLog FindTargetByName 返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48469857/

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