首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Log4Net SmtpAppender不发送邮件

Log4Net SmtpAppender不发送邮件
EN

Stack Overflow用户
提问于 2012-06-20 15:33:20
回答 3查看 8.4K关注 0票数 2

我正在使用log4net。

当应用程序出现错误时,我只想为错误发送电子邮件。我该怎么做呢?

我的配置文件:

代码语言:javascript
复制
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <log4net>
    <appender name="SMTPAppender" type="log4net.Appender.SMTPAppender">
      <authentication value="Basic" />
      <to value="xxx@xxx" />
      <from value="yyy@yyy" />
      <username value="user" />
      <password value="pass" />
      <subject value="ERROR" />
      <smtpHost value="host" />
      <port value="25" />
      <lossy value="true" />
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN" />
      </evaluator>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger %newline %message%newline%newline%newline" />
      </layout>
    </appender>
    <root>
      <level value="INFO"></level>
    </root>
    <logger name="SMTPAppender">
      <level value="INFO"></level>
      <appender-ref ref="SMTPAppender"></appender-ref>
    </logger>
  </log4net>
</configuration>

我正在尝试在NUnit中测试:

代码语言:javascript
复制
[TestFixture]
public class TestClass
{
    [Test]
    public void Test()
    {
        ILog logger = LogManager.GetLogger(typeof(TestClass));
        logger.Error("test mail");
    }
}

我可能做错了什么。

编辑:

代码语言:javascript
复制
<logger name="Yuartz.Tests.TestClass">
  <level value="INFO"></level>
  <appender-ref ref="SMTPAppender"></appender-ref>
</logger>
代码语言:javascript
复制
namespace Yuartz.Tests
{
    using log4net;
    using log4net.Config;

    [TestFixture]
    public class TestClass
    {
        [Test]
        public void Test()
        {
            XmlConfigurator.Configure();
            var logger = LogManager.GetLogger("SMTPAppender");
            logger.Error("test mail");
            logger.Info("test mail");
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-20 15:39:43

在您的示例中,您将使用类型的全名(TestClass)来检索记录器。它将使用此名称来解析记录器或在未找到时创建一个新记录器。

代码语言:javascript
复制
ILog logger = LogManager.GetLogger(typeof(TestClass));

如果希望此行代码返回SMTPAppender记录器,则需要在配置中将其重命名,如下所示:

代码语言:javascript
复制
<logger name="Yuartz.Tests.TestClass">
    ...
</logger>

如果您不想更改配置,则需要按其实际名称检索记录器。下面返回名为"SMTPAppender“的记录器。

代码语言:javascript
复制
var logger = LogManager.GetLogger("SMTPAppender");

我的建议是只需更改配置中的名称,并继续按类型检索记录器,就像您当前所做的那样。

还要确保您阅读了您的配置。

代码语言:javascript
复制
log4net.Config.XmlConfigurator.Configure();
票数 8
EN

Stack Overflow用户

发布于 2012-06-20 15:47:16

在单元测试运行之前,您需要读取Log4Net配置。

请参阅本文How to use Log4Net in Unittests

票数 1
EN

Stack Overflow用户

发布于 2012-06-20 15:38:45

你在打电话给某个地方XmlConfigurator.Configure()吗?如果是这样的话,有时发送邮件会失败,因为反垃圾邮件会捕捉到它,所以如果在某个地方有标记为垃圾邮件的东西,请务必与系统管理员进行检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11114829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档