如何在JAX-WS Java Web服务中使用Log4j2
如a中所述,我正在学习如何使用JAX-WS(用于XML Web服务的Java API)。我在以前的可执行Java程序中使用过,我想用它来记录web服务请求。如何将Log4j2添加到中的基本代码?以下是我解决此问题的方法: 程序如何在JAX-WS Java Web服务中使用Log4j2,java,web-services,configuration,jax-ws,log4j2,Java,Web Services,Configuration,Jax Ws,Log4j2,如a中所述,我正在学习如何使用JAX-WS(用于XML Web服务的Java API)。我在以前的可执行Java程序中使用过,我想用它来记录web服务请求。如何将Log4j2添加到中的基本代码?以下是我解决此问题的方法: 程序 从下载最新的Log4j2库 解压缩Log4j2压缩文件夹,并将以下文件复制到项目的lib文件夹中。 log4j-api-2.3.jar log4j-core-2.3.jar 如果希望通过电子邮件发送日志,还需要将以下文件复制到项目的lib文件夹: log4j-web
lib
文件夹中。
- log4j-api-2.3.jar
- log4j-core-2.3.jar
lib
文件夹:
- log4j-web-2.3.jar
- javax.mail.jar(可下载)
sourcepackages
文件夹(参见上面的屏幕截图)。下面是我的log4j2.xml文件的内容,用作起点。
- 注意,我故意将日志文件放在
文件夹中。我最初将应用程序的日志文件放在{$Tomcat}\logs
文件夹中。然而,我了解到Tomcat在日志文件上保留文件锁,这将防止“热部署/取消部署”,导致部署不完整和web应用程序无法工作。有关详细信息,请在此网站上搜索反资源追踪{$Tomcat}\webapps\HelloWorld
- (特别是要包含在WEB-INF/lib中的JAR文件)
- (Apache文档)
- (如果您希望通过电子邮件发送日志中的错误)
- (帮助我理解Tomcat为什么要锁定日志文件)
<Configuration status='off'>
<Properties>
<Property name='logFilePath'>logs/HelloWorld.log</Property>
</Properties>
<Appenders>
<Console name='Console' target='SYSTEM_OUT'>
<PatternLayout pattern='%m%n'/>
</Console>
<File name='File' fileName='${logFilePath}'>
<PatternLayout>
<Pattern>%d %-5p %m%n</Pattern>
</PatternLayout>
</File>
<SMTP name='Email' subject='JAX-WS Hello World Tutorial Web Service' to='matthew.pfluger@plexus.com' from='noreply-AgileUserManager@plexus.com'
smtpHost='intranet-smtp.plexus.com' smtpPort='25' bufferSize='10000'>
<PatternLayout>
<Header>One or more errors occurred! Please see the full log file at: ${logFilePath}.%n</Header>
<Pattern>%d %-5p %m%n</Pattern>
</PatternLayout>
</SMTP>
</Appenders>
<Loggers>
<Root level='debug'>
<AppenderRef ref='File'/>
<AppenderRef ref='Console'/>
<AppenderRef ref='Email'/>
</Root>
</Loggers>
</Configuration>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>log4j2.xml</param-value>
</context-param>
package com.mkyong.ws;
import javax.jws.WebService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@WebService(endpointInterface = "com.mkyong.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
private static final Logger logger = LogManager.getLogger(HelloWorldImpl.class);
@Override
public String getHelloWorldAsString() throws Exception {
logger.entry();
logger.info("Request received");
logger.exit();
final Exception exception = new Exception("What the heck happened?");
logger.error(exception);
throw exception;
}
}