У меня есть простой атрибут PostSharp протоколирования:Как добавить аргументы в атрибуты 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) {...}
Отличный ответ. Есть ли способ получить доступ и установить это свойство внутри метода, в котором применяется атрибут? –
К сожалению, не все свойства атрибутов должны быть установлены и доступны во время компиляции, поэтому вы не можете установить их во время выполнения. –