Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同一类或包具有不同记录器级别的Log4j配置_Java_Logging_Log4j_Axis - Fatal编程技术网

Java 同一类或包具有不同记录器级别的Log4j配置

Java 同一类或包具有不同记录器级别的Log4j配置,java,logging,log4j,axis,Java,Logging,Log4j,Axis,现在我正在使用AXIS客户端连接一些Web服务。我在log4j属性中配置了记录器级别,如下所示: org.apache.axis.client=INFO 但是,我需要根据使用AXIS客户端的类或方法,为此客户端配置不同的记录器级别 是否有可能为此配置log4j?记录轴故障的解决方案是扩展OnFault方法: import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.axis.AxisFault; impo

现在我正在使用AXIS客户端连接一些Web服务。我在log4j属性中配置了记录器级别,如下所示:

org.apache.axis.client=INFO

但是,我需要根据使用AXIS客户端的类或方法,为此客户端配置不同的记录器级别


是否有可能为此配置log4j?

记录轴故障的解决方案是扩展OnFault方法:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;

public class SOAPLogHandler extends BasicHandler {

  private static final String AXIS = "AXIS";
  private static final String AXIS_FAULT = "AXIS FAULT";
  private static Logger LOG = LoggerFactory.getLogger(SOAPLogHandler.class);
  private static final long serialVersionUID = 1;

  @Override
  public void invoke(MessageContext msgContext) throws AxisFault {
    logMessage(AXIS, msgContext);
  }

  @Override
  public void onFault(MessageContext msgContext) {
    try {            
        logMessage(AXIS_FAULT,msgContext);
    } catch (AxisFault axisFault) {
        LOG.error("Error on logging messages ",axisFault);
    }
  }

  private void logMessage(String preamble, MessageContext msgContext) throws AxisFault {
    if (msgContext.getResponseMessage() != null && msgContext.getResponseMessage().getSOAPPart() != null) {
        LOG.info("{} Response ={}",preamble ,msgContext.getResponseMessage().getSOAPPartAsString());
        return;
    }

    if (msgContext.getRequestMessage() != null && msgContext.getRequestMessage().getSOAPPartAsString() != null) {
        LOG.info("{} Request={}",preamble,msgContext.getRequestMessage().getSOAPPartAsString());
    }
  }
}
还必须在全局配置请求流中设置处理程序,wsdd文件中的处理程序如下所示:

<globalConfiguration>     
  <requestFlow>
    <handler type="log" />
  </requestFlow>
  <responseFlow>
    <handler type="log" />
  </responseFlow>
</globalConfiguration>

<handler name="log" type="java:your.package.SOAPLogHandler"/>


谢谢您的回答。这可以控制AxisFault。但是,我希望控制任何AXIS请求或响应的记录器级别,并根据WS,强制级别为INFO或ERROR。我可以用genereic SoapHandler获取SoapAction吗?是的,您可以将上面的一个修改为“SoapAction”