Im przy log4j2 z następujących zależności:Log4j2 AsyncLogger z toczenia pliku appender nie pokazuje numer wiersza plik
treści<!-- LOG4J2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0-rc1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-rc1</version>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.0.1</version>
</dependency>
Log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</Console>
<!-- Generate rolling log for router with per hour interval policy -->
<RollingFile name="ProcessorRollingFile" fileName="D:/ocsprocessor.log"
filePattern="D:/ocsprocessor.log.%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
</Policies>
<DefaultRolloverStrategy max="24" />
</RollingFile>
<!-- Register Async appender -->
<Async name="AsyncRollingFile">
<AppenderRef ref="ProcessorRollingFile" />
</Async>
</Appenders>
<Loggers>
<AsyncLogger name="com.tritronik.logger.log4j2" level="error"
additivity="false">
<AppenderRef ref="AsyncRollingFile" />
</AsyncLogger>
</Loggers>
</Configuration>
okazać się, że wszystko poszło w porządku z wyjątkiem robi dzienniku Wyświetla numer linii rzucanego rejestratora (% L we wzorcu).
Wyszukałem go i dowiedziałem się, że dla asynchronicznego rejestratora i programu do przesyłania plików, nikt nie wspomniał o używaniu% L, więc jak mogę to osiągnąć? Czy też nie obsługuje% L?
Edit: Próbowałem dodany includeLocation = "true", ale same wyniki
2014-05-23 11:42:40,368 [threadPoolTaskExecutor-5] ERROR (AsyncLogger:) - THIS IS TEST MESSAGE FOR LOGGING TEST PURPOSE
Dzięki
Dziękujemy! To działa .. Ale uhm, jak posiadanie asynchronicznego appendera jest nie nie oprócz loginu asyn? – Lynx777
Jeśli twoja aplikacja loguje się do rejestratora asynchronicznego, to po prostu umieszcza zdarzenia w dzienniku w kolejce (przerywacz LMAX). Oddzielny wątek usunie zdarzenia z kolejki i wyśle je do aplikanta. Jeśli appender jest asynchroniczny, zdarzenie jest ponownie umieszczane w kolejce. W końcu wątek aplikacji asynchronicznej usunie zdarzenie z tej kolejki i zapisze w pliku. Tak więc jeden z nich jest niepotrzebny. AsyncLoggers są znacznie szybsze, więc polecam usunąć asynchronicznego programistę. Ponadto, jeśli zachowasz oba potrzebne includeLocation dla obu (nie wiesz, czy to by działało, nie przetestowane ...) –