log4net 在类库中找不到我的自定义布局类

时间:2021-01-18 01:53:14

标签: c# log4net log4net-configuration

我有一个控制台项目和一个类库。 log4net 安装在我的控制台项目和我的类库中。

我有一个这样的布局类用于测试目的。

public class CustomLayout : LayoutSkeleton
{
    public override void ActivateOptions() { }

    public override void Format(TextWriter writer, LoggingEvent loggingEvent)
    {
        writer.WriteLine(loggingEvent.MessageObject);
    }
}

当我在控制台项目中定义它时,这个类工作正常。但是当我在类库中定义这个类时,我得到一个错误。 log4net 没有看到这个类。

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
            <file value="log-file.txt" />
            <!-- error -->
            <layout type="ConsoleApp1.Core.CustomLayout" />
            <!-- working properly-->
             <!--<layout type="ConsoleApp1.CustomLayout" />--> 
        </appender>
        <logger name="FileLogger">
            <level value="ALL" />
            <appender-ref ref="FileAppender" />
        </logger>
    </log4net>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
    </startup>
</configuration>

程序.cs

class Program
    {

        private static readonly ILog Log = LogManager.GetLogger("FileLogger");

        static void Main(string[] args)
        {

            Log.Error("This is my error log.");
            Console.ReadLine();
        }
    }

我将此添加到 AssemblyInfo.cs:[assembly: log4net.Config.XmlConfigurator(Watch = true)]

我得到的错误如下:

log4net:ERROR Failed to find type [ConsoleApp1.Core.CustomLayout]
System.TypeLoadException: Could not load type [ConsoleApp1.Core.CustomLayout]. Tried assembly [log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a] and all loaded assemblies
   at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Util.SystemInfo.GetTypeFromString(String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetType, Type typeConstraint)
log4net:ERROR Failed to create object to set param: layout

我试过了,但没有用:<layout type="ConsoleApp1.Core.CustomLayout, ConsoleApp1.Core" />

1 个答案:

答案 0 :(得分:0)

由于您的 ConsoleApp1.Core.CustomLayout 类包含在单独的程序集中,
您必须提供此布局类的完全限定名称。

这包括它的命名空间、类名和程序集名称,即不带 .dll 文件扩展名的已编译库文件的名称。

例如,当您的类库文件名为 MyClassLibrary.dll 时(并且您问题中使用的命名空间和类名是正确的),您的布局类的注册必须如下所示:

<layout type="ConsoleApp1.Core.CustomLayout, MyClassLibrary" />
相关问题