Не удается найти логи вывода log4j siftAppender
Я следовал этому уроку
У меня есть этот код, но файл журнала не был написан.
Что мне не хватает?
вот мой код: https://github.com/elad2109/log4j_sift/blob/master/src/main/java/com/waze/rr_logger/SiftExampleLog4j.java
import org.apache.log4j.Logger;
import org.slf4j.LoggerFactory;
public class SiftExampleLog4j {
static org.apache.log4j.Logger logger = Logger.getLogger(SiftExampleLog4j.class);
public void log() {
BasicConfigurator.configure();
org.apache.log4j.MDC.put("session_id","MyGooApp");
logger.error("example1");
org.apache.log4j.MDC.put("session_id","MyFooApp");
logger.error("example2");
}
}
log4j.properties
log4j.rootLogger=INFO, sift, osgi:VmLogAppender
# Sift appender
log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
log4j.appender.sift.key=session_id
log4j.appender.sift.default=no_session_id
log4j.appender.sift.appender=org.apache.log4j.FileAppender
log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n
log4j.appender.sift.appender.file=$\\{session_id\\}.log
log4j.appender.sift.appender.append=true
Я ожидаю увидеть 2 выходных файла журнала: MyGooApp.log
а также MyFooApp.log
, Однако я нигде не могу их найти.
Обновить
Я попробовал это:
log4j.appender.sift.appender.file=./$\\{session_id\\}.log
и все же теперь я вижу выходные файлы:
3 ответа
Я сделал это с помощью logback. Я сейчас делюсь с вами.
SiftExample.java
package chapters.appenders.sift;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
public class SiftExample {
public static void main(String[] args) throws JoranException {
String configFile = "F://logbackfile/logback.xml";
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator configurator = new JoranConfigurator();
Logger logger = LoggerFactory.getLogger(SiftExample.class);
logger.debug("Application started");
lc.reset();
lc.putProperty("appname", "MyGooApp");
configurator.setContext(lc);
configurator.doConfigure(configFile);
logger.debug("Alice says hello");
lc.reset();
lc.putProperty("appname", "MyFooApp");
configurator.setContext(lc);
configurator.doConfigure(configFile);
logger.debug("Bob says hi");
}
static void usage(String msg) {
System.err.println(msg);
System.err.println("Usage: java " + SiftExample.class.getName() + " configFile\n" + " configFile a logback configuration file");
System.exit(1);
}
}
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="DEV_HOME" value="F://logbackfile" />
<appender name="FILE-AUDIT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/${appname}.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="chapters.appenders.sift" level="debug"
additivity="false">
<appender-ref ref="FILE-AUDIT" />
</logger>
<root level="error">
<appender-ref ref="FILE-AUDIT" />
</root>
</configuration>
Выход:
MyGooApp.log
2016-05-09 01:35:57 - Alice says hello
MyFooApp.log
2016-05-09 01:35:57 - Bob says hi
NB: пожалуйста, не забудьте сделать это
- Имя пакета
chapters.appenders.sift
добавляется в logback.xml как<logger name="chapters.appenders.sift" level="debug" ...
Здесь есть несколько проблем.
Сначала переместите файл log4j.properties из корневого каталога проекта в "
src/resources
". Тогда вы увидите мир соответствующих ошибок.У jar Log4j нет этого пакета
org.apache.log4j.sift
, добавьте вспомогательный pax-loging jar в ваш classpath.Это также поможет использовать Karaf OSGi MDC или Camel MDC, потому что Apache Karaf использует Pax Logging в качестве системы регистрации. (Я не уверен, как это будет работать без OSGi, хотя)
Ваша проблема не с этой линией log4j.appender.sift.appender.file=./$\\{session_id\\}.log
насколько путь идет ./$\\{session_id\\}.log
следует создать файл журнала в корневом каталоге вашего проекта, когда все остальное настроено правильно.
Кажется, вы используете относительный путь в качестве имени файла (log4j.appender.sift.appender.file=$\\{session_id\\}.log
).
Если вы установили уровень журнала для log4j для отладки, вы должны увидеть в сгенерированных журналах следующую инструкцию:
setFile called: "+fileName+"
Вы можете включить внутреннее ведение журнала log4j, определив переменную log4j.configDebug. Все внутренние вызовы отладки log4j отправляются в System.out, а внутренние сообщения об ошибках отправляются в System.err. Все внутренние сообщения начинаются со строки "log4j: ".
В качестве теста вы также можете изменить свойство файла на что-то вроде:
log4j.appender.sift.appender.file=./$\\{session_id\\}.log
.
представляет текущую папку (обычно корневую папку проекта).