Hi everyone,
I'm trying to do something which (I hope) is fairly simple, however in
the output from my application it seems that the RollingFileAppender
always throws a NullReferenceException in its OpenFile method. Here's
the exception output:
log4net:ERROR [RollingFileAppender] OpenFile(C:\Documents and
Settings\bart.read\Local Settings\Application Data\Red
Gate\ourapp\mylogfile.txt,True) call failed.
System.NullReferenceException: Object reference not set to an instance
of an object.
at log4net.Appender.RollingFileAppender.OpenFile(String fileName,
Boolean append)
at log4net.Appender.FileAppender.SafeOpenFile(String fileName,
Boolean append)
And here's a snippet of the code I use to initialise the logging:
public void InitialiseLogging()
{
if ( null != m_Filename )
{
return;
}
string folder =
StorageFolders.GetOptionsFolderPath();
try
{
if ( ! Directory.Exists( folder ) )
{
Directory.CreateDirectory(
folder );
}
}
catch ( IOException ) {}
catch ( UnauthorizedAccessException ) {}
m_Filename = Path.Combine( folder,
"mylogfile.txt" );
RollingFileAppender appender = new
RollingFileAppender();
appender.File
= m_Filename;
appender.LockingModel = new
FileAppender.MinimalLock();
appender.ImmediateFlush = true;
appender.StaticLogFileName = true;
EngineOptions options =
EngineOptions.GetGlobalOptions();
appender.MaxFileSize =
options.LogFileMaxSizeK * 1024;
appender.MaxSizeRollBackups =
options.LogFileMaxBackups;
appender.Threshold
= options.LoggingLevel;
appender.Layout
= new PatternLayout( "%utcdate{dd MMM yyyy HH:mm:ss,fff} [%thread]
%-5level %logger - %message%newline" );
BasicConfigurator.Configure( appender );
ILog logger = GetLogger( this );
if ( logger.IsInfoEnabled )
{
logger.Info( "Starting new ourapp
session" );
}
}
You'll note that I'm not using an XML file for configuration. This is
deliberate as it's not something we want exposed to our users.
I'm assuming there's a problem with the above code, although there's
nothing obviously wrong that I can see. I've googled, checked the API
documentation and the manual and have so far drawn a blank so if anyone
has any idea what's going on I'd be extremely grateful.
Note that
(i) INFO logging is enabled,
(ii) the exception is thrown during the call to
ILog.Info(),
(iii) StorageFolders.GetOptionsFolderPath() returns a
folder that does exist and to which I do have write access (I'm already
storing other items there),
(iv) RollingFileAppender.MaxFileSize is set to 8K,
(v) RollingFileAppender.MaxSizeRollBackups is set to 6.
As I said, any help would be greatly appreciated.
Many thanks,
Bart