cjbhaines / Log4Net.Async

Asynchronous Log4Net appenders and forwarder
http://www.nuget.org/packages/Log4Net.Async/
MIT License
121 stars 37 forks source link

asyncforwarder log4net:ERROR [RollingFileAppender] ErrorCode: GenericFailure. Failed in DoAppend #11

Closed torndar closed 9 years ago

torndar commented 9 years ago

With log4net debugging enabled I get the log and error below on the console.

Config

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <!-- Write to different log files depending on the InternalApp instance ID property 
       The property is set in the InternalApp startup code based on the ID value passed to the executable -->
  <!-- <file type="log4net.Util.PatternString" value="D:\\InternalApp2012\\Logs\\InternalApp.%property{InstanceId}.txt" /> -->
  <file type="log4net.Util.PatternString" value="D:\\InternalApp2012\\Logs\\InternalApp.txt" />
  <!-- Append to the file, don't overwrite it (appending is the default, so this is redundant 
       but doesn't hurt anything either -->
  <appendToFile value="true" />
  <!-- Keep 10 10MB log files around (each InternalApp instance ID changes the 
       base file name and so creates a new set of files -->
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <!-- The latest log file is always the one without a number appended. -->
  <staticLogFileName value="true" />
  <!-- The formatting of the entries in the log file -->
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5level %date{ISO8601} %5timestamp(ms) %-30.30logger %-18.18M - %message %newline" />
  </layout>
</appender>
<appender name="asyncForwarder" type="Log4Net.Async.ParallelForwardingAppender,Log4Net.Async">
  <appender-ref ref="RollingLogFileAppender" />
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="asyncForwarder" />
</root>

log4net output

log4net: log4net assembly [log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a]. Loaded from [D:\InternalApp2012\log4net.dll]. (.NET Runtime [4.0.30319.1026] on Microsoft Windows NT 5.2.3790 Service Pack 2)
log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository for assembly [InternalApp, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null]
log4net: Assembly [InternalApp, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null] Loaded From [D:\InternalApp2012\InternalApp.exe]
log4net: Assembly [InternalApp, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: Assembly [InternalApp, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy]
log4net: configuring repository [log4net-default-repository] using .config file section
log4net: Application config file is [D:\InternalApp2012\InternalApp.exe.Config]
log4net: Configuring Repository [log4net-default-repository]
log4net: Configuration update mode [Merge].
log4net: Logger [root] Level string is [ALL].
log4net: Logger [root] level set to [name="ALL",value=-2147483648].
log4net: Loading Appender [asyncForwarder] type: [Log4Net.Async.ParallelForwardingAppender,Log4Net.Async]
log4net: Attaching appender named [RollingLogFileAppender] to appender named [asyncForwarder].
log4net: Loading Appender [RollingLogFileAppender] type: [log4net.Appender.RollingFileAppender]
log4net: Parameter [file] specified subtype [log4net.Util.PatternString]
log4net: Converter [literal] Option [D:\\InternalApp2012\\Logs\\InternalApp.txt] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Performing additional conversion of value from [PatternString] to [String]
log4net: Setting Property [File] to String value [D:\\InternalApp2012\\Logs\\InternalApp.txt]
log4net: Setting Property [AppendToFile] to Boolean value [True]
log4net: Setting Property [RollingStyle] to RollingMode value [Size]
log4net: Setting Property [MaxSizeRollBackups] to Int32 value [10]
log4net: Setting Property [MaximumFileSize] to String value [10MB]
log4net: Setting Property [StaticLogFileName] to Boolean value [True]
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Setting Property [ConversionPattern] to String value [%-5level %date{ISO8601} %5timestamp(ms) %-30.30logger %-18.18M - %message %newline]
log4net: Converter [level] Option [] Format [min=5,max=2147483647,leftAlign=True]
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [date] Option [ISO8601] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [timestamp] Option [] Format [min=5,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [(ms) ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [logger] Option [] Format [min=30,max=30,leftAlign=True]
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [M] Option [] Format [min=18,max=18,leftAlign=True]
log4net: Converter [literal] Option [ - ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Setting Property [Layout] to object [log4net.Layout.PatternLayout]
log4net: Searched for existing files in [D:\InternalApp2012\Logs]
log4net: curSizeRollBackups starts at [0]
log4net: Opening file for writing [D:\InternalApp2012\Logs\InternalApp.txt] append [True]
log4net: Created Appender [RollingLogFileAppender]
log4net: Created Appender [asyncForwarder]
log4net: Adding appender named [asyncForwarder] to logger [root].
log4net: Hierarchy Threshold []
log4net: Creating repository for assembly [FileMovement, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null]
log4net: Assembly [FileMovement, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null] Loaded From [D:\InternalApp2012\FileMovement.dll]
log4net: Assembly [FileMovement, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: Assembly [FileMovement, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: repository [log4net-default-repository] already exists, using repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net:ERROR [RollingFileAppender] ErrorCode: GenericFailure. Failed in DoAppend
System.NullReferenceException: Object reference not set to an instance of an object.
   at log4net.Layout.Pattern.MethodLocationPatternConverter.Convert(TextWriter writer, LoggingEvent loggingEvent)
   at log4net.Layout.Pattern.PatternLayoutConverter.Convert(TextWriter writer, Object state)
   at log4net.Util.PatternConverter.Format(TextWriter writer, Object state)
   at log4net.Layout.PatternLayout.Format(TextWriter writer, LoggingEvent loggingEvent)
   at log4net.Appender.AppenderSkeleton.RenderLoggingEvent(TextWriter writer, LoggingEvent loggingEvent)
   at log4net.Appender.TextWriterAppender.Append(LoggingEvent loggingEvent)
   at log4net.Appender.FileAppender.Append(LoggingEvent loggingEvent)
   at log4net.Appender.RollingFileAppender.Append(LoggingEvent loggingEvent)
   at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent)
log4net: Shutdown called on Hierarchy [log4net-default-repository]
log4net: Shutdown called on Hierarchy [log4net-default-repository]
rcollette commented 9 years ago

And this all works if you set the appender-ref to RollingLogFileAppender? The stack trace is not showing any Log4Net.async methods in the stack trace.

torndar commented 9 years ago

Changing the config to what appears below results in a successful log file. One thing that might be an issue that I just thought of is that Log4Net.Aysnc nuget package was built against log4net 1.2.11 but I have 1.2.13 in the project with a binding redirect.

<appender name="asyncForwarder" type="Log4Net.Async.ParallelForwardingAppender,Log4Net.Async">
  <!-- <appender-ref ref="RollingLogFileAppender" /> -->
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="RollingLogFileAppender" />
  <!-- <appender-ref ref="asyncForwarder" /> -->
</root>
cjbhaines commented 9 years ago

I'm on holiday at the moment but next week I will convert the solution over to Paket which uses proper sem ver (unlike the NuGet client) and I will float the version of log4net so it builds with the latest version. The unit tests should always pick up any breaking changes.

torndar commented 9 years ago

Just to clarify, will NuGet builds still be available after this conversion?

cjbhaines commented 9 years ago

Yep! It will still publish a package to NuGet but the nuspec will be much better defined.

torndar commented 9 years ago

Is this still on your TODO list?

cjbhaines commented 9 years ago

Sorry I completely forgot about this. I have just converted to Paket, pulled the latest log4net and published 1.3.0 to NuGet.