2015-06-18 2 views
0

Я использую банки log4j2 в приложении adc приложения adacle на 12c.Невозможно создать несколько файлов журналов на основе значений карты ThreadContext с использованием приложения маршрутизации в log4j2

Требование: создать несколько журнальных файлов на основе сеанса и динамически изменять свойства ведения журнала.

Log4j2.xml файл

<?xml version="1.0" encoding="UTF-8"?> 
 
<Configuration status="trace" packages="apps.adfAppUI.ui.bean"> 
 
    <Appenders> 
 
     <File name="file" fileName="./adfAppCustomLogs/TestLog4j2.log"> 
 
      <PatternLayout> 
 
       <Pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %class %L %M - %msg%xEx%n</Pattern> 
 
      </PatternLayout> 
 
     </File> 
 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
 
      <PatternLayout pattern="%m%n"/> 
 
     </Console> 
 
     <Routing name="AppRouting"> 
 
      <Routes pattern="$${ctx:ROUTINGKEY}"> 
 
       <!-- This route is chosen if ThreadContext has value 'user' for key ROUTINGKEY. --> 
 
       <Route key="USER"> 
 
        <RollingFile name="Rolling-USER-${ctx:ROUTINGKEY}-${ctx:LOGGEDSESSIONID}" append="true" fileName="./adfAppCustomLogs/${ctx:ROUTINGKEY}-${ctx:LOGINID}-${ctx:LOGGEDSESSIONID}.log" 
 
           filePattern="./adfAppCustomLogs/archive/${date:yyyy-MM}/${ctx:LOGINID}-%d{MM-dd-yyyy}-%i.txt.gz"> 
 
         <PatternLayout> 
 
          <Pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %class %L %M - %msg%xEx%n</Pattern> 
 
         </PatternLayout> 
 
         <Policies> 
 
          <TimeBasedTriggeringPolicy interval="6" modulate="true" /> 
 
          <SizeBasedTriggeringPolicy size="50 MB"/> 
 
         </Policies> 
 
        </RollingFile> 
 
       </Route> 
 
      </Routes> 
 
     </Routing> 
 
     <Async name="async" bufferSize="1000" includeLocation="true"> 
 
     <AppenderRef ref="AppRouting" /> 
 
    </Async> 
 
    </Appenders> 
 
    <Loggers> 
 
     <Root level="trace"> 
 
      <!--<AppenderRef ref="file" level="DEBUG"/> --> 
 
      <AppenderRef ref="async"/> 
 
      <AppenderRef ref="STDOUT"/> 
 
     </Root> 
 
    </Loggers> 
 
</Configuration>

Я звоню класс полезности, где значения threadcontext устанавливаются и clearled после регистрации.

Проблема: Несмотря на то, что я изменяю значения threadcontext для каждого сеанса, я не вижу создания нескольких файлов. Все журналы добавляются в один файл. Но когда я перезапускаю сервер, создается новый файл, и снова все журналы сеансов присоединяются к нему.

Спасибо.

ответ

0

Нижеприведенная конфигурация сделает usecase.

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="trace"> 
    <MapFilter onMatch="ACCEPT" operator="or"> 
     <KeyValuePair key="$${ctx:LOGLEVELYN}" value="Y"/> 
    </MapFilter> 
    <Appenders> 
     <File name="file" fileName="./adfAppCustomLogs/TestLog4j2.log"> 
      <PatternLayout> 
       <Pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %class %L %M - %msg%xEx%n</Pattern> 
      </PatternLayout> 
     </File> 
     <Console name="STDOUT" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%m%n"/> 
     </Console> 
     <Routing name="AppRouting"> 
      <Routes pattern="$${ctx:LOGGEDSESSIONID}"> 
       <!-- This route is chosen if ThreadContext has no value for key ROUTINGKEY. --> 
       <Route key="$${ctx:LOGGEDSESSIONID}"> 
        <RollingFile name="Rolling-ALL" fileName="./adfAppCustomLogs/DefaultAll.log" 
           filePattern="./adfAppCustomLogs/archive/${date:yyyy-MM}/DefaultAll-%d{MM-dd-yyyy}-%i.txt.gz"> 
         <PatternLayout> 
          <Pattern>%X %d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %t %msg%xEx%n</Pattern> 
         </PatternLayout> 
         <Policies> 
          <TimeBasedTriggeringPolicy interval="6" modulate="true"/> 
          <SizeBasedTriggeringPolicy size="10 MB"/> 
         </Policies> 
        </RollingFile> 
       </Route> 
       <!-- This route is chosen if ThreadContext has value other than null for key ROUTINGKEY. --> 
       <Route> 
        <RollingFile name="Rolling-OTHER-${ctx:LOGGEDSESSIONID}" 
           fileName="./adfAppCustomLogs/${ctx:LOGINID}-${ctx:LOGGEDSESSIONID}.log" 
           filePattern="./adfAppCustomLogs/archive/${date:yyyy-MM}/${ctx:LOGINID}-%d{MM-dd-yyyy}-%i.txt.gz"> 
         <PatternLayout> 
          <Pattern>%X %d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %t %msg%xEx%n</Pattern> 
         </PatternLayout> 
         <Policies> 
          <TimeBasedTriggeringPolicy interval="6" modulate="true"/> 
          <SizeBasedTriggeringPolicy size="10 MB"/> 
         </Policies> 
         <!-- <DefaultRolloverStrategy max="100"/> --> 
        </RollingFile> 
       </Route> 
      </Routes> 
     </Routing> 
     <Async name="async" bufferSize="1000" includeLocation="true"> 
      <AppenderRef ref="AppRouting"/> 
     </Async> 
    </Appenders> 
    <Loggers> 
     <Root level="trace"> 
      <!--<AppenderRef ref="file" level="DEBUG"/> --> 
      <AppenderRef ref="async"/> 
      <AppenderRef ref="STDOUT"/> 
     </Root> 
    </Loggers> 
</Configuration> 
+0

В дополнение к голым XML вы могли бы также добавить объяснение, в чем проблема в исходном XML? – pinkpanther

Смежные вопросы