{"Serilog": {"MinimumLevel": {"Default":"Warning","Override": {"Microsoft.Hosting.Lifetime":"Information" } },"Properties": {"Application":"Axs WebApp" },"WriteTo": [ {"Name":"Async","Args": {"configure": [ {"Name":"File","Args": {"outputTemplate":"{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Properties:j}{NewLine}{Exception}","path":"Logs\\App-.log",// 파일명 - App-yyyyMMdd.log"fileSizeLimitBytes":10240000,// 파일 사이즈"rollingInterval":"Day",// 롤링 기준 - 하루 단위로 구별"rollOnFileSizeLimit":true,// 파일 사이즈 제한 여부"retainedFileCountLimit":5,// 파일 갯수"buffered":false,"shared":true,"encoding":"System.Text.Encoding::UTF8" } } ] } } ] } }
Serilog은 강력한 로깅 라이브러리입니다. 다른 형식과 다른 대상 (텍스트 파일, 데이터베이스 ...)으로 로그를 저장할 수 있습니다. 최소 로그 수준을 설정하여 로그 저장의 횟수를 지정할 수 있습니다. 자세한 내용은 Serilog의 환경설정 문서(documentation)를 참조하십시오.
마지막으로 Startup.cs 파일에서 appsettings.json 파일과 함께 Serilog의 환경 설정 정보를 사용하도록 합니다.
services.AddAxs<MyProjectNameWebMvcModule>(options => {options.IocManager.IocContainer.AddFacility<LoggingFacility>( f =>f.UseAxSerilog() );
웹과 호스트 프로젝트에서 초기화 코드를 추가하면 됩니다.
확인
appsettings.json에서 serilog 세셕에서 아래 정보를 확인하고 폴더에서 해당 로그 파일을 확인하면 된다.
2023-09-1908:09:19.192[INF] Starting web server...{"ThreadId":1}2023-09-1908:09:20.883[INF] Web Server Booting Up...{"SourceContext":"Default","ThreadId":1}2023-09-1908:07:20.563[INF] Initialize Seed Db.{"SourceContext":"MyCompanyName.MyProjectName.Persistence.MyProjectNamePersistenceModule","ThreadId":1}2023-09-1908:07:20.566[INF] >> Configuration.Modules.AxsEfCore().AddDbContext ....{"SourceContext":"MyCompanyName.MyProjectName.Persistence.MyProjectNamePersistenceModule","ThreadId":1}2023-09-1908:07:20.972[INF] Executed DbCommand (3ms) [Parameters=[@__language_Name_1='ko' (Size = 128)], CommandType='Text', CommandTimeout='30']SELECT CASE WHEN EXISTS ( SELECT 1 FROM [AxsLanguages] AS [a] WHERE [a].[TenantId] IS NULL AND ([a].[Name] = @__language_Name_1)) THEN CAST(1 AS bit) ELSE CAST(0 AS bit)END{"SourceContext":"Microsoft.EntityFrameworkCore.Database.Command","ThreadId":1}2023-09-1908:09:35.834[DBG]Debug!!!!!{"SourceContext":"MyCompanyName.MyProjectName.Web.Areas.App.Pages.Users.IndexModel","CorrelationId":"87449cf6-c4bf-40d4-9390-116ea4cd35fe","ThreadId":21}2023-09-1908:09:35.834[INF]Info!!!!!{"SourceContext":"MyCompanyName.MyProjectName.Web.Areas.App.Pages.Users.IndexModel","CorrelationId":"87449cf6-c4bf-40d4-9390-116ea4cd35fe","ThreadId":21}2023-09-1908:09:35.834[WRN]Warn!!!!!{"SourceContext":"MyCompanyName.MyProjectName.Web.Areas.App.Pages.Users.IndexModel","CorrelationId":"87449cf6-c4bf-40d4-9390-116ea4cd35fe","ThreadId":21}2023-09-1908:09:39.015[ERR] 에러 로깅 테스트{"SourceContext":"Axs.AspNetCore.Mvc.ExceptionHandling.AxsExceptionPageFilter","CorrelationId":"87449cf6-c4bf-40d4-9390-116ea4cd35fe","ThreadId":21,"ExceptionDetail":{"Type":"System.ApplicationException","HResult":-2146232832,"Message":"에러 로깅 테스트","Source":"MyCompanyName.MyProjectName.Web.Mvc","TargetSite":"Void MoveNext()"}}System.ApplicationException: 에러 로깅 테스트 at MyCompanyName.MyProjectName.Web.Areas.App.Pages.Users.IndexModel.OnGetAsync() in ...\Index.cshtml.cs:line 29 at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.ExecutorFactory.NonGenericTaskHandlerMethod.Execute(Object receiver, Object[] arguments) at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeHandlerMethodAsync() at Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker.InvokeNextPageFilterAsync()