Jason Newell created LOG4NET-655:
------------------------------------

             Summary: CONFIGURATION - Load extension assemblies by 
configuration reference
                 Key: LOG4NET-655
                 URL: https://issues.apache.org/jira/browse/LOG4NET-655
             Project: Log4net
          Issue Type: New Feature
          Components: Layouts
            Reporter: Jason Newell


h1. 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.
h2. An example of a layout extension
h3. C# Code

public class FileNamePatternConverter : PatternLayoutConverter
 {
 /// <inheritdoc />
 protected override void Convert(TextWriter clsTextWriter, LoggingEvent 
clsLoggingEvent)
 {
 
clsTextWriter.Write(Path.GetFileName(clsLoggingEvent.LocationInformation.FileName));
 }
 }
h3. 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>
h3. 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.

 
h1. Proposed Solution

 {color:#172b4d}Add a line to the converter configuration to force the loading 
of the assembly.{color}

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

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



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to