logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <ni...@apache.org>
Subject RE: NullReferenceException in RollingFileAppender
Date Mon, 21 May 2007 11:28:12 GMT
Bart,

 

You need to call the ActivateOptions method on the PatternLayout and on
the RollingFileAppender before calling  BasicConfigurator.Configure.

 

 

http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFi
leAppender.ActivateOptions.html

 

 

Cheers,

Nicko

 

------------
Nicko Cadell
log4net development
http://logging.apache.org/log4net

 

From: Bart Read [mailto:bart.read@red-gate.com] 
Sent: 21 May 2007 11:53
To: log4net-user@logging.apache.org
Subject: NullReferenceException in RollingFileAppender

 

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

 

 


Mime
View raw message