log4j2 在测试时写入文件,而不是在部署时

log4j2 writing in file when testing, not when deploying

我正在使用 jax-rs 构建 Web 服务,并希望在调用 url 时记录一些内容。我发现了 log4j 2 并决定使用它。 我不知道为什么,但是当我做一些测试时它会起作用

Response response = target("user/v1/"+alfred.getPseudo()).request().get();
assertTrue(response.getStatus() < 300);

这会将日志字符串放入 logs/logs.log(我喜欢日志)。 然而,当我部署(使用 glassfish 4.1.1)时,当我调用相同的 URL.

时,它不会在文件中写入一个字符

这是我的 log4j2.xml(位于 src/main/resources):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
       <File name="File" fileName="logs/logs.log">
           <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%t] %c{1} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="File"/>
        </Root>
   </Loggers>
</Configuration>

我的 web.xml 是空的:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
</web-app>

我的 pom.xml.

中有 lo4j-api 和 log4j-core,都是 2.5

最后,这是代码:

private final static Logger logger = LogManager.getLogger(MyClass.class);

我只是调用 logger.info(String)logger.error(String).

我哪里做错了,我应该怎么做才能在部署时创建日志?

谢谢。

编辑: 也许这会有所帮助。我以前

<File name="File" fileName="logs/logs.log" bufferedIO="false">

我在测试的时候,有一个警告"Hey, you set bufferedIO to false but the default buffer size is 8192, wtf"。当我在实际部署期间调用 url 时,会显示此警告。我想这意味着我的配置在部署时也被检测到了。

我想你需要在 web.xml 中告知位置。

<context-param> <param-name>log4jConfiguration</param-name> <param-value>WEB-INF/classes/log4j2.xml</param-value> </context-param>

请检查 log4j2.xml 位置的部署并相应地更改 param-value

但建议在WAR级别使用log4j2.xml。所以很容易找到和改变。

好的,所以我明白了我的错误:

我试图将文件写入应用程序的目录中。 已更改

<File name="File" fileName="logs/logs.log">
    <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%t] %c{1} - %msg%n"/>
</File>

<File name="File" fileName="c:/logs.log">
     <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%t] %c{1} - %msg%n"/>
</File>

而且有效!