import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class AzulMain {
private static final Logger LOGGER = LogManager.getLogger(AzulMain.class.getName());
public static void main(String[] args){
LOGGER.info("Maybe my first Logger works?");
}
}
导入工作正常。我使用这些jar文件:
- log4j-1.2-api-2.17.2.jar
- log4j-api.2.17.2.jar
- log4j-core-2.17.2.jar
这是我的XML文件(log4j2.xml)的样子。它和我的AzulMain
在同一个文件夹中:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Properties>
<Property name="log-path">log/${date:yyyy-MM-dd HH-mm-ss-SSS}</Property>
<Property name="archive">${log-path}/archive</Property>
</Properties>
<Appenders>
<Console name="Console-Appender" target="SYSTEM_OUT">
<PatternLayout>
<pattern>
%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n
</pattern>
</PatternLayout>
</Console>
<File name="File-Appender-AzulMain" fileName="${log-path}/Azul.log">
<PatternLayout>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n
</pattern>
</PatternLayout>
</File>
<RollingFile name="RollingFile-Appender"
fileName="${log-path}/rollingfile.log"
filePattern="${archive}/rollingfile.log.%d{yyyy-MM-dd@HH-mm}.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="30 MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="AzulMain" level="trace" additivity="false">
<AppenderRef ref="File-Appender-AzulMain" level="all"/>
<AppenderRef ref="Console-Appender" level="info"/>
</Logger>
<Root level="debug" additivity="false">
<AppenderRef ref="Console-Appender"/>
</Root>
</Loggers>
</Configuration>
到目前为止,当我使用JavaUtilLogger时,一切都运行得很好,我可以让它创建一个文件并打印到控制台,但是,使用log4j时什么都不工作。
我测试了删除XML文件并将BasicConfigurator.configure()
添加到我的main-method中,但仍然不起作用。如果我启动main-method,得到的只是:Process finished with exit code 0
让我感到奇怪的是,当我使用命令java -Dlog4j.debug -cp AzulMain
时,它并没有像我所期望的那样显示我的配置,而是显示了一条似乎非常通用的帮助消息。
这是我第一次使用记录器,有人知道可能是什么问题吗?
更新:这帮助我迈出了第一步:
BasicConfigurator replacement in log4j2
我删除了XML文件并使用了新的
Configurator.initialize(new DefaultConfiguration());
Configurator.setRootLevel(Level.INFO);
现在它至少可以打印到控制台了。但是,我仍然不能让它使用log4j2.xml文件。我也试着把它命名为log4j2-test.xml。(Source)这没有什么区别。
1条答案
按热度按时间nhhxz33t1#
现在成功了。我就是这么做的。
我建立了一个新的项目,只有一个主类,并添加了一个新的xml文件,最初只有一个文件记录器,然后也添加了一个记录器到控制台。我删除了IntelliJ中的缓存,并删除了代码中的配置器行。
这是新的XML文件
log4j2.xml
,使其工作:在我看来,这似乎是一个错误的地方,在xml文件,我只是不能弄清楚它在哪里。