Код: Выделить всё
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
Код: Выделить всё
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");
}
}
Код: Выделить всё
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
Может ли статический регистратор, который я создаю, не создавать, а повторно использовать из других пакетов? Тогда имеет смысл, что уровни журнала не соответствуют тем, которые я установил в своем файле свойств. Но для меня не имеет смысла, почему выходной файл создается, но остается пустым.
Возможно, я слишком много думаю, что здесь не так. Может ли кто-нибудь пролить свет?
Моя цель — использовать последнюю версию log4j и повторно использовать один и тот же регистратор в моем приложении, которое, кстати, является приложением JavaFX с несколькими контроллерами. В идеале каждая часть приложения должна использовать один и тот же объект журнала.
Подробнее здесь: https://stackoverflow.com/questions/785 ... -my-log-le