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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j配置具有相同类或包的不同记录器级别相关的知识,希望对你有一定的参考价值。

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

org.apache.axis.client = INFO

但是,我需要为此客户端配置不同的记录器级别,具体取决于使用AXIS客户端的类或方法。

是否有可能为此目的配置log4j?

答案

记录Axis Faults的解决方案是扩展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"/>

以上是关于Log4j配置具有相同类或包的不同记录器级别的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用类或整个包的记录器?

log4j配置只打印指定jar或包的DEBUG信息

Log4j 为每个 appender 设置不同的日志记录级别

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

如何在某些 java 类或包上限制 createObject()?

JVM 性能排查 自己做的笔记