2

log4netを使用しています。

アプリケーションがエラーを出したとき、エラーのためだけにメールを送りたいです。どうすればいいですか?

私の設定ファイル:

<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でテストしようとしています:

[TestFixture]
public class TestClass
{
    [Test]
    public void Test()
    {
        ILog logger = LogManager.GetLogger(typeof(TestClass));
        logger.Error("test mail");
    }
}

私はおそらく何か間違ったことをしています。

編集:

<logger name="Yuartz.Tests.TestClass">
  <level value="INFO"></level>
  <appender-ref ref="SMTPAppender"></appender-ref>
</logger>
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");
        }
    }
}
4

3 に答える 3

8

この例では、タイプのフルネーム(TestClass)を使用してロガーを取得します。この名前を使用してロガーを解決するか、見つからない場合は新しいロガーを作成します。

ILog logger = LogManager.GetLogger(typeof(TestClass));

このコード行でSMTPAppenderロガーを返す場合は、構成で次のように名前を変更する必要があります。

<logger name="Yuartz.Tests.TestClass">
    ...
</logger>

構成を変更したくない場合は、実際の名前でロガーを取得する必要があります。以下は、「SMTPAppender」という名前のロガーを返します。

var logger = LogManager.GetLogger("SMTPAppender");

私のアドバイスは、構成内の名前を変更し、現在と同じようにタイプ別にロガーを取得し続けることです。

また、構成を必ずお読みください。

log4net.Config.XmlConfigurator.Configure();
于 2012-06-20T07:39:42.713 に答える
1

単体テストを実行する前に、Log4Net構成を読み取る必要があります。

この記事を参照してください単体テストでLog4Netを使用する方法

于 2012-06-20T07:47:16.153 に答える
0

どこかに電話していますかXmlConfigurator.Configure()?その場合、スパム対策がそれをキャッチするために単純なメールの送信が失敗することがあります。そのため、どこかにスパムとしてマークされているものがあるかどうかをシステム管理者に確認してください。

于 2012-06-20T07:38:45.037 に答える