如何在JAX-WS Java Web服务中使用Log4j2

Pfl*_*ugs 4 java configuration web-services jax-ws log4j2

正如之前的StackOverflow问题中所述,我正在学习如何使用JAX-WS(用于XML Web服务的Java API).我在之前的可执行Java程序中使用了Log4j2,我想用它来记录Web服务请求.如何在此JAX-WS教程中将Log4j2添加到基本代码中?

Pfl*_*ugs 5

以下是我解决这个问题的方法:

程序

  1. Apache项目站点下载最新的Log4j2库.
  2. 解压缩Log4j2压缩文件夹,并将以下文件复制到项目的lib文件夹中.
    • log4j的-API-2.3.jar
    • log4j的核心-2.3.jar
  3. 如果您希望通过电子邮件发送日志,则还需要将以下文件复制到项目的lib文件夹中:
    • log4j的-网络2.3.jar
    • javax.mail.jar(可以在这里下载)
  4. 确保在Netbeans项目中设置对复制的JAR文件的引用: 添加引用的屏幕截图
  5. 将名为log4j2.xmlSource Packages文件添加到该文件夹中(参见上面的屏幕截图).我的log4j2.xml文件的内容在下面用作起点.
    • 请注意,我故意将日志文件放在该{$Tomcat}\logs文件夹中.我最初将应用程序的日志文件放在该{$Tomcat}\webapps\HelloWorld文件夹中.但是,我了解到Tomcat会在日志文件上保留文件锁定,以防止"热部署/取消部署",从而导致部署不完整,Web应用程序无法正常工作.有关详细信息,在此页面上搜索antiResourceLocking.
<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>
Run Code Online (Sandbox Code Playgroud)
  1. web.xml文件中,添加以下代码段:
<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>log4j2.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
  1. 现在所有的设置都已完成,所以是时候添加一些日志了!您可以自由添加自己的日志记录步骤,但这是我修改HelloWorldImpl.java文件的方法.
    • 请注意,我故意记录并抛出异常.我这样做是因为我正在测试我的log4j2.xml配置,以确保在记录异常时发送电子邮件.
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;
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 最后,将应用程序编译为WAR文件并部署到Tomcat服务器.然后,在向服务提交请求之后,应用程序现在将执行日志记录.

我希望这是有帮助的! - Pflugs

参考