Как использовать postsharp с Serilog для разделения аспектов регистрации? - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в AOP, и я пытаюсь использовать PostSharp с SeriLog для регистрации моего MVC application.

Так что я нахожу этот пример sample какдля начала, но мне интересно, если в этом примере он использует регистратор явно следующим образом:

activity.Write(LogLevel.Warning, "The entity {id} has been marked for deletion.", item.Id);

в бизнес-классе QueueProcessor , то в чем здесь значение аспекта!Я все еще пишу код журнала вместе с бизнес-кодом!.


Может ли кто-нибудь помочь мне отделить выход из проекта MVC с помощью PostSharp.Patterns.Diagnostics.Backends.Serilog ?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы неправильно понимаете пример, позвольте мне уточнить.

В примере кода есть два вида регистрации.Вы нашли очевидное, activity.Write(xxx).Этот вид регистрации не покрывается использованием AOP-фреймворка, такого как PostSharp.Этот вид ведения журнала можно рассматривать как часть бизнес-логики, поскольку он специфичен для выполняемых действий.

Теперь, с другой стороны: давайте предположим, что вы хотите регистрировать каждый и все вызовы для всехметоды в вашем приложении.Вы хотите войти, когда метод вызывается и с какими параметрами.Кроме того, вы хотите записать возвращенное значение, если оно есть.

Представьте, что для каждого метода нужно написать что-то вроде этого:

bool SomeMethod(int input)
{
    var sw = Stopwatch.StartNew();
    logger.Write($"Started executing {nameof(SomeMethod)} at {DateTime.Now}. Value of {nameof(input)}: {input})";

    ... // some work
    var returnValue = false;

    sw.Stop();
    logger.Write($"Finished executing {nameof(SomeMethod)}. It took {sw.ElapsedMilliseconds}ms. Returned value: {returnValue}");

    return returnValue;
}

Теперь , что является крестикоми , что - это то, что демонстрирует пример.Этот сантехнический код вводится PostSharp, просто делая это в program.cs :

using PostSharp.Patterns.Diagnostics;
using PostSharp.Patterns.Diagnostics.Backends.Serilog;
using PostSharp.Samples.Logging.BusinessLogic;
using Serilog;

// Add logging to all methods of this project.
[assembly: Log]
    ...

Подробнее здесь

Теперь, наВ конце давайте вернемся к вашему вопросу:

Может ли кто-нибудь помочь мне отделить выход из MVC-проекта с помощью PostSharp.Patterns.Diagnostics.Backends.Serilog?

Я не уверен, что вы ожидаете от какой-либо инфраструктуры AOP в отношении настраиваемой регистрации в коде бизнес-логики.Не могли бы вы расширить это?Или приведенного выше пояснения достаточно?

Редактировать: решение проблем из вашего комментария

  1. Я не думаю, что пример PostSharp является примером DDD.Они просто демонстрируют, что регистратор, используемый для аспекта, может также использоваться для регистрации информации, связанной с бизнесом (объект помечен для удаления.) В DDD, если эта информация имеет отношение к кому-либо или чему-либо, это будет событие, которое может быть зарегистрировано с использованием аспекта.
  2. Создание контрольного журнала с использованием аспектов аудита для записи событий, безусловно, является правильным способом сделать это.Что касается уровня представления, вы можете использовать некоторое промежуточное программное обеспечение для регистрации запросов и ответов, например, как показано здесь .В этом случае нет необходимости использовать PostSharp.В зависимости от вашего кода событий в приложении DDD, вы можете перехватывать события до или после их отправки, чтобы вы могли также записывать свои собственные записи в журнал, устраняя необходимость в PostSharp.
  3. Пробовали ли вышаги слушали в ответах на вопрос, который был отмечен как дубликат?
0 голосов
/ 28 ноября 2018

Когда вы используете аспект LogAttribute, PostSharp автоматически генерирует код, который генерирует записи журнала до и после выполнения метода.Но бывают моменты, когда вы захотите написать свои собственные записи.Например, вы можете записать пользовательскую ошибку или предупреждение.Вы можете захотеть, чтобы это сообщение отображалось, даже если ведение журнала на уровне трассировки отключено.Но когда он включен, вы хотите, чтобы это сообщение отображалось в правильном контексте с правильным отступом.Для этих сценариев вы можете использовать методы, предоставляемые классом Logger.

В примере класса некоторые пользовательские журналы добавляются вручную относительно бизнес-логики.


Во-первыхВы должны скачать его отсюда: https://www.postsharp.net/download

Когда вы устанавливаете плагин, создайте проект в Visual Studio.В обозревателе решений, щелкнув правой кнопкой мыши проект или файл кода, щелкнув правой кнопкой мыши имя класса или метода, вы можете добавить PostSharp в свой проект.

Конфигурация и атрибуты по умолчанию добавляются в проект.После этого вы измените конфигурации, форматирование, возможно, добавите настраиваемые классы аспектов на основе ваших потребностей.

Для продолжения чтения этих документов будет полезно:

https://doc.postsharp.net/logging

https://doc.postsharp.net/serilog

...