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

How to use Log4j2 in a JAX-WS Java Web Service

, I am learning how to use JAX-WS (Java API for XML Web Services). I've used Log4j2 in previous executable Java programs, and I'd like to use it for logging web service requests. How can I add Log4j2 to the base code in this JAX-WS tutorial?

中所述

我是这样解决这个问题的:

程序

  1. the Apache project site 下载最新的 Log4j2 库。
  2. 解压Log4j2压缩文件夹,将以下文件复制到项目的lib文件夹中。
    • log4j-api-2.3.jar
    • log4j-core-2.3.jar
  3. 如果您希望通过电子邮件发送日志,您还需要将以下文件复制到项目的 lib 文件夹中:
    • log4j-web-2.3.jar
    • javax.mail.jar(可下载here
  4. 务必在 Netbeans 项目中设置对复制的 JAR 文件的引用:
  5. 将名为 log4j2.xml 的文件添加到 Source Packages 文件夹(见上面的屏幕截图)。下面是我的 log4j2.xml 文件的内容,用作起点。
    • 请注意,我有意将日志文件放在 {$Tomcat}\logs 文件夹中。我最初将应用程序的日志文件放在 {$Tomcat}\webapps\HelloWorld 文件夹中。但是,我了解到 Tomcat 对日志文件保持文件锁定,这将阻止 "hot deploy/undeploy",导致不完整的部署和无法运行的 Web 应用程序。有关详细信息,请在 page.
    • 上搜索 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>
  1. web.xml 文件中,添加以下代码段:
<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>log4j2.xml</param-value>
</context-param>
  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;
    }
}
  1. 最后,将应用程序编译为 WAR 文件并部署到您的 Tomcat 服务器。然后,在向服务提交请求后,应用程序现在将执行日志记录。

希望对您有所帮助! - Pflugs

参考资料