我正在使用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">
当我进行测试时,我收到了警告&#34;嘿,你将bufferedIO设置为false,但默认缓冲区大小为8192,wtf&#34;。当我在实际部署期间调用URL时,会显示此警告。我想这意味着在部署时也会检测到我的配置。
答案 0 :(得分: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
。所以很容易找到并改变。
答案 1 :(得分: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>
它有效!