È possibile che 2 applicazioni scrivano nello stesso file di registro utilizzando log4net?log4net, 2 applicazioni possono scrivere nello stesso file di registro?
risposta
Possono, ma se un'applicazione sta scrivendo il file, l'altra applicazione probabilmente avrà un errore se ha bisogno di scrivere nel log anche perché la prima applicazione manterrà il file aperto per la scrittura . È sempre consigliabile disporre di fonti di registrazione dedicate per le applicazioni: se è necessario condividere un registro, utilizzare un database poiché è progettato per gestire scritture concorrenti.
Questa è una di quelle cose che funzioneranno molto bene sulla macchina quando si sta sviluppando poiché non è probabile che crei una quantità sufficiente di scritture simultanee nel file di registro per rilevare eventuali problemi. Una volta che la tua applicazione inizia a sperimentare più carico, il problema inizierà a mostrarsi e in quel momento potrebbe manifestarsi in modi strani. Sicuramente proverei un'altra soluzione.
Dipende dallo LockingModelFileAppender. Se è ExclusiveLock, un altro processo non può aprire il file per la scrittura. L'alternativa è MinimalLock, ma non è destinata a questo scopo. È progettato per consentire a un altro processo di spostare o eliminare il file.
MinimalLock risolve parzialmente il problema (come indicato da @Mark), ma se utilizzi RollingFileAppender, ti imbatterai in altri problemi. Quando il file scorre, potresti trovarti in una condizione di competizione in cui un processo sovrascrive il file di registro appena creato da un altro processo.
Altre opzioni includono RemoteLogger, in cui è stato configurato un semplice server per ricevere e registrare eventi di registrazione inviati da altri processi. Allo stesso modo, è possibile accedere a un database SQL. Ho scritto una semplice aggiunta che registra su Redis; avresti bisogno di una semplice applicazione per leggere da Redis e registrare su un file. Il problema con questi approcci è che tutti introducono un punto di fallimento. Quando qualcosa non funziona correttamente è spesso quando hai più bisogno dei log, e quindi potrebbero non essere disponibili.
Quindi la mia soluzione era di evitare del tutto il problema facendo registrare ciascun processo sul proprio file. Questo è stato facile da fare con un cambio di configurazione. Nella configurazione (Rolling)FileAppender
, utilizzare:
<file type="log4net.Util.PatternString" value="c:\mylog-[%processid].txt" />
ID Il processo diventa parte del nome del file. Sì, questo significa che ora hai diversi file di registro da utilizzare, ma un aggregatore di file di registro come Graylog, Splunk o Logscape può essere d'aiuto.
Oppure è possibile utilizzare Mutex per bloccare la risorsa comune e quindi sincronizzare l'accesso a un file di registro comune da processi diversi.
Sì, è possibile, come indicato sopra, ma ora ho eseguito alcuni test di stress di questo scenario.
L'installazione è molto semplice:
- progetto Web 1 impostato con una pagina che registra una singola voce + un pulsante che scatena 1000 richieste alla stessa pagina, con un contatore nell'URL (rilevato dalla dichiarazione di registrazione).
- Progetto Web 2 impostato identicamente, sullo stesso file di registro.
Quando si fa clic su entrambi i pulsanti contemporaneamente, le voci del registro vengono intervallate nell'intero registro. MA, e questo è il grande GOTCHA, a giudicare dal contatore delle richieste di accompagnamento, è chiaro che ci sono condizioni di gara. Quasi ogni volta che un progetto web riesce a registrare la sua voce, l'altro fallisce (la voce viene saltata).
Quindi, con un traffico decente rispetto a questo registro comune, in pratica non si ha alcuna garanzia di quali istruzioni di registro effettivamente finiscono nel registro. La conclusione è di avere sempre file di log specifici del progetto, a quanto pare.
Il test è stato eseguito con il valore predefinito di "MinimalLock". Ho anche rifatto il test con "ExclusiveLock", solo per scoprire che il primo progetto web per configurare il logger "ha vinto", praticamente bloccando TUTTE le altre richieste di log. Quindi ovviamente, questo è un no-go pure.
- 1. Dove posso scrivere il file di registro log4net in ClickOnce?
- 2. Può Log4net avere più appendici scrivere sullo stesso file?
- 3. Creare 2 FileStream sullo stesso file nello stesso processo
- 4. Leggere nel file - modificare il contenuto - scrivere nello stesso file
- 5. log4net registrazione non crea file di registro
- 6. Dove log4net creerà questo file di registro?
- 7. Nome file personalizzato in un file di registro Log4Net progressivo?
- 8. Shuffle 2 array PHP nello stesso modo
- 9. Come crittografare i file di registro di log4net
- 10. Configura Log4Net in applicazioni web
- 11. Cosa scrivere nel file di registro?
- 12. Perché Log4Net non crea il file di registro in produzione?
- 13. Log4net: file di registro separati per ogni classe
- 14. informazioni Memorizzazione registro utilizzando log4net
- 15. Più applicazioni Android possono accedere allo stesso database Firebase?
- 16. Trova due righe nello stesso file
- 17. Utilizzo di log4net per scrivere su diversi logger
- 18. scrittura nello stesso file dopo aver letto dal file
- 19. (Vim) diff due subroutine nello stesso file
- 20. SVG e CSS proprietà nello stesso file
- 21. Modifica del livello di registro a livello logico in log4net?
- 22. Diversi tipi di ereditarietà nello stesso schema
- 23. Come si possono mettere gli utenti dell'applicazione nello stesso contesto del resto degli oggetti?
- 24. Leggere e scrivere sullo stesso file usando lo stesso flusso
- 25. Cosa succede se due script Python vogliono scrivere nello stesso file?
- 26. Lettura e scrittura nello stesso file con diverso processo
- 27. Log4j vs Logback: scrittura simultanea sullo stesso registro?
- 28. Come scrivere nel file di registro degli errori in PHP
- 29. R: non scrivere il file di registro per VennDiagram
- 30. Formato per scrivere un file di registro JSON?
Qualcuno ha un'esperienza da condividere su questo metodo? – SandRock