Utilizziamo log4net per registrare l'evento e l'errore dell'applicazione winform. Il nostro cliente desidera controllare il file di registro durante l'esecuzione dell'applicazione. Ma non riesco a scoprire quando e come il log4net esegue l'operazione write (commit). E come soddisfare i requisiti del cliente, tranne la creazione di un altro logger da solo. Qualche aiuto? Grazie.Quando log4net scrive o esegue il commit del log nel file?
risposta
Se si utilizza il FileAppender
, questo appender eredita la TextWriterAppender
, che a sua volta espone la proprietà ImmediateFlush
. Il valore di questa proprietà è true
per impostazione predefinita e obbliga l'appender a eseguire uno Flush()
sul flusso sottostante per ogni operazione di aggiunta.
A seconda di come si immagina che il cliente "monitora" il file di registro, un'idea potrebbe essere quella di abilitare il monitoraggio dall'interno dell'applicazione. Questo può essere fatto in aggiunta all'aggiunta a un file, usando the MemoryAppender e leggendo gli eventi da quell'appender.
Si parla di un file di registro, quindi presumibilmente si sta utilizzando FileAppender o una classe derivata. Questo buffererà l'output per impostazione predefinita. L'output bufferizzato è molto più efficiente, quindi per soddisfare le tue esigenze, ti suggerirei di fornire un meccanismo per svuotare il registro prima di visualizzarlo, piuttosto che forzare un commit dopo ogni operazione di scrittura.
Si può fare questo con il codice come il seguente:
foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
{
BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton;
if (b != null) b.Flush();
}
"Ciò tamponerà l'output per impostazione predefinita." Questo non è vero! FileAppender (più precisamente la sua classe base TextWriterAppender) si svuota dopo ogni operazione di aggiunta! Vedi http://logging.apache.org/log4net/release/sdk/log4net.Appender.TextWriterAppender.ImmediateFlush.html Pertanto, non è necessario fare nulla perché le voci di registro più recenti verranno sempre scritte nel file immediatamente , in modo che il tuo cliente possa semplicemente aprire il file. – gehho
@gehho ha ragione. FileAppender NON bufferizza. Le appendici integrate che eseguono il buffering sono AdoNet, BufferingForwarding, Remoting e gli allegati di SmtpXXX. –
Una cosa che ho notato durante l'utilizzo di log4net in un'istanza di SharePoint è che, in base alla configurazione della sicurezza e all'implementazione del caricamento della configurazione, l'utente che fa girare il pool di applicazioni potrebbe non avere i diritti per scrivere sul file system locale per creare il file di registro.
Per questo motivo è necessario assicurarsi che la configurazione sia invocata con le credenziali corrette, in SharePoint sarebbe in un contesto di sicurezza elevato. Non del tutto correlato, ma potrebbe essere un problema che attraversi.
vedere this SO post per howto a livello di programmazione di un log log4net. La risposta di Joe mentre è leggermente imprecisa è approssimativamente lo stesso codice e quindi presumibilmente funzionerebbe per lo svuotamento di tutti gli appendici bufferizzati.
- 1. Log4net generare log sbagliato il nome del file
- 2. Log4net non scrive su file
- 3. log4Net file di log non in scrittura
- 4. Come posso cancellare il file di log log4net?
- 5. Impossibile caricare il file o l'assembly 'log4net
- 6. Recupera il log remoto, non il commit
- 7. log4net: come impostare dinamicamente il nome del file del logger?
- 8. Append corrente Data di Log file con Log4Net
- 9. Programatically forzare un nuovo file di log con Log4Net
- 10. subclipse esegue l'override e il commit?
- 11. NHibernate esegue il commit delle modifiche del db senza chiamata esplicita per il salvataggio o l'aggiornamento
- 12. Impossibile caricare il file o il montaggio log4net
- 13. log log4net creato ma rimanente vuoto
- 14. Perché l'unisci esegue il caso peggiore nel tempo di esecuzione O (n log n)?
- 15. Scrive la variabile nel file, incluso il nome
- 16. Mercurial (hg) esegue il commit solo di determinati file
- 17. Dove posso scrivere il file di registro log4net in ClickOnce?
- 18. Applicazione sondaggio: StreamWriter non scrive nel file
- 19. Come si esegue il commit del codice come utente diverso?
- 20. EntityManager non scrive nel database
- 21. Unit Test & Log4net
- 22. Come ottenere un modello di nome del file di log log4net a livello di programmazione?
- 23. Log4Net non registra o errore
- 24. Pandas che scrive il dataframe nel file CSV
- 25. Come fare riferimento a un file incluso nel pacchetto OSGi quando si esegue java.io.File o FileInputStream
- 26. Configurare log4net per il progetto asp.net MVC3
- 27. Perché log4net non è riconosciuto nel file di configurazione?
- 28. Come posso "git log" solo il codice pubblicato nel trunk?
- 29. log4net non registra quando esegue un'applicazione Windows .Net 4.0 incorporata in modalità di rilascio
- 30. Logstash campi facoltativi nel file di log
Stiamo utilizzando log4net nelle nostre applicazioni Windows Form e non abbiamo alcun problema a riguardo. Ci sono alcune latenze tra l'evento e l'aggiornamento dei file, ma parliamo di secondi. Forse il problema è in qualche altro posto? –
Sì, forse il problema del nostro custormer è la seconda situazione. E risolveremo questo problema con MemoryAppender come ha detto Peter. Grazie a tutti, in particolare a Peter. La tua risposta è molto più utile. – Jollian