예제 #1
0
        public void DatabaseLogger_LogsError_DatabaseLogs()
        {
            var message = "Some entry";
            var config  = new DatabaseLoggingConfiguration();

            config.Host         = "sql.emitknowledge.com";
            config.Database     = "app.db";
            config.Username     = "******";
            config.Password     = "******";
            config.DataProvider = DataProvider.SqlClient;
            config.TableName    = "Log2";

            Aspects.Logging.ILogger logger = new NLogger(config);

            logger.Error(new Exception(message));

            string connectionString = $"Data Source={config.Host};Initial Catalog={config.Database}; User Id={config.Username}; Password={config.Password}";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                SqlDataReader reader = new SqlCommand(@"SELECT * FROM LogEntry;", connection).ExecuteReader();
                while (reader.Read())
                {
                    Assert.Contains(message, reader["Payload"].ToString());
                }
                reader.Close();

                var command = new SqlCommand("DELETE FROM LogEntry", connection);
                command.ExecuteNonQuery();
            }
        }
 public DatabaseConfiguration()
 {
     LogWith = new DatabaseLoggingConfiguration(this, (l) =>
     {
         if (l == null)
         {
             throw new ArgumentNullException($"{nameof(l)} cannot be null.");
         }
         _logger = l;
     });
 }
예제 #3
0
파일: NLogger.cs 프로젝트: dedurus/Signals
        /// <summary>
        /// Initiate logging in database
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="levels"></param>
        public NLogger(DatabaseLoggingConfiguration configuration, params LogLevel[] levels)
        {
            LoggingConfiguration = configuration;

            using (var connection = new SqlConnection(configuration.ConnectionString))
            {
                connection.Open();

                using (var transaction = connection.BeginTransaction($"Create{configuration.TableName}"))
                {
                    var sql =
                        $@"
                        IF NOT EXISTS 
                        (	
                            SELECT * 
                            FROM sys.tables t 
                            WHERE t.name = '{configuration.TableName}'
                        )
                        BEGIN
                            CREATE TABLE [{configuration.TableName}]
                            (
                                [Id] INT IDENTITY(1,1) NOT NULL, 
                                [CreatedOn] DATETIME2(7) NOT NULL, 
                                [Level] NVARCHAR(MAX) NULL,
                                [ErrorGroup] NVARCHAR(MAX) NULL,
                                [ErrorCode] NVARCHAR(MAX) NULL,
                                [Origin] NVARCHAR(MAX) NULL,
                                [ProcessName] NVARCHAR(MAX) NULL,
                                [Action] NVARCHAR(MAX) NULL,
                                [ActionFilePath] NVARCHAR(MAX) NULL,
                                [ActionSourceLineNumber] NVARCHAR(MAX) NULL,
                                [Message] NVARCHAR(MAX) NULL,
                                [ExceptionMessage] NVARCHAR(MAX) NULL,
                                [UserIdentifier] NVARCHAR(MAX) NULL,
                                [Payload] NVARCHAR(MAX) NULL
                                CONSTRAINT [PK_{configuration.TableName}] PRIMARY KEY CLUSTERED 
                                (
	                                [Id] ASC
                                )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
                            ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
                        
                            ALTER TABLE [{configuration.TableName}] ADD CONSTRAINT [DF_{configuration.TableName}_CreateOn]  DEFAULT (getutcdate()) FOR [CreatedOn]; 
                        END
                    ";

                    var command = new SqlCommand(sql, connection, transaction);
                    command.ExecuteNonQuery();
                    transaction.Commit();
                }
            }

            var dbTarget = new DatabaseTarget("database")
            {
                DBHost      = configuration.Host,
                DBDatabase  = configuration.Database,
                DBPassword  = configuration.Password,
                DBUserName  = configuration.Username,
                DBProvider  = configuration.DataProvider.GetDescription(),
                CommandText = $@"
                    insert into {configuration.TableName} (
                        Level,
                        ErrorGroup,
                        ErrorCode,
                        Origin,
                        Action,
                        ProcessName,
                        ActionFilePath,
                        ActionSourceLineNumber,
                        Message,
                        ExceptionMessage,
                        UserIdentifier,
                        Payload
                    ) values (
                        @Level,
                        @ErrorGroup,
                        @ErrorCode,
                        @Origin,
                        @Action,
                        @ProcessName,
                        @ActionFilePath,
                        @ActionSourceLineNumber,
                        @Message,
                        @ExceptionMessage,
                        @UserIdentifier,
                        @Payload
                    );"
            };

            dbTarget.Parameters.Add(new DatabaseParameterInfo("@level", Layout.FromString(@"${event-properties:item=Level}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@errorGroup", Layout.FromString(@"${event-properties:item=ErrorGroup}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@errorCode", Layout.FromString(@"${event-properties:item=ErrorCode}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@origin", Layout.FromString(@"${event-properties:item=Origin}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@action", Layout.FromString(@"${event-properties:item=Action}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@processName", Layout.FromString(@"${event-properties:item=ProcessName}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@actionFilePath", Layout.FromString(@"${event-properties:item=ActionFilePath}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@actionSourceLineNumber", Layout.FromString(@"${event-properties:item=ActionSourceLineNumber}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@message", Layout.FromString(@"${event-properties:item=Message}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@exceptionMessage", Layout.FromString(@"${event-properties:item=ExceptionMessage}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@userIdentifier", Layout.FromString(@"${event-properties:item=UserIdentifier}")));
            dbTarget.Parameters.Add(new DatabaseParameterInfo("@payload", Layout.FromString(@"${event-properties:item=Payload}")));

            InitTarget(dbTarget, levels?.ToList());
        }