Во-первых, я нашел такой вопрос, который кажется очень актуальным:
Как настроить отдельные потоки ведения журнала для log4j?
Первый ответ на вопрос обсуждает использование маркеров, и это то, что я хотел бы использовать. Однако я не смог заставить регистрацию работать так, как ожидалось. Я не знаю, пропустил ли я шаг или использовал неправильный синтаксис.
Я написал очень простую программу, пытаясь проверить это.
package my.package;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
public class LoggingTest {
private static final Logger logger = LoggerFactory.getLogger(LoggingTest.class);
public static void main(String[] args) {
Marker marker = MarkerFactory.getMarker("MARKER");
logger.info(marker, "log info to marker log");
logger.info("log info to regular log");
}
}
log4j.xml:
<log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- APPENDERS -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %c{2}:%L - %m%n" />
</layout>
</appender>
<appender name="file" class="org.apache.log4j.FileAppender">
<param name="file" value="session.log" />
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %c{2}:%L - %m%n" />
</layout>
</appender>
<appender name="marker-file" class="org.apache.log4j.FileAppender">
<param name="file" value="marker.log" />
<param name="append" value="true" />
<MarkerFilter marker="MARKER" onMatch="ACCEPT" onMismatch="DENY" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %c{2}:%L - %m%n" />
</layout>
</appender>
<!-- LOGGERS -->
<root>
<level value="INFO" />
<appender-ref ref="marker-file" />
</root>
</log4j:configuration>
Ведение журнала прямо сейчас настроено на вход в маркер-аппендер. Мне нужно выяснить, как настроить регистратор (ы) для отправки вывода «маркера» аппендирующему маркеру, а остальные - «обычному» аппендеру.
Я не знаю, правильный ли синтаксис использования элемента MarkerFilter
или нет.
Когда я запускаю программу, я указываю аргумент VM -Dlog4j.configuration=file://<path to log4j.xml>
.
Я запускаю это изнутри eclipse, и у меня возникла отдельная проблема, когда кажется, что он не распознает файл log4j.xml, который я ему предоставляю. Я предполагаю, что это что-то, что я делаю неправильно (и, вероятно, причина, по которой то, что я пытаюсь сделать, кажется, не работает).
Любые идеи относительно того, что я мог бы делать неправильно, чтобы получить файл log4j.xml, который будет распознан, и затем, если все это проверит, правильно ли я использую механизм фильтра / маркера, будет очень оценили.
UPDATE
Я делаю это на компьютере с Windows, поэтому я подозреваю, что что-то не так с тем, как я указываю URI файла для файла log4j.xml.