/// <summary>Emit the provided log event to the sink.</summary> /// <param name="logEvent">The log event to write.</param> public virtual void Emit(LogEvent logEvent) { try { using (IDbConnection connection = _db.DbOpt.Connection()) { connection.Open(); using (var command = connection.CreateCommand()) { command.CommandType = CommandType.Text; var res = _db.GetInsertSqlString(logEvent); foreach (var item in res.Value) { var parameter = command.CreateParameter(); parameter.ParameterName = item.Key; parameter.Value = item.Value; if (item.Value is DateTime) { parameter.DbType = DbType.DateTime2; } command.Parameters.Add(parameter); } command.CommandText = res.Key; command.ExecuteNonQuery(); } } } catch (Exception ex) { Console.WriteLine("Unable to write log event to the database due to following error: {1}", ex.Message); throw; } }
/// <summary> /// Emit a batch of log events, running asynchronously. /// </summary> /// <param name="events">The events to emit.</param> /// <remarks> /// Override either <see cref="PeriodicBatchingSink.EmitBatch" /> or <see cref="PeriodicBatchingSink.EmitBatchAsync" /> /// , /// not both. /// </remarks> protected override async Task EmitBatchAsync(IEnumerable <LogEvent> events) { // Copy the events to the data table //FillDataTable(events); try { //using (var cn = new SqlConnection(_traits.connectionString)) //{ // await cn.OpenAsync().ConfigureAwait(false); // using (var copy = _traits.columnOptions.DisableTriggers // ? new SqlBulkCopy(cn) // : new SqlBulkCopy(cn, SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.FireTriggers, null) // ) // { // copy.DestinationTableName = string.Format("[{0}].[{1}]", _traits.schemaName, _traits.tableName); // foreach (var column in _traits.eventTable.Columns) // { // var columnName = ((DataColumn)column).ColumnName; // var mapping = new SqlBulkCopyColumnMapping(columnName, columnName); // copy.ColumnMappings.Add(mapping); // } // await copy.WriteToServerAsync(_traits.eventTable).ConfigureAwait(false); // } //} using (var cn = _db.DbOpt.Connection()) { cn.Open(); using (var cmd = cn.CreateCommand()) { foreach (var logEvent in events) { cmd.CommandType = CommandType.Text; var res = _db.GetInsertSqlString(logEvent); foreach (var item in res.Value) { var parameter = cmd.CreateParameter(); parameter.ParameterName = item.Key; parameter.Value = item.Value; if (item.Value is DateTime) { parameter.DbType = DbType.DateTime2; } cmd.Parameters.Add(parameter); } cmd.CommandText = res.Key; cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } } } } catch (Exception ex) { Console.WriteLine("Unable to write {0} log events to the database due to following error: {1}", events.Count(), ex.Message); } finally { // Processed the items, clear for the next run //_traits.eventTable.Clear(); } }