Implementación de registro en base de datos SQL Server para aplicaciones Dot Net Core.
Este repositorio contiene la implementación del proveedor ASP.NET Core Logger en la base de datos SQL Server. Le permite registrar la información en la tabla de la base de datos SQL. Para la implementación general del registrador ASP.NET Core, visite aquí.
Instale el paquete NuGet Daenet.Common.Logging.Sql en su aplicación.
Es necesario configurar e inicializar SqlServerLogger.
Aplicación web ASP.NET Core
public static IWebHost BuildWebHost ( string [ ] args ) =>
WebHost . CreateDefaultBuilder ( args )
. UseStartup < Startup > ( )
. ConfigureLogging ( ( hostingContext , logging ) =>
{
var loggerSection = hostingContext . Configuration . GetSection ( "Logging" ) ;
logging . AddConfiguration ( loggerSection ) ;
logging . AddConsole ( ) ;
logging . AddDebug ( ) ;
logging . AddSqlServerLogger ( ( sett ) =>
{
sett . SetSqlServerLoggerSettings ( loggerSection ) ;
} ) ;
} )
. Build ( ) ;
}Aplicación de consola
public IConfigurationRoot Configuration ;
var builder = new ConfigurationBuilder ( ) . AddJsonFile ( "appsettings.json" ) ;
Configuration = builder . Build ( ) ;
ILoggerFactory loggerFactory = new LoggerFactory ( ) . AddSqlServerLogger ( Configuration . GetSection ( "Logging" ) ) ;
ILogger logger = loggerFactory . CreateLogger < SqlServerLoggerTests > ( ) ; En appsettings.json , la parte SqlProvider debe agregarse a Logging .
{
"Logging" : {
"IncludeScopes" : true ,
"Debug" : {
"LogLevel" : {
"Default" : " Information "
}
},
"Console" : {
"LogLevel" : {
"Default" : " Warning "
}
},
"SqlProvider" : {
"LogLevel" : {
"Default" : " Information "
},
"ConnectionString" : " " ,
"TableName" : " SqlLog " ,
"BatchSize" : 1 ,
"InsertTimerInSec" : 60 ,
"IncludeExceptionStackTrace" : false ,
"IgnoreLoggingErrors" : false ,
"ScopeSeparator" : " => "
}
}
}La configuración de LogLevel se realiza a nivel global y de registrador. Consulte Introducción al inicio de sesión en ASP.NET Core.
El indicador IncludeScope se utiliza cuando el registro se debe realizar dentro de un ámbito particular. IncludeScope cuando se establece en verdadero y se inicializa dentro del código con beginScope("scopeStatement") agrega una identificación de alcance a cada declaración registrada que se agrega a la base de datos en la columna "Alcance". El siguiente ejemplo ilustra el uso del alcance en el registro cuando el indicador IncludeScopes está establecido en verdadero.
using ( m_Logger . BeginScope ( $ "Scope Begins : { Guid . NewGuid ( ) } " ) )
{
//Here log something
}Esto agregará "El alcance comienza: nuevo guid hexadecimal " para cada instancia de objeto de la clase donde comienza el alcance.
ConnectionString es una cadena de conexión ADO.NET para la autenticación SQL.
TableName es el nombre de la tabla donde el registrador debe iniciar sesión.
BatchSize Decide cuándo escribir mensajes en la base de datos. Si BatchSize > 1, completamos una Lista y esperamos hasta que el recuento de la lista alcance BatchSize o InsertTimerInSec activa la inserción en la base de datos. Si BatchSize> 1, escribir los datos en la base de datos es asíncrono.
InsertTimerInSec Tiempo transcurrido cuando el registrador escribe en la tabla incluso si no se alcanza BatchSize .
(ELIMINADO en 1.0.7.2) El indicador CreateTblIfNotExist , cuando se establece en verdadero, le brinda al registrador la capacidad de crear la tabla con el nombre de la tabla que se proporciona en la configuración en caso de que aún no esté disponible en la base de datos. Este indicador es útil al probar el registrador en el entorno de desarrollo.
El indicador IncludeExceptionStackTrace no está implementado actualmente y la excepción completa se registra en la tabla independientemente de este indicador.
El indicador IgnoreLoggingErrors sirve para decidir si la aplicación debería fallar si se produce una excepción al iniciar sesión. Cuando se establece en falso, el registrador registra actualmente estos errores en la consola de depuración. **ADVERTENCIA: Sólo funciona si BatchSize = 1
Para registrar el error en la base de datos SQL, debe haber una tabla presente en la base de datos con un formato de columna predefinido. El registrador completa las siguientes columnas:
La siguiente consulta creará una nueva tabla en la base de datos SQL con los parámetros anteriores y debe usarse como consulta de referencia para el formato predeterminado.
CREATE TABLE [dbo].[YourTableName](
[Id] [ bigint ] IDENTITY( 1 , 1 ) NOT NULL ,
[EventId] [ int ] NULL ,
[Type] [nvarchar]( 15 ) NOT NULL ,
[Scope] [nvarchar](MAX) NULL ,
[Message] [nvarchar](max) NOT NULL ,
[Exception] [nvarchar](max) NULL ,
[ TimeStamp ] [datetime] NOT NULL ,
[CategoryName] [nvarchar] (max) NULL ,
CONSTRAINT [PK_YourTableName] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON , ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]También es posible registrar parámetros en la base de datos. En este ejemplo queremos registrar el RequestId y el alcance en la base de datos. Para que esto funcione, debes crear las columnas, por supuesto.
Esta configuración debe agregarse a la sección SqlProvider en Logging .
A continuación se muestra un ejemplo de cómo registrar los 2 parámetros de registro internos de .NET Core. Puede ampliar esto con los parámetros que utilice en su registro. Un buen ejemplo aquí es {method} para registrar el nombre del método de forma general.
"ScopeColumnMapping" : {
"RequestId" : " RequestId " ,
"SCOPEPATH" : " Scope "
}También es posible utilizar su propio formato de registro personalizado proporcionando loggingFormatter