У меня есть простой атрибут регистрации 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) {...}