ngx-registri-log
v0.10.4
Published
Small Angular/.Net Core library that offers functions of:
Downloads
4
Readme
Registri Log
Small Angular/.Net Core library that offers functions of:
- EF Core Audit
- API Request/Response logging
- Serilog additional functions
- Angular GUI of all functions
If the documentation or the project should present problems you can open an issue indicating the problem:)
Link:
- Development Repository GitLab - registri-log (recommended)
- Open Issue on GitLab (recommended)
- Mirror Repository GitHub
- Open Issue on GitHub
How To: install and configure
MS .Net Core
Install the net-logs-log package from nuget.org --> Link
dotnet add package net-registri-log
Configure the library options in the appsettings. {Env} .json file:
"net-registri-log": { "ApiLog.Options": { "Enable": true, "TrackRequestBody": true, "TrackResponseBody": true, "IgnorePath": [ "/ApiLog/" ] }, "Logs.Options": { "Enable": true, "SerilogDebuggingSelfLogEnable": true, "SerilogSelfFileName": "SerilogSelf.log" } },
Add to the ConfigureServices method:
public void ConfigureServices(IServiceCollection services) { // ... // ... services.AddNetRegistriLog(Configuration); // ricordati di configurare il tuo DbContext!!! services.AddDbContext<ApplicationDbContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")); }); // ... // ... }
Add to the Configure method:
public void ConfigureServices(IServiceCollection services) { app.UseNetRegistriLog(); // ... // ... }
Update the Program class:
public class Program { public static void Main(string[] args) { // required to configure the Serilog net_registri_log.Logs.Logger.Initialize(); try { Log.Information("Starting host..."); CreateHostBuilder(args).Build().Run(); } catch (Exception ex) { Log.Fatal(ex, "Host terminated unexpectedly."); } finally { Log.CloseAndFlush(); } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog() // needed for Serilog .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
Add the Serilog configuration to the appsettings.{Env}.json file. The library uses a precise configuration. Change or extend the example:
"Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.MSSqlServer", "Serilog.Expressions" ], "MinimumLevel": { "Default": "Debug", // the namespaces of the Override section ignore the Default MinimumLevel. "Override": { "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information", "System": "Warning", "Microsoft.EntityFrameworkCore.Database.Command": "Warning", "Microsoft.AspNetCore.Authentication": "Debug", "net-registri-log": "Debug" } }, "WriteTo": [ { "Name": "Logger", "Args": { "configureLogger": { // all logging service providers (sinks) are defined here. "WriteTo": [ // log settings to console. // https://github.com/serilog/serilog-sinks-console { "Name": "Console", "Args": { "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{Data:l}{NewLine}{Exception}{NewLine}", "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console" } }, // log settings to file. // https://github.com/serilog/serilog-sinks-file { // name of the sink type. "Name": "File", "Args": { // directory/path where the logs will be written. "path": "../LogFiles/net-registri-log.webapi/net-registri-log.log", // maximum size of single log file. "fileSizeLimitBytes": 1000000, // (setting 3, for more info see Serilog documentation) "rollingInterval": 3, "rollOnFileSizeLimit": true, "shared": true, "outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{Data:l}{NewLine}{Exception}{NewLine}", // disk write interval "flushToDiskInterval": 1 } }, // log settings on sql server. // https://github.com/serilog/serilog-sinks-mssqlserver { // nome del tipo di sink. "Name": "MSSqlServer", "Args": { "connectionString": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=net-registri-log;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", // table on which the logger will write. // IT CAN BE CHANGED AS NEEDED "sinkOptionsSection": { "tableName": "Logs", "schemaName": "dbo", // if true Serilog will create the necessary tables and fields. "autoCreateSqlTable": true }, "columnOptionsSection": { // some unnecessary standard columns of the logging service have been removed. // IT CAN BE CHANGED AS NEEDED "removeStandardColumns": [ "MessageTemplate", "Properties" ], // HERE ARE DEFINED THE CUSTOMIZED FIELDS OF THE LIBRARY. // !!! YOU CAN ADD THE OTHER FIELDS BUT DO NOT REMOVE ANY CONFIGURATION !!! "customColumns": [ { "ColumnName": "UserName", "DataType": "nvarchar", "DataLength": 50, "AllowNull": true }, { "ColumnName": "Operation", "DataType": "nvarchar", "DataLength": 50, "AllowNull": true }, { "ColumnName": "JsonObject", "DataType": "nvarchar", "AllowNull": true } ], "timeStamp": { "columnName": "Timestamp", "convertToUtc": false } } } } ] } } } ], "Enrich": [ "FromLogContext" ] }
The necessary library migrations are automatically applied when the project is first started. For more information check out the static
UpdateDatabaseMigrate
method in thenet_registri_log.Providers.ApplicationBuilderExtensions
class.
NB: from now on, to update the context of your project it will be necessary to specify:
Add-Migration <nome> -Context <context>
API-Log
The function will be active from the first start. The information is contained in the dbo.ApiLogs table of the configured database.
Audit-Log
To use this feature you need to use a workaround:
Use the DI to get the RegistriLogDbContext context.
Instead of using the SaveChanges SaveChangesAsync of your context use the context of the library by passing it the context you were working on:
await _registriLogDbContext.SaveAndAuditChangesAsync(_context);
The information is contained in the dbo.AuditLogs table of the configured database.
Logs
The library extends some functionality of the Serilog library:
- API for consulting logs
- extension methods that handle two new data: jsonObject, operation
NB: Serilog must be configured (see above).
Angular Project
Install the package via npm --> Link
npm i ngx-registri-log
Add the module to the project in app.module.ts.
import { NgxRegistriLogModule } from 'ngx-registri-log'; @NgModule({ // ... // ... imports: [ NgxRegistriLogModule ], // ... // ... }) export class AppModule { }
The library exposes the components:
<lib-audit-log></lib-audit-log> <lib-event-api></lib-event-api> <lib-logs></lib-logs>
Sample and Development Projects
The following projects have been developed in the repository:
- node\ --> workspace Angular
- node\projects\ngx-logs-logs --> library project
- node\projects\client --> library test client
- net\ --> .Net Core solution
- net\net-registri-logs --> library project
- net\net-registri-log.webapi --> test API project (for tests I recommend using swagger UI)
- sample\ --> example .Net + Angular stack with libraries configured by NPM and NuGet.