log4net appenders never flush their client, so events are lost at shutdown
I maintainer di solito rispondono entro 6 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Leggi ExceptionlessAppender.cs e BufferingExceptionlessAppender.cs nelle posizioni collegate, quindi confronta la gestione dell’arresto con ExceptionlessTarget.cs. Segui il modo in cui ciascun appender crea il proprio client e in cui la chiusura del buffer invia gli eventi; il lavoro è completato quando la chiusura o lo svuotamento elabora gli eventi in coda entro il timeout e rilascia solo un client creato dall’appender.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
In Exceptionless.Log4net 6.2.0, when ApiKey or ServerUrl is set on ExceptionlessAppender or BufferingExceptionlessAppender, the appender creates its own ExceptionlessClient with in-memory storage. Nothing ever processes that client's queue on close or flush, so events logged shortly before the process exits are never sent.
Where
- https://github.com/exceptionless/Exceptionless.Net/blob/5792f00d175f94a35fe0559c8e9999234a8163be/src/Platforms/Exceptionless.Log4net/ExceptionlessAppender.cs#L12-L27
- https://github.com/exceptionless/Exceptionless.Net/blob/5792f00d175f94a35fe0559c8e9999234a8163be/src/Platforms/Exceptionless.Log4net/BufferingExceptionlessAppender.cs#L17-L34
For comparison, the NLog target flushes its client: https://github.com/exceptionless/Exceptionless.Net/blob/5792f00d175f94a35fe0559c8e9999234a8163be/src/Platforms/Exceptionless.NLog/ExceptionlessTarget.cs#L96-L98
What happens
- The private client is never started, so it does not register the process-exit handler that
Startup()registers for other clients. - Neither appender overrides
OnCloseorFlush, soLogManager.Shutdown()/LogManager.Flush()do not send queued events. - The queue is only processed by the client's timer (first run after 2 seconds, then every 10 seconds). Events logged in the last few seconds before exit stay in memory and are lost. For
BufferingExceptionlessAppender, the buffer is handed to the client on close, but the client's queue is still never sent. - The client is never disposed either.
Expected
Closing or flushing the appender (for example LogManager.Shutdown()) sends the queued events, and the appender disposes a client it created.
Steps to reproduce
- Configure
ExceptionlessAppenderin log4net with<apiKey value="..." />. - In a console app, log an error and then call
LogManager.Shutdown()and exit. - The event never arrives in Exceptionless.
Suggested fix
In both appenders, override OnClose (calling the base first for the buffering appender so the buffer is submitted) and Flush(int millisecondsTimeout) to call _client.ProcessQueueAsync() and wait up to the timeout, and dispose the client in OnClose when the appender created it.
- Lingua principale
- C#
- Stelle
- 573
- Fork
- 143
- Merge medio
- 5g 9h
- PR unite (30g)
- 1
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di exceptionless/Exceptionless.Net
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
exceptionless/Exceptionless.Net#391 ·
I maintainer di solito rispondono entro 6 giorni
-
bug
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
exceptionless/Exceptionless.Net#387 ·
I maintainer di solito rispondono entro 6 giorni
-
AWS Lambda detection never matches because the environment variable name has a trailing spaceApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
exceptionless/Exceptionless.Net#386 ·
I maintainer di solito rispondono entro 6 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
exceptionless/Exceptionless.Net#389 ·
I maintainer di solito rispondono entro 6 giorni
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 72/100
exceptionless/Exceptionless.Net#388 ·
I maintainer di solito rispondono entro 6 giorni
Tutte le issue di exceptionless/Exceptionless.Net
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
RadicalCSG/com.chisel#192 ·
I maintainer di solito rispondono entro 1 giorno
-
area-testing p2-post-1.0 technical-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Bug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
RazorConsole/RazorConsole#447 ·
I maintainer di solito rispondono entro 1 giorno
-
bug P3
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Add a Godot splashApertagodot good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 2 giorni