Log4j: интересный вопрос и решение проблем - PullRequest
0 голосов
/ 27 декабря 2011

Мое приложение использует ведение журнала двумя способами .... 1) programatic 2) log4j.xml Я должен создать файлы журналов в двух (1 с использованием programatic и другом с использованием log4j.xml) местоположениях.

Программный способ (есть еще один файл свойств, в котором упоминаются все вещи, такие как уровень журнала и все .... скажем ... через этот ... создается файл ... имя как "SAS_VP".log "):

 Enumeration loggers = Logger.getRootLogger().getLoggerRepository().getCurrentLoggers(); 
  ......
  Logger temp = (Logger)iter.next();                                                
  temp.setLevel(level);

log4j.xml

  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="/LOGS/SAM/SAM_VJ.log"/> 
  <param name="Threshold" value="DEBUG"/>
  <param name="MaxFileSize" value="10000KB"/>
  <param name="MaxBackupIndex" value="10"/>
  <param name="Append" value="false"/>

 <layout class="org.apache.log4j.PatternLayout">

  <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %5p [%F(% M):%L] %m%n"/>

 </layout>   

 </appender>


 <root>
 <appender-ref ref="CONSOLE"/>
 <appender-ref ref="FILE"/>
 </root> 

ВЫПУСК:

Уровень журнала, который яустановить программно перезаписать уровень журнала log4j.xml. Как и в log4j.xml, установлен уровень " Debug ", и программно я установил уровень как " ОШИБКА", то файл (SAM_VJ.log), который создается log4j.xml , содержит только журналы уровня ОШИБКИ.

Как решить эту проблему ... Я хочу, чтобы ...Мои журналы (программные и log4j) должны быть независимыми.

Есть ли что-нибудь в log4j, в котором ... если я установил уровень регистрации пакетов"com.sas" - это "Debug", тогда никто не может изменить это ... что-то вроде изменяемого типа

 <logger name="com.sam">    
<priority value="DEBUG"/>
 </logger>

Ищет ваше предложение ....

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

Почему бы просто не использовать вместо этого два приложения с разными уровнями журнала? Вы можете добавить параметры levelMax и levelMin, чтобы сообщить log4j, что приложение просто регистрирует эти уровни.

<param name="LevelMax" value="warn" />
<param name="LevelMin" value="info" />
0 голосов
/ 27 декабря 2011

Я не уверен, что вы действительно должны запрашивать такую ​​функциональность.Вы говорите о способе конфигурирования каркаса log4j, и да, он поддерживает 3 различных способа конфигурирования:

  1. файл свойств
  2. xml configuration
  3. программночерез ваш java-код

Хорошо, что программная конфигурация позволяет изменять настроенное состояние логгеров / приложений log4j вообще.

Ваша конфигурация xml должна быть загружена во время работы системызапуска, а затем вы применяете свой Java-код, который переопределяет конфигурацию.

Если у вас есть логика предоставления конфигурации в Java, почему бы вам не улучшить свою логику и не определить уровень ошибки (из вашего примера)только если вы действительно хотите это сделать.

Невозможно настроить один и тот же регистратор для работы как с уровнем DEBUG (и выше) AND Уровень ERROR (и выше).

На самом деле это особенность, а не недостаток, поскольку она позволяет изменить поведение LOG4j в работающей системе (без перезапуска), которая используетсяДля отслеживания проблем.

Конечно, вы можете обернуть свои регистраторы так, чтобы они не разрешили setLevel, но я действительно не понимаю, зачем вам это делать.

Надеюсь, этопомогает

...