我有一个简单的 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) {...}
最佳答案
只需声明一个属性
[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); } } private bool m_ShowParameters; public bool ShowParameters { get { return m_ShowParameters; } set { m_ShowParameters = value; } } }
然后你就可以按照你说的方式来指定了。
关于c# - 如何向 PostSharp 属性添加参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737833/