2016-05-28 27 views
0

我正在使用jax-rs构建Web服务,并且希望在调用URL时记录一些内容。我发现log4j 2并决定使用它。 我不知道为什么,但是当我做了一些测试,它的工作原理log4j2在测试时写入文件,而不是在部署时写入

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

这将使在日志日志字符串/ logs.log(我爱日志)。然而,当我部署时(使用glassfish 4.1.1),当我调用相同的URL时,它不会在文件中写入单个字符。

这里是我的log4j2.xml(放在src /主/资源):

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

我有lo4j的API和log4j的核心,无论是2.5 ,在我的pom.xml中。

最后,这里是代码:

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个,跆拳道”。当我在实际部署过程中调用URL时,这个警告就显示出来了。我想这意味着我的配置在部署时被检测到。

回答

0

好了,所以我明白这个我的错误: 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> 

和它的作品!

0

你需要告诉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。所以很容易找到和改变。

+0

感谢您的回答。不幸的是,把xml文件放在'WEB-INF/classes'中,并添加你在'web中给出的上下文参数。xml'没有这样做。它不再适用于测试(我猜这可能是正常的),并且不会在'logs.log'中添加任何行 – Ghalnas