Sounds like you want to extend AdoNetAppender, add a Timer with a callback that 
periodically ensures the Connection is connected every X seconds.




________________________________
From: Hadley Willan <[EMAIL PROTECTED]>
To: Log4NET User <log4net-user@logging.apache.org>
Sent: Monday, November 17, 2008 12:55:25 AM
Subject: RE: AdoNetAppender connection timeouts

 
Hi all,
 
Shortly after that last email, I went and
read the docs for the ReconnectOnError
http://logging.apache.org/log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html
 
I changed my connection string to have “Connect
Timeout=1” so that there’s only 1 sec for a connection timeout.
This helped reduce the lag noticeably on a
reconnect.
 
Still, it would be nice if I could control
the time between reconnection attempts and if the connection stuff happened in
its own thread.
 
Regards
Hadley
 

________________________________
 
From:Hadley Willan 
[mailto:[EMAIL PROTECTED] 
Sent: Monday, 17 November 2008
14:16
To: Log4NET User
Subject: RE: AdoNetAppender
connection timeouts
 
Hi all,
 
I’ve done some testing by writing a
small test app that loops through, throws an ArgumentException, gets caught and
logs the exception to log4net.
My config has both a local file appender
and an ADO Net appender.
There’s an artificial Sleep for a
second in the loop so that it doesn’t just race by.
I’ve placed a StopWatch around the
log4net call and set ReconnectOnError to true.
 
The behaviour I’m seeing is that the
reconnect gets done every few seconds.
At the end of the email is a section of my
console output from the test.
I unplugged the network cable at around 20
and plugged it back in at 50 there was a total of 120 loops.
During the disconnection there’s
delays of up to 15s as a reconnection attempt is made.
 
Two questions.
        1. Is it possible to specify how long to wait between reconnection 
attempts? Eg.  DelayBetweenReconnectionSeconds=”60”  eg, wait a minute before 
trying to reconnect again.
        2. Given the delays, I’d say the reconnection attempt is a blocking 
call… Is there any way this can be an asynchronous call that changes the 
connected state flag if it succeeds? This would allow for a fast return of the 
log attempt. Yes, the message being logged is lost, but it doesn’t halt the 
calling code and introduce delays into the application. 
 
Thanks in advance.
Hadley
 
Timing[12] (6)ms
Timing[13] (3)ms
Timing[14] (10)ms
Timing[15] (3)ms
Timing[16] (3)ms
Timing[17] (6)ms
Timing[18] (3)ms
Timing[19] (8)ms
Timing[20] (9446)ms
Timing[21] (14830)ms
Timing[22] (14830)ms
Timing[23] (7)ms
Timing[24] (6)ms
Timing[25] (6)ms
Timing[26] (6)ms
Timing[27] (14830)ms
Timing[28] (6)ms
Timing[29] (6)ms
Timing[30] (6)ms
Timing[31] (6)ms
Timing[32] (6)ms
Timing[33] (6)ms
Timing[34] (6)ms
Timing[35] (6)ms
Timing[36] (6)ms
Timing[37] (14829)ms
Timing[38] (14830)ms
Timing[39] (14829)ms
Timing[40] (6)ms
Timing[41] (6)ms
Timing[42] (6)ms
Timing[43] (6)ms
Timing[44] (14829)ms
Timing[45] (14829)ms
Timing[46] (6)ms
Timing[47] (6)ms
Timing[48] (6)ms
Timing[49] (6)ms
Timing[50] (41554)ms
Timing[51] (8)ms
Timing[52] (3)ms
Timing[53] (3)ms
Timing[54] (3)ms
Timing[55] (3)ms
 

________________________________
 
From:Hadley Willan 
[mailto:[EMAIL PROTECTED] 
Sent: Monday, 17 November 2008
09:48
To: Log4NET User
Subject: RE: AdoNetAppender
connection timeouts
 
Actually,
 
I was just thinking about TCP timeouts and
lockups to the caller.
Is the log4net logging done in a separate
thread to the caller? 
 
If the connection to the DB goes away,
it’s good that it’ll reconnect, but during that connection time,
how does log4net handle the timeout?
 
Thanks
Hadley
 

________________________________
 
From:Ron Grabowski [mailto:[EMAIL PROTECTED] 
Sent: Monday, 17 November 2008
00:55
To: Log4NET User
Subject: Re: AdoNetAppender
connection timeouts
 
The AdoNetAppender keeps a reference to an open connection. At some
point it ensures the connection is open:

// shortened somewhat...the actual code is longer
if (m_reconnectOnError && m_dbConnection.State != ConnectionState.Open)
{
 LogLog.Debug("Attempting to reconnect to database...");
 InitializeDatabaseConnection();
 InitializeDatabaseCommand();
}

The AdoNetAppender is not async by default. If you're on SqlServer I'd
recommend taking a look at an appender that Ayende wrote:

https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-commons/Rhino.Commons/Logging/AsyncBulkInsertAppender.cs

whichs usess the SqlBulkCopy (very fast!) and background threads to write log
messages to the database. 
 

________________________________
 
From:Hadley Willan <[EMAIL PROTECTED]>
To: log4net-user@logging.apache.org
Sent: Friday, November 14, 2008
1:56:40 AM
Subject: AdoNetAppender connection
timeouts
Hi peoples,
 
How does the ADO.Net appender handle intermittent
connections?
 
I’m assuming that it’s holding a connection open
and appending?
I have <bufferSize value=”0”> set to ensure
an immediate call to a stored proc for logging.
 
So basically, do I need to worry about whether or not my
connection to the other end exists?
Could the lack of a network connection translate to a pause
in the app when the log statement gets written? 
Or is all logging an asynchronous thread that doesn’t
affect the caller?
 
Thanks in advance.
Hadley
 
 
 
 
 

************************************************************************
Bunnings Legal Disclaimer:

1) This email is confidential and may contain legally privileged
information. If you are not the intended recipient, you must not
disclose or use the information contained in it. If you have received
this email in error, please notify us immediately by return email and
delete the document.

2) All emails sent to and sent from Bunnings Group Limited.
are scanned for content. Any material deemed to contain inappropriate
subject matter will be reported to the email administrator of all
parties concerned.
************************************************************************

************************************************************************
Bunnings Legal Disclaimer:

1) This email is confidential and may contain legally privileged
information. If you are not the intended recipient, you must not
disclose or use the information contained in it. If you have received
this email in error, please notify us immediately by return email and
delete the document.

2) All emails sent to and sent from Bunnings Group Limited.
are scanned for content. Any material deemed to contain inappropriate
subject matter will be reported to the email administrator of all
parties concerned.
************************************************************************

************************************************************************
Bunnings Legal Disclaimer:

1) This email is confidential and may contain legally privileged
information. If you are not the intended recipient, you must not
disclose or use the information contained in it. If you have received
this email in error, please notify us immediately by return email and
delete the document.

2) All emails sent to and sent from Bunnings Group Limited.
are scanned for content. Any material deemed to contain inappropriate
subject matter will be reported to the email administrator of all
parties concerned.
************************************************************************
************************************************************************
Bunnings Legal Disclaimer:

1)     This email is confidential and may contain legally privileged
information.  If you are not the intended recipient, you must not
disclose or use the information contained in it.  If you have received
this email in error, please notify us immediately by return email and
delete the document.

2)     All emails sent to and sent from Bunnings Group Limited.
are scanned for content.  Any material deemed to contain inappropriate
subject matter will be reported to the email administrator of all
parties concerned.
************************************************************************

Reply via email to