Uploaded image for project: 'Log4net'
  1. Log4net
  2. LOG4NET-655

CONFIGURATION - Load extension assemblies by configuration reference

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • Layouts
    • None

    Description

      The problem

      Currently to extend the layout the extension code needs to be in the main dll or exe as it has to be loaded at startup for log4net to be able to find the layout extension. In order to create the ability to have these extensions in an assembly which can be shared with other projects there needs to be a way to tell log4net via the configuration which assembly to load.

      An example of a layout extension

      C# Code

      public class FileNamePatternConverter : PatternLayoutConverter
      {
      /// <inheritdoc />
      protected override void Convert(TextWriter clsTextWriter, LoggingEvent clsLoggingEvent)

      { clsTextWriter.Write(Path.GetFileName(clsLoggingEvent.LocationInformation.FileName)); }

      }

      Configuration

      <layout type="log4net.Layout.PatternLayout">
      <converter>
      <name value="filename" />
      <type value="X.Logging.FileNamePatternConverter" />
      </converter>
      <conversionPattern value="[%5level] %date{dd MMM yyyy HH:mm:ss} %filename:%line %logger - %message%newline" />
      </layout>

      Error message

      log4net:ERROR Could not create Appender [RollingFile] of type [log4net.Appender.RollingFileAppender]. Reported error follows.
      System.TypeLoadException: Could not load type [X.DotNet.Logging.FileNamePatternConverter]. Tried assembly [log4net, Version=2.0.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a] and all loaded assemblies
      at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
      at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element, Object target)
      at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetType, Type typeConstraint)
      at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element, Object target)
      at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetType, Type typeConstraint)
      at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element, Object target)
      at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
      log4net:ERROR Appender named [RollingFile] not found.

       

      Proposed Solution

       Add a line to the converter configuration to force the loading of the assembly.

      <layout type="log4net.Layout.PatternLayout">
      <converter>
      <name value="filename" />
      <type value="X.Logging.FileNamePatternConverter" />

      <assembly value="XLoggingExtensions" />
      </converter>
      <conversionPattern value="[%5level] %date{dd MMM yyyy HH:mm:ss} %filename:%line %logger - %message%newline" />
      </layout>

      Attachments

        Activity

          People

            Unassigned Unassigned
            JNewellAtAllegro Jason Newell
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: