15

我有一个简单的 PostSharp 日志记录属性:

[Serializable]
public class MethodLoggingAttribute : OnMethodBoundaryAspect
{
    private ILog _logger;
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    {
        _logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());
        _logger.DebugFormat("Entered {0}", eventArgs.Method.Name);
    }
}

我想通过将有关方法参数的信息添加到日志条目来使此属性更加灵活,但前提是它需要。

[Serializable]
public class MethodLoggingAttribute : OnMethodBoundaryAspect
{
    private ILog _logger;
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    {
        _logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());

        // if ShowParameters = true
        _logger.DebugFormat("Entered {0} with args:{1}", eventArgs.Method.Name, args);
        // else
        _logger.DebugFormat("Entered {0}", eventArgs.Method.Name);
        // endif
    }
}

带有 IF 的伪代码是我不知道该怎么做的。如何将其传递给属性?我希望它看起来像这样,但我不知道如何在属性代码中处理它:

[MethodLogging(ShowParameters=true)]
public void SomeCrazyMethod(int CustomerId, string SecretName) {...}
4

1 回答 1

21

只需声明一个属性

[可序列化]
公共类 MethodLoggingAttribute : OnMethodBoundaryAspect
{
    私人 ILog _logger;
    公共覆盖无效 OnEntry(MethodExecutionEventArgs eventArgs)
    {
        _logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());
        如果(显示参数 = 真)
        {
            _logger.DebugFormat("输入的 {0} 带有 args:{1}", eventArgs.Method.Name, args);
        }
        别的
        {
            _logger.DebugFormat("输入 {0}", eventArgs.Method.Name);
        }
    }

    私人布尔 m_ShowParameters;

    公共布尔显示参数
    {
        得到 { 返回 m_ShowParameters; }
        设置 { m_ShowParameters = 值;}
    }
}

然后您可以按照您提到的方式指定它。

于 2009-04-24T10:35:31.703 回答