Nick,

Thanks for the help.  After converting your code to c# (requires
downcasting) I managed to read the events data.  The code is as follows:


Hierarchy hierarchy;
MemoryAppender memoryAppender;

// Get the default hierarchy for log4net
hierarchy = (Hierarchy)LogManager.GetLoggerRepository();

// Get the appender named "MemoryAppender" from the <root> logger 
memoryAppender =
(MemoryAppender)hierarchy.Root.GetAppender("MemoryAppender");


I realized afterwards that the reason I was interested in writing the
log data with the MemoryAppender activated was so that I could have my
code potentially take specific actions each time a new entry was
created.  I attempted to find an event handler.  So far I've tried (to
no avail):

hierarchy.LoggerCreatedEvent +=new
LoggerCreationEventHandler(hierarchy_LoggerCreatedEvent);


private void hierarchy_LoggerCreatedEvent(object sender,
LoggerCreationEventArgs e)
        {
                MessageBox.Show("TEST: a new event was written to the
log");
        }

Is there an event handler someplace that I am missing?  If not what are
my options?  I noticed that the class is sealed so I cannot subclass
it... my only alternative would then be to write a wrapper?

Thanks Again,

Kevin


-----Original Message-----
From: Nicko Cadell [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, August 10, 2004 1:25 PM
To: Log4NET User
Subject: RE: MemoryAppender Example

Kevin,

To get the events out of the MemoryAppender you need to lookup the
actual instance of the appender being written to.
The reason that the example suggests creating and configuring the
MemoryAppender programmatically is because you would then have a
reference to the right MemoryAppender. If you configure the
MemoryAppender using the config file you need to find it before you can
get the events out of it.

If you do want to configure it through the config file then you need to
know which <logger> it is attached to as that is the only way of looking
up appenders.

using log4net;
using log4net.spi;
using log4net.Appender;
using log4net.Repository.Hierarchy;

...

// Get the default hierarchy
Hierarchy h = LogManager.GetLoggerRepository() as Hierarchy;

// Get the appender named "MemoryAppender" from the <root> logger 
MemoryAppender ma = h.Root.GetAppender("MemoryAppender") as
MemoryAppender;

// or get the appender from the <logger> named "my-logger"
MemoryAppender ma =
h.GetLogger("my-logger").GetAppender("MemoryAppender") as
MemoryAppender;

// Get the events out of the memory appender 
LoggingEvent[] events = ma.Events; 



Cheers,
Nicko


> -----Original Message-----
> From: Kevin Torkelson [mailto:[EMAIL PROTECTED] 
> Sent: 10 August 2004 01:29
> To: log4net-user@logging.apache.org
> Subject: MemoryAppender Example
> 
> Hi,
> 
>  
> 
> I'm trying to enable a MemoryAppender and access the logged 
> information from within code to be displayed in a form.   
> Ideally I'd like the MemoryAppender to be configured in the 
> config file.  I already have a working config file which logs 
> to a file and the debugger, and I added the following 
> currently posted example:
> 
>  
> 
> <appender name="MemoryAppender" 
> type="log4net.Appender.MemoryAppender" >
> 
>             <onlyFixPartialEventData value="true" />
> 
> </appender> 
> 
>  
> 
>  
> 
> After looking at the MemoryAppender class documentation which 
> states the data is found inside MemoryAppender.Events, I 
> tried code such as the following (assumes LogRtbx is defined 
> as a rich textbox):
> 
>  
> 
> MemoryAppender memoryAppender = new MemoryAppender();
> 
> Log.Error("Test Error Message");
> 
> This.LogRtbx.AppendText(memoryAppender.Events[0].RenderedMessa
> ge.ToString());
> 
>  
> 
> When I try this, I get an error that when handled shows that 
> there is no data at all in Events.  It doesn't work to remove 
> the declaration. If the MemoryAppender is being created from 
> the config file, how can I access the MemoryAppender object 
> or am I completely off course?
> 
>  
> 
> Recap:
> 
> 1)       Why does the current posted example suggest that you 
> probably would not want to configure the MemoryAppender in 
> the config file?
> 
> 2)       How can I read the logged information from memory to 
> be displayed in a Windows form?  Are there any examples 
> besides the config file example?
> 
>  
> 
> Thanks,
> 
> Kevin
> 
>  
> 
>  
> 
> 


Reply via email to