Ho un appender log4net personalizzato che assomiglia a questo:Log4net ricorsivo leggere acquisizioni di blocco non sono ammessi in questa modalità
public class MyAppender : AppenderSkeleton
{
protected override void Append(LoggingEvent loggingEvent)
{
try
{
if (loggingEvent.Level == Level.Error || loggingEvent.Level == Level.Fatal)
{
DoWork(RenderLoggingEvent(loggingEvent));
}
}
catch
{
// silently fail
}
}
}
Di tanto in tanto, ci vediamo questa eccezione nell'output:
log4net:ERROR Exception while logging
System.Threading.LockRecursionException: Recursive read lock acquisitions not allowed in this mode.
at System.Threading.ReaderWriterLockSlim.TryEnterReadLockCore(TimeoutTracker timeout)
at System.Threading.ReaderWriterLockSlim.TryEnterReadLock(TimeoutTracker timeout)
at System.Threading.ReaderWriterLockSlim.EnterReadLock()
at log4net.Util.ReaderWriterLock.AcquireReaderLock()
at log4net.Repository.Hierarchy.Logger.CallAppenders(LoggingEvent loggingEvent)
at log4net.Repository.Hierarchy.Logger.ForcedLog(Type callerStackBoundaryDeclaringType, Level level, Object message, Exception exception)
at log4net.Repository.Hierarchy.Logger.Log(Type callerStackBoundaryDeclaringType, Level level, Object message, Exception exception)
L'appender sembra funzionare correttamente e la mia app non mostra errori, ma questi messaggi sono davvero fastidiosi. Mi piace il software in esecuzione pulito e questo non è pulito = (
La mia implementazione di appender è ok? C'è qualche configurazione che posso includere per evitare questo errore? La risposta più vicina che riesco a trovare dai gooog è da questa segnalazione di bug log4net bug. Non sto chiamando GetAppenders in modo che non si applichi al mio caso d'uso.Qualsiasi aiuto sarebbe appropriato.
Cosa fa 'DoWork'? – Rob
@Rob, pubblica l'errore su un bus di servizio – Drew
Ha mai esito negativo? (Quello che mi viene in mente è che 'DoWork' potrebbe registrare qualcosa) – Rob