Log4j v2 создает файл журнала, но ничего в него не записывает и игнорирует мои уровни журнала.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Log4j v2 создает файл журнала, но ничего в него не записывает и игнорирует мои уровни журнала.

Сообщение Anonymous »

Проблема в том, что мой регистратор Log4J не записывает в файл, хотя он его создает (и каталог тоже!), и что включенные уровни - только ФАТАЛЬНЫЕ, ОШИБКИ, хотя я сказал ему включить ВСЕ. Вот мой src/resources/log4j.properties (который с maven помещен в target/classes/resources/log4j.properties, я уверен, что он найден и прочитан, потому что я изменил имя файла журнала и т. д.). ):

Код: Выделить всё

og4j.rootLogger=all, stdout, rollingfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.rollingfile=org.apache.log4j.RollingFileAppender
#log4j.appender.rollingfile=org.apache.log4j.FileAppender
log4j.appender.rollingfile.ImmediateFlush=true
log4j.appender.rollingfile.File=var/log/app.log
log4j.appender.rollingfile.MaxFileSize=20MB
log4j.appender.rollingfile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
А вот упрощенный Java-код, демонстрирующий проблему:

Код: Выделить всё

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Main {
private static final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(Main.class.getName());
static{
org.apache.log4j.PropertyConfigurator.configure(
Main.class.getClassLoader().getResource("resources/log4j.properties")
);
}
public static void main(String []args){
if(logger.isDebugEnabled()){ System.out.println("debug enabled"); }
if(logger.isInfoEnabled()){ System.out.println("info enabled"); }
if(logger.isFatalEnabled()){ System.out.println("fatal enabled"); }
if(logger.isErrorEnabled()){ System.out.println("error enabled"); }
logger.info("xxit");
logger.error("xxit2");
logger.warn("xxit3");
logger.debug("xxit4");
logger.fatal("xxit5");
}
}
STDOUT:

Код: Выделить всё

fatal enabled
error enabled
21:11:17.131 [main] ERROR Main - xxit2
21:11:17.136 [main] ERROR Main - xxit5
Выходной каталог и файл созданы, но файл пуст.
Я понятия не имею, куда идут остальные сообщения. Я думаю, они игнорируются, потому что они не регистрируются.
Мой файл pom.xml имеет явные зависимости для последних log4j и slf4j-relog4j. В какой-то момент я также добавил log4j-slf4j-impl. Результат остается тем же.
Я читал, что другие зависимости могут неявно использовать более старые версии Log4j или slf4j, которые могут конфликтовать с последней запрашиваемой мной версией.
Действительно, запустив mvn dependency:tree, я получаю:

Код: Выделить всё

...
[INFO] +- org.jxls:jxls-jexcel:jar:1.0.9:compile
[INFO] |  +- org.jxls:jxls:jar:2.6.0:compile
[INFO] |  |  +- org.apache.commons:commons-jexl3:jar:3.1:compile
[INFO] |  |  |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] |  |  +- commons-beanutils:commons-beanutils:jar:1.9.3:compile
[INFO] |  |  |  \- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] |  |  \- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] |  +- net.sourceforge.jexcelapi:jxl:jar:2.6.10:compile
[INFO] |  |  \- log4j:log4j:jar:1.2.14:compile
[INFO] |  \- org.slf4j:jcl-over-slf4j:jar:1.7.26:compile
...
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.23.1:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.23.1:compile
[INFO] +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.23.1:compile
[INFO] +- org.slf4j:slf4j-api:jar:2.0.13:compile
[INFO] +- org.slf4j:slf4j-reload4j:jar:2.0.13:compile
[INFO] |  \- ch.qos.reload4j:reload4j:jar:1.2.22:compile
[INFO] +- org.slf4j:slf4j-jdk14:jar:2.0.13:compile
В проекте активны две версии slf4j и log4j. Последняя часть от меня, первая от jxls. Я понятия не имею, как это возможно и как это влияет на мои желаемые версии.
Может ли статический регистратор, который я создаю, не создавать, а повторно использовать из других пакетов? Тогда имеет смысл, что уровни журнала не соответствуют тем, которые я установил в своем файле свойств. Но для меня не имеет смысла, почему выходной файл создается, но остается пустым.
Возможно, я слишком много думаю, что здесь не так. Может ли кто-нибудь пролить свет?
Моя цель — использовать последнюю версию log4j и повторно использовать один и тот же регистратор в моем приложении, которое, кстати, является приложением JavaFX с несколькими контроллерами. В идеале каждая часть приложения должна использовать один и тот же объект журнала.

Подробнее здесь: https://stackoverflow.com/questions/785 ... -my-log-le
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»