Sto provando a creare una soluzione di registrazione che coinvolge più processi su più macchine. Ho pianificato di utilizzare UDPAppender per inviare tutti i messaggi di registro a una singola macchina che li gestisse. Ho alcune domande su patternstrings vs patternlayouts.informazioni identificativo processo log4
Perché ho bisogno di sapere sia da quale macchina e da quale processo proviene il messaggio di registro, voglio includerlo anche nel registro. Ho trovato% property {log4net: HostName} per hostname, e questo funziona benissimo. Tuttavia, non vedo nulla per ID processo in PatternLayouts. Ovviamente, vedo qualcosa del genere in PatternString. Dalla FAQ:
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="log-file-[%processid].txt" />
<layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
</appender>
Ma io non sono sicuro se o il modo di combinare i due (o anche se questo è il modo canonico di farlo).
Quindi, le mie domande sono:
Qual è la differenza tra stringamodello e PatternLayout? Perché entrambi?
Vedo il% processid in PatternString, come ottengo lo stesso in PatternLayout? Qui è il mio layout di prova:
<layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] [%property{log4net:HostName}] %-5level %logger - %message%newline" /> </layout>
Infine, ha senso utilizzare il layout XML per l'appender UDP. Sembra che XmlLayoutSchemaLog4j aggiunga già la proprietà HostNameProperty al messaggio XML. Se non dovessi aggiungere questo nuovo Process ID (e forse Process Name) al messaggio XML, qual è il modo migliore per farlo? Dovrei semplicemente copiare src \ Layouts \ XmlLayoutSchemaLog4j.cs, modificarlo e lasciare che log4net sappia che ho creato questo nuovo layout (come SampleLayoutsApp)?
Grazie per il vostro aiuto
Provato di tutto pid%,% processid e molti altri, niente ha funzionato. La tua soluzione funziona. Grazie. – Nemo