Microsoft.Extensions.Logging
(source 참조)은 ASP.NET 코어의 일부가 아니며 독립적으로 실행할 수 있습니다. 당신이해야 할 일은 ILoggerFactory
과 ILogger<>
인터페이스를 등록하는 것입니다.
ILoggerFactory
is used byLogger<T>
실제 로거를 인스턴스화합니다.
콘솔 응용 프로그램에서 로깅 확장을 사용하는 경우 IServiceCollection
을 계속 사용하는 것이 좋습니다. IServiceCollection
extension methods을 사용하면이 패턴을 지원하는 모든 패키지를 등록 할 수 있습니다. 당신이 클래스 Microsoft.Extensions.DependencyInjection
통합 지원 기능이있는 라이브러리에 등록 할 필요가 구체적으로 생각하지 않습니다으로
var services = new ServiceCollection();
services.AddLogging();
// Initialize Autofac
var builder = new ContainerBuilder();
// Use the Populate method to register services which were registered
// to IServiceCollection
builder.Populate(services);
// Build the final container
IContainer container = builder.Build();
이
은 권장되는 방법입니다.
물론 수동으로 등록 할 수도 있지만 Microsoft.Extensions.Logging
라이브러리 (새 종속성이 추가됨)가 변경되면 얻을 수 없으며 먼저 오류를 찾기 위해 into the source code을 알아 내거나 찾아야합니다.
var loggerFactory = container.Resolve<ILoggerFactory>();
loggerFactory.AddConsole()
.AddSerilog();
및 서비스
은 평소와 같이
ILogger<MyService>
를 주입 : 남아있는 모두
builder.RegisterType<LoggerFactory>()
.As<ILoggerFactory>()
.SingleInstance();
builder.RegisterType(typeof(Logger<>))
.As(typeof(ILogger<>))
.SingleInstance();
는 컨테이너가 내장 또는 응용 프로그램이 시작하기 전에 한 후 로거 유형을 등록하는 것입니다.
"LoggerFactory가 존재하지 않는 환경"이란 무엇을 의미합니까? LoggerFactory는 ASP.NET Core의 일부가 아니며 Microsoft.Extensions.Logging 패키지의 일부입니다. https://github.com/aspnet/Logging/blob/dev/src/Microsoft.Extensions.Logging/LoggerFactory.cs – Tseng