【问题标题】:log4j2 writing in file when testing, not when deployinglog4j2 在测试时写入文件,而不是在部署时写入
【发布时间】:2016-05-28 23:33:51
【问题描述】:

我正在使用 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">

当我在测试时,我收到一条警告“嘿,您将 bufferedIO 设置为 false,但默认缓冲区大小是 8192,wtf”。当我在实际部署期间调用 url 时,会显示此警告。我想这意味着在部署时也检测到了我的配置。

【问题讨论】:

    标签: maven jax-rs log4j2


    【解决方案1】:

    我想你需要告诉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。因此很容易找到和更改。

    【讨论】:

    • 感谢您的回答。不幸的是,将 xml 文件放入 WEB-INF/classes 并添加您在 web.xml 中提供的上下文参数并没有这样做。它不再适用于测试(我想这可能是正常的),并且仍然没有在logs.log中添加任何行@
    【解决方案2】:

    好的,所以我从这里理解了我的错误: https://stackoverflow.com/a/8486370/5670024

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

    <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>
    

    它有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多