3

我正在通过内置的日志记录机制记录 ServiceStack 中的所有 API 调用。我想知道是否有某种方法可以拦截日志调用并在保存数据之前清理数据以摆脱密码之类的东西。

4

1 回答 1

3

您可以只实现自己的适配器ILogFactoryILog类,它们就像当前配置的记录器的代理一样,例如:

LogManager.LogFactory = new ScrubberLogFactory(LogManager.LogFactory);

ScrubberLogFactory 将只是一个包装器并将调用委托给真正的 LogFactory,例如:

class ScrubberLogFactory : ILogFactory
{
  ILogFactory logFactory;

  public ScrubberLogFactory(ILogFactory logFactory)
  {
    this.logFactory = logFactory;
  }

  public ILog GetLogger(Type type)
  {
    return new ScrubLogger(logfactory.GetLogger(type));
  }

  public ILog GetLogger(string typeName)
  {
    return new ScrubLogger(logfactory.GetLogger(typeName));
  }
}

ScrubLogger 是另一个适配器类,它拦截所有日志记录调用,然后您可以在将其委托给底层记录器之前执行您需要的操作(即清理日志记录信息)。

于 2013-06-21T20:57:06.837 回答