2016-12-28 4 views
0

Dears, Ich habe eine Frage bitte, ich habe viele Dienste schreiben in verschiedenen Log-Dateien mit der gleichen Log-Ebene. Was ich vom Internet bekommen habe, muss ich Appender und Logger basierend auf der Anzahl der Dienste erstellen. Nun, meine Frage ist, kann ich einen generischen parmeterized Appender für mehrere Logger verwendet werden? Ich brauche die Parameter im Appender, um den Namen der Protokolldatei und ihren Pfad anzugeben. Die folgende XML-Code-Schnipsel für die Definition des appender:Log4j2: Ein generischer parametrierter Appender [Typ: RollingFile] für mehrere Logger

<Appenders> 
    <RollingFile name="RollingFile-Appender" 
       fileName="${log-path}/{This one based on service}.log" 
       filePattern="${log-path}/{This one based on service}/{This one based on service}_%d{yyyy-MM-dd}.log"> 
     <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
       <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
       <SizeBasedTriggeringPolicy size="${fileSize}" /> 
      </Policies> 
     <DefaultRolloverStrategy> 
      <Delete basePath="${log-path}/{This one based on service}" maxDepth="1"> 
       <IfFileName glob="{This one based on service}*.log"> 
       <IfAny> 
        <IfAccumulatedFileSize exceeds="500 MB" /> 
        <IfAccumulatedFileCount exceeds="3" /> 
       </IfAny> 
       </IfFileName> 
     </Delete> 
     </DefaultRolloverStrategy> 
    </RollingFile> 
</Appenders> 

Vielen Dank im Voraus.

Antwort

0

Ja, Sie können den RoutingAppender verwenden, um mehrere Protokolldateien zu protokollieren, sogar dynamische Protokolldateien dynamisch zu erstellen. Oft wird die Kontextkarte als Routing-Regel verwendet.

Beispiele finden Sie unter manual page und Log4j2 FAQ page.

+0

Ich habe Zweifel, ist ThreadContext Thread sicher für den gleichzeitigen Zugriff? Lassen Sie mich Ihnen sagen, was ich tue, ich habe WebSphere Portal und es hat viele Portlets, jetzt verwenden diese Portlets das Logging-Modul, wenn eines der Portlets den Schlüssel ändert [angenommen "LogFileName"] wird es zu den anderen reflektiert, habe ich recht? –

+0

Ja. ThreadContext ist im Wesentlichen eine Thread-lokale Karte. Das ist es für ... –

Verwandte Themen