C# 如何使Log4Net发送一封设置了From值的电子邮件到当前用户的电子邮件地址
在网页上,它展示了如何设置SmtpAppender的示例 因此,我在app.config文件中添加了以下设置,并在记录警告或更高级别时成功发送电子邮件(这很好)C# 如何使Log4Net发送一封设置了From值的电子邮件到当前用户的电子邮件地址,c#,log4net,log4net-configuration,log4net-appender,C#,Log4net,Log4net Configuration,Log4net Appender,在网页上,它展示了如何设置SmtpAppender的示例 因此,我在app.config文件中添加了以下设置,并在记录警告或更高级别时成功发送电子邮件(这很好) 但是From值是用我的电子邮件地址硬编码的 我的应用程序是一个WinForms应用程序,它将被部署到用户PC上,因此知道哪个用户遇到警告/错误非常方便 是否可以设置Log4Net SmtpAppender,以便From值使用当前用户的电子邮件地址 谢谢你的帮助。有两个问题 1) 确定用户的电子邮件地址。如果它们是域的一部分,那么您可
但是From值是用我的电子邮件地址硬编码的
我的应用程序是一个WinForms应用程序,它将被部署到用户PC上,因此知道哪个用户遇到警告/错误非常方便
是否可以设置Log4Net SmtpAppender,以便From值使用当前用户的电子邮件地址
谢谢你的帮助。有两个问题
1) 确定用户的电子邮件地址。如果它们是域的一部分,那么您可以尝试
System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress
2) 。在Log4net中使用它。应该可以使用属性来实现这一点,例如
如果您从更改app.config
到
并在程序中添加一行以设置属性
log4net.GlobalContext.Properties["From"] =
System.DirectoryServices.AccountManagement.UserPrincipal.Current.EmailAddress ;
您可能还需要将缓冲区大小设置为1
为了安全起见,最好也将用户名作为错误消息的一部分
这种方法的一个缺点是,如果发件人地址丢失或不正确,电子邮件可能会丢失。经过大量的谷歌搜索,我最终发现了一个很棒的例子,展示了如何使用AppenderSkeleton抽象类作为基类创建新的自定义Smtp Appender
它很简单,可以更改,以便在运行时动态设置From属性。它还显示了如何传递Subject属性的模式,以便您的电子邮件主题可以包含记录的事件级别和其他信息
e、 g
以下是如何在运行时设置SMTP appender的简单示例。您可以设置Smtp appender的任何属性。将FindAppenderByName中的appender name参数设置为与配置中的appender name相同的名称
public static IAppender FindAppenderByName(string name)
{
ILoggerRepository rootRep = LogManager.GetRepository();
foreach (IAppender iApp in rootRep.GetAppenders())
{
if (string.Compare(name, iApp.Name, true) == 0)
{
return iApp;
}
}
return null;
}
private void SetupSmtpAppender()
{
IAppender appender = FindAppenderByName("Global.SmtpAppender");
SmtpAppender smtpAppender = (SmtpAppender)appender;
smtpAppender.From = "me@domain.com";
smtpAppender.Subject = "My subject";
smtpAppender.SmtpHost = "smtp@mydomain.com";
... setup more properties
}
这是log4net.config中的代码段:
<appender name="Global.SmtpAppender" type="log4net.Appender.SMTPAppender">
<threshold value="WARN" />
</appender>
在日志中包含用户名就足够了吗?您可以使用表达式%env{USERNAME}在subject或log message.handy中包含环境变量%USERNAME%。只有两行代码需要更改。注意:在调用log4net.Config.XmlConfigurator.Configure()之前,我必须设置属性;这是迄今为止我见过的针对这个特殊问题的最干净的解决方案。为此干杯。
<appender name="Global.SmtpAppender" type="log4net.Appender.SMTPAppender">
<threshold value="WARN" />
</appender>