Я использую класс Log4j LogFilePatternReceiver
для чтения некоторых простых файлов журнала, и мне было интересно, есть ли какой-либо способ указать Log4j интерпретировать модификатор формата как необязательный.
Например, предположим следующий шаблон:
%r [%t] %p %c %x - %m%n
Это соответствует строке
123 [main] INFO org.apache.log4j.whatever x=8 - Just a message.
, но не строке
123 [main] INFO org.apache.log4j.whatever - Just a message.
(то есть, то же, что и выше, но без "x = 8""part).
Есть ли способ сообщить Log4j, что они совпадают?
В другой соответствующей заметке, добавив пару дополнительных операторов print в исходный код LogFilePatternReceiver
, я получаю
Pattern: {%r [%t] %p %c %x - %m%n}
Regex: {(.*?)[ ]+\[(.*?)\][ ]+(\S*\s*?)[ ]+(\S*\s*?)[ ]+(.*)[ ]+\-[ ]+(.*?)}
, где фигурные скобки просто обозначают начало / конец каждого выражения, не принадлежащего ему, просто чтобы убедиться, что в них нет лишних пробелов или других символов.Регулярное выражение создается с помощью LogFilePatternReceiver
в конце метода initialize()
.
Попытка регулярного выражения в regexpal.com , я получаю совпадение только для части, исключаясообщение, то есть совпадение, согласно регулярному выражению,
123 [main] INFO org.apache.log4j.whatever x=8 -
(с пробелом в конце).По-видимому, для включения сообщения регулярное выражение необходимо закрыть знаком $.
Я делаю какую-либо ошибку в определении шаблона?