Próbuję utworzyć rozwiązanie rejestrowania obejmujące wiele procesów na wielu komputerach. Planowałem użycie UDPAppendera do wysyłania wszystkich komunikatów dziennika na jeden komputer, który nimi zarządzał. Mam kilka pytań dotyczących wzorców paskowych i wzorcowych.informacje o identyfikatorze procesu log4net
Ponieważ muszę znać zarówno maszynę, jak i proces, z którego pochodzi wiadomość, chcę ją również uwzględnić w dzienniku. Znalazłem% property {log4net: HostName} dla nazwy hosta, a to działa świetnie. Jednak nie widzę niczego dla identyfikatora procesu w PatternLayouts. Oczywiście widzę coś takiego w PatternString. Z 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>
Ale nie jestem pewien, czy i jak łączyć ze sobą dwóch (lub nawet jeśli jest to kanoniczny sposób to zrobić).
Więc moje pytania to:
Jaka jest różnica między PatternString i PatternLayout? Dlaczego oba?
Widzę% processid w PatternString, jak uzyskać to samo w PatternLayout? Oto mój układ testowy:
<layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] [%property{log4net:HostName}] %-5level %logger - %message%newline" /> </layout>
Wreszcie, ma sens korzystania z układu XML dla appender UDP. Wygląda na to, że XmlLayoutSchemaLog4j dodaje już właściwość HostNameProperty do komunikatu XML. Jeśli nie chcę dodać tego nowego identyfikatora procesu (i być może nazwy procesu) do komunikatu XML, jaki jest najlepszy sposób na zrobienie tego? Czy powinienem po prostu skopiować plik src \ Layouts \ XmlLayoutSchemaLog4j.cs, zmodyfikować go i powiadomić log4net, że utworzyłem ten nowy układ (jak SampleLayoutsApp)?
Dzięki za pomoc
próbowałem wszystkiego% PID% ProcessID i wiele więcej, nic nie działało. Twoje rozwiązanie działa. Dzięki. – Nemo