[英]Nlog Email Target Programmatically
I have a program which uses the NLog logging library. 我有一个使用NLog日志记录库的程序。 I have a config file with targets and rules, I add programmatically some rules to write to a database.
我有一个包含目标和规则的配置文件,我以编程方式添加了一些规则以写入数据库。 Until now everything works fine.
到目前为止,一切正常。
Now I like to change the config programmatically. 现在,我想以编程方式更改配置。 I use
SimpleConfigurator
我使用
SimpleConfigurator
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Fatal)
my VB Code looks like that: 我的VB代码如下所示:
Dim target As MailTarget = New MailTarget()
target.Name = "Mailing"
target.Html = True
target.Body = "${message}"
target.SmtpServer = EmailSending.SendingServer
target.From = EmailSending.EmailSender
target.Encoding = System.Text.Encoding.UTF8
target.[To] = EmailSending.EmailReceiver
target.EnableSsl = EmailSending.EnableSSl
target.SmtpPort = EmailSending.sendingPort
target.SmtpUserName = EmailSending.EmailSender
target.SmtpPassword = EmailSending.EmailsenderPw
and now adding this stuff to the config: 现在将这些东西添加到配置中:
LogManager.Configuration.AddTarget("Mailing", target)
Dim MailTarget As NLog.Targets.Target = LogManager.Configuration.FindTargetByName("Mailing")
Dim loggerRule As NLog.Config.LoggingRule = New NLog.Config.LoggingRule("*", LogLevel.Fatal, MailTarget)
LogManager.Configuration.LoggingRules.Add(loggerRule)
The new target and rule works, but the "simpleconfigurator" clear previous configuration. 新的目标和规则有效,但是“ simpleconfigurator”清除了先前的配置。 How do I prevent that?
我该如何预防? Thanks for help!
感谢帮助!
Skip using the SimpleConfigurator
indeed, you can use LogManager.Configuration.LoggingRules.Add
(or the easier one LogManager.Configuration.AddRule(...)
) 确实,使用
SimpleConfigurator
跳过,您可以使用LogManager.Configuration.LoggingRules.Add
(或更简单的一个LogManager.Configuration.AddRule(...)
)
If auto reload is enabled, the programmatically added rules and targets will be clear. 如果启用了自动重新加载,则将清除以编程方式添加的规则和目标。 You need to use the events
ConfigurationChanged
event 您需要使用事件
ConfigurationChanged
事件
Something like this: 像这样:
VB.NET: VB.NET:
Private Sub Init()
UpdateNLogConfig(Nothing, Nothing)
AddHandler LogManager.ConfigurationReloaded, AddressOf UpdateNLogConfig
End Sub
Private Sub UpdateNLogConfig(sender As Object, e As LoggingConfigurationReloadedEventArgs)
Dim target = New MailTarget()
target.Name = "Mailing"
target.Html = True
target.Body = "${message}"
target.SmtpServer = EmailSending.SendingServer
target.From = EmailSending.EmailSender
target.Encoding = System.Text.Encoding.UTF8
target.[To] = EmailSending.EmailReceiver
target.EnableSsl = EmailSending.EnableSSl
target.SmtpPort = EmailSending.sendingPort
target.SmtpUserName = EmailSending.EmailSender
target.SmtpPassword = EmailSending.EmailsenderPw
LogManager.Configuration.AddTarget("Mailing", target)
LogManager.Configuration.AddRuleForOneLevel(LogLevel.Fatal, target)
'or LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Fatal,target));
End Sub
C# C#
private void Init()
{
UpdateNLogConfig(null, null);
LogManager.ConfigurationReloaded += UpdateNLogConfig;
}
private void UpdateNLogConfig(object sender, LoggingConfigurationReloadedEventArgs e)
{
var target = new MailTarget();
target.Name = "Mailing";
target.Html = true;
target.Body = "${message}";
target.SmtpServer = EmailSending.SendingServer;
target.From = EmailSending.EmailSender;
target.Encoding = System.Text.Encoding.UTF8;
target.To = EmailSending.EmailReceiver;
target.EnableSsl = EmailSending.EnableSSl;
target.SmtpPort = EmailSending.sendingPort;
target.SmtpUserName = EmailSending.EmailSender;
target.SmtpPassword = EmailSending.EmailsenderPw;
LogManager.Configuration.AddTarget("Mailing", target);
LogManager.Configuration.AddRuleForOneLevel(LogLevel.Fatal, target); //or LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Fatal,target));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.