{"id":25549663,"url":"https://github.com/netlah/serilog","last_synced_at":"2025-08-15T00:39:49.791Z","repository":{"id":50121828,"uuid":"365420241","full_name":"NetLah/serilog","owner":"NetLah","description":"Initializing Serilog and wrapping Serilog to `Microsoft.Extensions.Logging.ILogger` for ASP.NETCore, hosting and ConsoleApp","archived":false,"fork":false,"pushed_at":"2025-04-04T07:55:32.000Z","size":124,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-22T19:52:12.294Z","etag":null,"topics":["aspnetcore","dotnet","log","log4net","logging","netcore","nlog","serilog"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NetLah.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-08T04:42:20.000Z","updated_at":"2025-04-09T04:08:47.000Z","dependencies_parsed_at":"2024-11-15T09:29:38.310Z","dependency_job_id":"742062d0-99a0-4fb3-80a5-5868ef898416","html_url":"https://github.com/NetLah/serilog","commit_stats":{"total_commits":57,"total_committers":1,"mean_commits":57.0,"dds":0.0,"last_synced_commit":"783c54d7aa6d5cda65207924e9e8e3ca5c04e4d9"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/NetLah/serilog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fserilog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fserilog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fserilog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fserilog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NetLah","download_url":"https://codeload.github.com/NetLah/serilog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NetLah%2Fserilog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270505995,"owners_count":24596506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-14T02:00:10.309Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aspnetcore","dotnet","log","log4net","logging","netcore","nlog","serilog"],"created_at":"2025-02-20T10:19:17.842Z","updated_at":"2025-08-15T00:39:49.765Z","avatar_url":"https://github.com/NetLah.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NetLah.Extensions.Logging.Serilog - .NET Library\n\n[NetLah.Extensions.Logging.Serilog](https://www.nuget.org/packages/NetLah.Extensions.Logging.Serilog/) and [NetLah.Extensions.Logging.Serilog.AspNetCore](https://www.nuget.org/packages/NetLah.Extensions.Logging.Serilog.AspNetCore/) are library contain a set of reusable utility classes for initializing Serilog and initializing `Microsoft.Extensions.Logging.ILogger` for ASP.NETCore, hosting application (Worker serivce) and ConsoleApp. The utility classes are `AppLog`, `AspNetCoreApplicationBuilderExtensions`, `AspNetCoreApplicationBuilderExtensions`, `HostBuilderExtensions`.\n\n## Nuget package\n\n[![NuGet](https://img.shields.io/nuget/v/NetLah.Extensions.Logging.Serilog.svg?style=flat-square\u0026label=nuget\u0026colorB=00b200)](https://www.nuget.org/packages/NetLah.Extensions.Logging.Serilog/)\n[![NuGet](https://img.shields.io/nuget/v/NetLah.Extensions.Logging.Serilog.AspNetCore.svg?style=flat-square\u0026label=nuget\u0026colorB=00b200)](https://www.nuget.org/packages/NetLah.Extensions.Logging.Serilog.AspNetCore/)\n\n## Build Status\n\n[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FNetLah%2Fserilog%2Fbadge%3Fref%3Dmain\u0026style=flat)](https://actions-badge.atrox.dev/NetLah/serilog/goto?ref=main)\n\n## Getting started\n\n### Reference\n\n- ConsoleApp: https://github.com/serilog/serilog/wiki/Getting-Started#example-application\n\n- WebApp: https://github.com/serilog/serilog-aspnetcore#serilogaspnetcore---\n\n- Two-stage initialization: https://github.com/serilog/serilog-aspnetcore#two-stage-initialization\n\n### Sample appsettings.json\n\n```json\n{\n  \"AllowedHosts\": \"*\",\n  \"Serilog\": {\n    \"Using\": [\"Serilog.Sinks.Console\"],\n    \"MinimumLevel\": {\n      \"Default\": \"Information\",\n      \"Override\": {\n        \"App\": \"Information\",\n        \"System\": \"Warning\",\n        \"Microsoft\": \"Warning\",\n        \"Microsoft.AspNetCore.Authentication\": \"Information\",\n        \"Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker\": \"Error\",\n        \"Microsoft.Hosting.Lifetime\": \"Information\"\n      }\n    },\n    \"WriteTo:0\": { \"Name\": \"Console\" },\n    \"Enrich\": [\"FromLogContext\", \"WithMachineName\"],\n    \"Destructure\": [\n      {\n        \"Name\": \"ToMaximumDepth\",\n        \"Args\": { \"maximumDestructuringDepth\": 4 }\n      },\n      {\n        \"Name\": \"ToMaximumStringLength\",\n        \"Args\": { \"maximumStringLength\": 100 }\n      },\n      {\n        \"Name\": \"ToMaximumCollectionCount\",\n        \"Args\": { \"maximumCollectionCount\": 10 }\n      }\n    ],\n    \"Properties\": {}\n  }\n}\n```\n\n### Sample appsettings.Development.json\n\n```json\n{\n  \"Serilog\": {\n    \"Using:1\": \"Serilog.Sinks.Debug\",\n    \"Using:2\": \"Serilog.Sinks.File\",\n    \"MinimumLevel\": {\n      \"Default\": \"Debug\",\n      \"Override\": {\n        \"App\": \"Debug\"\n      }\n    },\n    \"WriteTo:1\": { \"Name\": \"Debug\" },\n    \"WriteTo:2\": {\n      \"Name\": \"File\",\n      \"Args\": {\n        \"path\": \"Logs/sample-.log\",\n        \"rollingInterval\": \"Day\"\n      }\n    }\n    //\"WriteTo:3\": {\n    //  \"Name\": \"Seq\",\n    //  \"Args\": {\n    //    \"serverUrl\": \"https://seq\",\n    //    \"apiKey\": \"ZrV42...\"\n    //  }\n    //},\n  }\n}\n```\n\n### ASP.NETCore 6.0\n\n```csharp\nusing NetLah.Extensions.Logging;\n\nAppLog.InitLogger();\nAppLog.Logger.LogInformation(\"Application starting...\");\ntry\n{\n    var builder = WebApplication.CreateBuilder(args);\n    builder.UseSerilog(logger =\u003e logger.LogInformation(\"Application initializing...\"));\n\n    // Add services to the container.\n\n    builder.Services.AddControllers();\n\n    var app = builder.Build();\n\n    // Configure the HTTP request pipeline.\n\n    app.UseAuthorization();\n\n    app.MapControllers();\n\n    app.Run();\n}\ncatch (Exception ex)\n{\n    AppLog.Logger.LogCritical(ex, \"Application terminated unexpectedly\");\n}\nfinally\n{\n    Serilog.Log.CloseAndFlush();\n}\n```\n\n### ConsoleApp\n\n```csharp\nusing Microsoft.Extensions.Logging;\nusing NetLah.Extensions.Configuration;\nusing NetLah.Extensions.Logging;\n\nAppLog.InitLogger();\ntry\n{\n    AppLog.Logger.LogInformation(\"Application configure...\");   // write log console only\n\n    var configuration = ConfigurationBuilderBuilder.Create\u003cProgram\u003e(args).Build();\n    var logger = AppLog.CreateAppLogger\u003cProgram\u003e(configuration);\n\n    logger.LogInformation(\"Hello World!\");      //  write log to sinks\n}\ncatch (Exception ex)\n{\n    AppLog.Logger.LogCritical(ex, \"Application terminated unexpectedly\");\n}\nfinally\n{\n    Serilog.Log.CloseAndFlush();\n}\n```\n\n### ConsoleApp with Dependency Injection\n\n```csharp\nusing Microsoft.Extensions.Logging;\nusing NetLah.Extensions.Configuration;\nusing NetLah.Extensions.Logging;\n\nAppLog.InitLogger();\ntry\n{\n    AppLog.Logger.LogInformation(\"Application configure...\");   // write log console only\n\n    var configuration = ConfigurationBuilderBuilder.Create\u003cProgram\u003e(args).Build();\n    var logger = AppLog.CreateAppLogger\u003cProgram\u003e(configuration);\n    logger.LogInformation(\"Service configure...\");      // write log to sinks\n\n    IServiceCollection services = new ServiceCollection();\n    services.AddSingleton\u003cIConfiguration\u003e(configuration);\n    services.AddLogging();\n    services.AddSerilog();\n    services.AddScoped\u003cRunner\u003e();\n\n    await using var rootServiceProvider = services.BuildServiceProvider();\n\n    await using var scope = new AsyncDisposable\u003cIServiceScope\u003e(rootServiceProvider.CreateScope());\n\n    var runner = scope.Service.ServiceProvider.GetRequiredService\u003cRunner\u003e();\n    await runner.RunAsync().ConfigureAwait(false);\n}\ncatch (Exception ex)\n{\n    AppLog.Logger.LogCritical(ex, \"Application terminated unexpectedly\");\n}\nfinally\n{\n    Serilog.Log.CloseAndFlush();\n}\n\ninternal class AsyncDisposable\u003cTService\u003e : IAsyncDisposable where TService : IDisposable\n{\n    public AsyncDisposable(TService service) =\u003e this.Service = service;\n\n    public TService Service { get; }\n\n    public ValueTask DisposeAsync()\n    {\n        if (Service is IAsyncDisposable asyncDisposable)\n            return asyncDisposable.DisposeAsync();\n\n        Service.Dispose();\n#if NETCOREAPP3_1\n        return new ValueTask(Task.CompletedTask);\n#else\n        return ValueTask.CompletedTask;\n#endif\n    }\n}\n```\n\n### AspNetCore or Hosting application\n\n```csharp\nusing NetLah.Extensions.Logging;\n\npublic static void Main(string[] args)\n{\n    AppLog.InitLogger();\n    try\n    {\n        AppLog.Logger.LogInformation(\"Application configure...\");   // write log console only\n\n        CreateHostBuilder(args).Build().Run();\n    }\n    catch (Exception ex)\n    {\n        AppLog.Logger.LogCritical(ex, \"Host terminated unexpectedly\");\n    }\n    finally\n    {\n        Serilog.Log.CloseAndFlush();\n    }\n}\n\npublic static IHostBuilder CreateHostBuilder(string[] args) =\u003e\n    Host.CreateDefaultBuilder(args)\n        .UseSerilog2(logger =\u003e logger.LogInformation(\"Application initializing...\"))    //  write log to sinks\n        .ConfigureWebHostDefaults(webBuilder =\u003e\n        {\n            webBuilder.UseStartup\u003cStartup\u003e();\n        });\n\npublic class Startup\n{\n    public Startup(IConfiguration configuration)\n    {\n        AppLog.Logger.LogInformation(\"Startup constructor\");    //  write log to sinks\n        Configuration = configuration;\n    }\n\n    public void ConfigureServices(IServiceCollection services)\n    {\n        var logger = AppLog.Logger;\n        logger.LogInformation(\"ConfigureServices...\");          //  write log to sinks\n    }\n\n    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger\u003cStartup\u003e logger)\n    {\n        var logger1 = AppLog.Logger;\n        logger1.LogInformation(\"ConfigureApplication...\");              //  write log to sinks\n        logger.LogInformation(\"[Startup] ConfigureApplication...\");     //  write log to sinks\n\n        if (env.IsDevelopment())\n        {\n            app.UseDeveloperExceptionPage();\n            app.UseSwagger();\n            app.UseSwaggerUI(c =\u003e c.SwaggerEndpoint(\"/swagger/v1/swagger.json\", \"SampleWebApi v1\"));\n        }\n\n        app.UseSerilogRequestLoggingLevel();\n\n        app.UseHttpsRedirection();\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetlah%2Fserilog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetlah%2Fserilog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetlah%2Fserilog/lists"}