log4net 2.0.8 nuget中缺少SmtpAppender吗?

Mir*_*rek 5 c# log4net .net-core .net-core-2.0

我为.NET Core 2.0创建了一个控制台应用程序,并安装了log4net 2.0.8 nuget

我想使用SmtpAppender,但库中不存在

这是我的log4net配置

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
   <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="test@test.com" />
    <from value="test@test.com" />
    <subject type="log4net.Util.PatternString" value="Message logged" />
    <smtpHost value="localhost" />
    <authentication value="None" />
    <port value="25" />
    <bufferSize value="1" />
    <lossy value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%utcdate [%level] - %message%newline%exception" />
    </layout>
  </appender>
  <root>
    <level value="All" />
    <appender-ref ref="SmtpAppender" />
  </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

这是Program.cs

namespace Log4NetTest
{
    public class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            XmlDocument log4netConfig = new XmlDocument();
            log4netConfig.Load(File.OpenRead("log4net.config"));

            var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(), 
                typeof(log4net.Repository.Hierarchy.Hierarchy));

            log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
            log.Info("TEST INFO LOG");
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行该应用程序时,我希望一封包含“ TEST INFO LOG”消息的电子邮件发送到localhost,但是log4net会将其输出到控制台:

log4net:ERROR Could not create Appender [SmtpAppender] of type [log4net.Appender.SmtpAppender]. Reported error follows.
System.TypeLoadException: Could not load type 'log4net.Appender.SmtpAppender' from assembly 'log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a'.
   at System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type, ObjectHandleOnStack keepAlive)
   at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
log4net:ERROR Appender named [SmtpAppender] not found.
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)

SmtpAppender类型甚至没有出现在对象浏览器中。有SmtpPickupDirAppender,但这不是我想要使用的。

我想念什么吗?经过一番搜索,我没有发现任何人遇到过此问题,log4net 2.0.8已有7个月的历史,并且下载了milion次。

小智 3

由于.Net Core 不支持内置的 SmtpAppender ,因此您可以轻松地为 Log4Net 创建自己的自定义 SMTP 附加程序。看一眼

https://github.com/HatfieldConsultants/Log4Net.Core.CustomAppenders

作为如何构建非常基本的 SMTP 附加程序的示例。