使用CXF中的log4j登录和注销Interceptor消息

时间:2015-11-27 14:55:01

标签: java web-services rest log4j cxf

我正在尝试使用log4j将我的其余web服务的LoggingInInterceptor和LoggingOutInterceptor消息从控制台重定向到文件,如下所示,

cxf.xml

        <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xmlns:cxf="http://cxf.apache.org/core"
    xsi:schemaLocation="
    http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://cxf.apache.org/jaxrs
    http://cxf.apache.org/schemas/jaxrs.xsd">

        <jaxrs:server id="base" address="/Restful">

            <jaxrs:serviceBeans>
                <ref bean="Service" />
            </jaxrs:serviceBeans>

            <jaxrs:features>
                <cxf:logging />
            </jaxrs:features>

        </jaxrs:server>

    <bean id="Service" class="com.xxx.yyy.services.ServiceImpl" />

    </beans>

org.apache.cxf.Logger文件

org.apache.cxf.common.logging.Log4jLogger

log4j.properties

        # Root logger option
    log4j.rootLogger=INFO, file, stdout

    ## more informations
    # http://cxf.apache.org/docs/debugging-and-logging.html
    # Direct log messages to a log file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=D:\\ServiceLog.txt
    log4j.appender.file.MaxFileSize=1MB
    log4j.appender.file.MaxBackupIndex=1
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

其他详细信息,

CXF 3.1.4和Java 7

enter image description here

这里我在控制台中收到这两条消息,但它没有在文件中写入。

如果有人能在这里帮助我,我们将不胜感激。

谢谢,

3 个答案:

答案 0 :(得分:5)

确保在org.apache.cxf.Logger文件中输入一行文字

org.apache.cxf.common.logging.Log4jLogger

此外,请确保它是WAR类路径的一部分,因此一旦您的WAR正确打包,它应该在WEB-INF/classes/META-INF/cxf/org.apache.cxf.Logger下结束。

最后,查看您的log4j配置文件,您错过了将CXF记录器级别设置为INFO,如下所示:

log4j.appender.org.apache.cxf.Threshold=INFO

尝试在log4j配置的末尾添加此行。

答案 1 :(得分:2)

正如您可以阅读Apache CXF - Debbuging and Logging CXF使用Java SE Logging,但您可以更改日志记录实现:

  

如上所述,默认情况下,CXF使用java.util.logging包(“Java SE Logging”)。但是可以将CXF切换为使用Log4J。这是通过使用配置文件实现的。引导CXF日志记录有两个选项,每个选项列在下面:

     
      
  • 将以下系统属性添加到初始化CXF的类路径中:

         

    -Dorg.apache.cxf.Logger=org.apache.cxf.common.logging.Log4jLogger

  •   
  • 将文件META-INF/cxf/org.apache.cxf.Logger添加到类路径中,并确保它包含以下内容:

         

    org.apache.cxf.common.logging.Log4jLogger

  •   

您必须将META-INF/cxf/org.apache.cxf.Logger文件的内容从org.apache.cxf.Logger更改为org.apache.cxf.common.logging.Log4jLogger

答案 2 :(得分:0)

是的,这是解决方案,我们可以通过以下两种方式来实现,

  1. 通过在类路径中配置以下系统变量

    -Dorg.apache.cxf.Logger = org.apache.cxf.common.logging.Log4jLogger

  2. 供参考 - 这是我在eclipse中配置的方式

    enter image description here

    1. org.apache.cxf.Logger 文件放在 WEB-INF / classes / META-INF / cxf /