示例#1
0
        /// <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;
            }
        }
示例#2
0
        /// <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();
            }
        }