Skip to content

Database logger for ASP.NET Core (an implementation of common logging abstractions)

License

Notifications You must be signed in to change notification settings

SasaCetkovic/DLogger.Extensions.Logging

Repository files navigation

DLogger.Extensions.Logging

Database logger for ASP.NET Core (an implementation of common logging abstractions)

To do:

  • Filtering
  • Logging scopes
  • Options for caching and bulk writing
  • Make multiple storage implementations possible
  • ILogWriter implementation for SQL Server®
  • ILogWriter implementation for SQLite
  • ILogWriter implementation for PostgreSQL
  • ILogWriter implementation for MySQL

You can implement DLogger.Extensions.Logging.Contracts.ILogWriter interface for working with any database, permanent storage, or actually anything.

Configuration

You need to call the AddDLogger() extension on loggerFactory in the Configure() method of your Startup class:

var logWriter = new SqlServerLogWriter(Configuration.GetConnectionString("Logging"));
loggerFactory.AddDLogger(Configuration.GetSection("Logging"), logWriter);

Relevant appsettings.json section:

"Logging": {
  "IncludeScopes": true,
  "BulkWrite": true,
  "BulkWriteCacheSize": 1000,
  "LogLevel": {
    "Default": "Debug",
    "System": "Warning",
    "Microsoft": "Warning"
  }
},

"ConnectionStrings": {
  "Logging": "Data Source=(local);Initial Catalog=MyDatabaseWithLoggingTable;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
}

You can take a look at some example usages in the TestAspNetApplication project.

Database Requirements for SqlServerLogWriter

The SqlServerLogWriter requires the following table and stored procedure in the database:

CREATE TABLE dbo.Logging
(
    [ID]        int identity(1, 1)  NOT NULL,
    [LogLevel]  varchar(24)         NOT NULL,
    [Category]  varchar(256)        NULL,
    [LogTime]   datetime            NOT NULL,
    [EventID]   int                 NULL,
    [EventName] varchar(256)        NULL,
    [Scope]     varchar(4000)       NULL,
    [Message]   varchar(4000)       NOT NULL,
    [Exception] varchar(max)        NULL
    

    CONSTRAINT PK_dboLogging PRIMARY KEY CLUSTERED (ID ASC)
        WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = ON, IGNORE_DUP_KEY = OFF, 
            ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
) ON [PRIMARY];


CREATE PROCEDURE dbo.LogRecordInsert
(
    @eventID    int = NULL,
    @eventName  varchar(256) = NULL,
    @logLevel   varchar(24),
    @category   varchar(256) = NULL,
    @scope      varchar(4000) = NULL,
    @message    varchar(4000),
    @logTime    datetime,
    @exception  varchar(4000) = NULL
)
AS
    SET NOCOUNT ON;
    INSERT INTO [dbo].[Logging]
    (
        [EventID],  
        [EventName],    
        [LogLevel], 
        [Category], 
        [LogTime],  
        [Scope],  
        [Message],  
        [Exception]         
    )
    VALUES
    (
        @eventID,
        @eventName,
        @logLevel,
        @category,
        @logTime,
        @scope,
        @message,
        @exception
    );

About

Database logger for ASP.NET Core (an implementation of common logging abstractions)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages