我有一个简单的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);
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过向日志条目添加有关方法参数的信息来使此属性更加灵活,但仅在需要时才这样做.
[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
}
}
Run Code Online (Sandbox Code Playgroud)
带有IF的伪代码是我不知道该怎么做的.如何将其传递给属性?我希望它看起来像这样,但我不知道如何在属性代码中处理它:
[MethodLogging(ShowParameters=true)]
public void SomeCrazyMethod(int CustomerId, string SecretName) {...}
Run Code Online (Sandbox Code Playgroud)
Mar*_*rst 21
只需声明一个属性
[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; }
}
}
然后你可以用你提到的方式指定它.