【问题标题】:Log4j configuration with different logger level for the same class or package同一类或包的不同记录器级别的 Log4j 配置
【发布时间】:2017-12-19 21:49:59
【问题描述】:

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

org.apache.axis.client=INFO

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

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

【问题讨论】:

    标签: java logging log4j axis


    【解决方案1】:

    记录轴故障的解决方案是扩展 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());
        }
      }
    }
    

    在全局配置请求流中设置handler也是强制性的,在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。 ¿ 我可以用一个通用的 SoapHandler 来做这件事吗?
    • 是的,您可以将上面的修改为“SoapAction”
    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2018-07-10
    • 2011-08-04
    相关资源
    最近更新 更多