Выбор интерфейса для использования в вашем приложении - дело вкуса. Если вы предпочитаете более короткие имена методов Serilog ILogger
(например, log.Error
против log.LogError
), go с этим, в противном случае используйте шаблон Microsoft c ILogger<>
. У вас есть контроль над всеми зависимостями, которые вы используете в своих собственных проектах, поэтому нет веских технических причин для предпочтения одной над другой.
Возможно, вам будет интересно прочитать эту проблему в репозитории Serilog:
Должен ли я использовать Microsoft.Extensions.Logging.ILogger или Serilog.ILogger? .
Я лично использую ILogger
Serilog во всех своих проектах не только потому, что я Я предпочитаю более короткие имена методов, но также потому, что я предпочитаю , а не , чтобы вводить регистратор в каждый отдельный конструктор каждого класса, и также легко иметь контекстный регистратор для каждого класса , используя Log.ForContext<>
, что полезно при устранении неполадок. Например,
public class SomeService
{
private readonly ILogger _log = Log.ForContext<SomeService>();
// ...
}
public class SomeRepository
{
private readonly ILogger _log = Log.ForContext<SomeRepository>();
// ...
}
Если вы разрабатываете библиотеку , я бы, конечно, рекомендовал использовать generi c ILogger<>
от Microsoft вместо зависимости от Serilog
и заставляет пользователей вашей библиотеки также принимать зависимость от Serilog
.
Log.Logger
является поточно-ориентированной, поэтому регистрация в качестве одиночного, как вы делаете выше, правильна, если вы хотите, чтобы все классы совместно использовали один и тот же экземпляр ( без SourceContext
s ) - в этом нет ничего плохого.