/// <summary> /// Construct a sink posting to the specified database. /// </summary> /// <param name="connectionString">Connection string to access the database.</param> /// <param name="tableName">Name of the table to store the data in.</param> /// <param name="includeProperties">Specifies if the properties need to be saved as well.</param> /// <param name="batchPostingLimit">The maximum number of events to post in a single batch.</param> /// <param name="period">The time to wait between checking for event batches.</param> /// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param> /// <param name="storeTimestampInUtc">Store Timestamp In UTC</param> /// <param name="additionalDataColumns">Additional columns for data storage.</param> /// <param name="autoCreateSqlTable">Create log table with the provided name on destination sql server.</param> /// <param name="excludeAdditionalProperties">Exclude properties from the Properties column if they are being saved to additional columns.</param> /// <param name="storeLogEvent">Save the entire log event to the LogEvent column (nvarchar) as JSON.</param> public MSSqlServerSink( string connectionString, string tableName, bool includeProperties, int batchPostingLimit, TimeSpan period, IFormatProvider formatProvider, bool storeTimestampInUtc, DataColumn[] additionalDataColumns = null, bool autoCreateSqlTable = false, bool excludeAdditionalProperties = false, bool storeLogEvent = false ) : base(batchPostingLimit, period) { if (string.IsNullOrWhiteSpace(connectionString)) { throw new ArgumentNullException("connectionString"); } if (string.IsNullOrWhiteSpace(tableName)) { throw new ArgumentNullException("tableName"); } _connectionString = connectionString; _tableName = tableName; _includeProperties = includeProperties; _formatProvider = formatProvider; _storeTimestampInUtc = storeTimestampInUtc; _additionalDataColumns = additionalDataColumns; if (_additionalDataColumns != null) { _additionalDataColumnNames = new HashSet <string>(_additionalDataColumns.Select(c => c.ColumnName), StringComparer.OrdinalIgnoreCase); } _excludeAdditionalProperties = excludeAdditionalProperties; _storeLogEvent = storeLogEvent; if (_storeLogEvent) { _jsonFormatter = new JsonFormatter(formatProvider: formatProvider); } // Prepare the data table _eventsTable = CreateDataTable(); if (autoCreateSqlTable) { try { SqlTableCreator tableCreator = new SqlTableCreator(connectionString); tableCreator.CreateTable(_eventsTable); } catch (Exception ex) { SelfLog.WriteLine("Exception {0} caught while creating table {1} to the database specified in the Connection string.", (object)ex, (object)tableName); } } }
public MSSqlServerSinkTraits(string connectionString, string tableName, string schemaName, ColumnOptions columnOptions, IFormatProvider formatProvider, bool autoCreateSqlTable) { if (string.IsNullOrWhiteSpace(connectionString)) { throw new ArgumentNullException(nameof(connectionString)); } if (string.IsNullOrWhiteSpace(tableName)) { throw new ArgumentNullException(nameof(tableName)); } this.connectionString = connectionString; this.tableName = tableName; this.schemaName = schemaName; this.columnOptions = columnOptions ?? new ColumnOptions(); this.formatProvider = formatProvider; standardColumnNames = new HashSet <string>(StringComparer.OrdinalIgnoreCase); foreach (var stdCol in this.columnOptions.Store) { var col = this.columnOptions.GetStandardColumnOptions(stdCol); standardColumnNames.Add(col.ColumnName); } additionalColumnNames = new HashSet <string>(StringComparer.OrdinalIgnoreCase); if (this.columnOptions.AdditionalColumns != null) { foreach (var col in this.columnOptions.AdditionalColumns) { additionalColumnNames.Add(col.ColumnName); } } if (this.columnOptions.Store.Contains(StandardColumn.LogEvent)) { jsonLogEventFormatter = new JsonLogEventFormatter(this); } eventTable = CreateDataTable(); if (autoCreateSqlTable) { try { SqlTableCreator tableCreator = new SqlTableCreator(this.connectionString, this.schemaName, this.tableName, eventTable, this.columnOptions); tableCreator.CreateTable(); // return code ignored, 0 = failure? } catch (Exception ex) { SelfLog.WriteLine($"Exception creating table {tableName}:\n{ex}"); } } }
/// <summary> /// Construct a sink posting to the specified database. /// </summary> /// <param name="connectionString">Connection string to access the database.</param> /// <param name="tableName">Name of the table to store the data in.</param> /// <param name="schemaName">Name of the schema for the table to store the data in. The default is 'dbo'.</param> /// <param name="batchPostingLimit">The maximum number of events to post in a single batch.</param> /// <param name="period">The time to wait between checking for event batches.</param> /// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param> /// <param name="autoCreateSqlTable">Create log table with the provided name on destination sql server.</param> /// <param name="columnOptions">Options that pertain to columns</param> public MSSqlServerSink( string connectionString, string tableName, int batchPostingLimit, TimeSpan period, IFormatProvider formatProvider, bool autoCreateSqlTable = false, ColumnOptions columnOptions = null, string schemaName = "dbo" ) : base(batchPostingLimit, period) { if (string.IsNullOrWhiteSpace(connectionString)) { throw new ArgumentNullException("connectionString"); } if (string.IsNullOrWhiteSpace(tableName)) { throw new ArgumentNullException("tableName"); } _connectionString = connectionString; _tableName = tableName; _schemaName = schemaName; _formatProvider = formatProvider; _columnOptions = columnOptions ?? new ColumnOptions(); if (_columnOptions.AdditionalDataColumns != null) { _additionalDataColumnNames = new HashSet <string>(_columnOptions.AdditionalDataColumns.Select(c => c.ColumnName), StringComparer.OrdinalIgnoreCase); } if (_columnOptions.Store.Contains(StandardColumn.LogEvent)) { _jsonFormatter = new JsonFormatter(formatProvider: formatProvider); } // Prepare the data table _eventsTable = CreateDataTable(); if (autoCreateSqlTable) { try { SqlTableCreator tableCreator = new SqlTableCreator(connectionString, _schemaName); tableCreator.CreateTable(_eventsTable); } catch (Exception ex) { SelfLog.WriteLine("Exception {0} caught while creating table {1} to the database specified in the Connection string.", (object)ex, (object)tableName); } } }
public MSSqlServerSinkTraits(string connectionString, string tableName, string schemaName, ColumnOptions columnOptions, IFormatProvider formatProvider, bool autoCreateSqlTable) { if (string.IsNullOrWhiteSpace(connectionString)) { throw new ArgumentNullException(nameof(connectionString)); } if (string.IsNullOrWhiteSpace(tableName)) { throw new ArgumentNullException(nameof(tableName)); } ConnectionString = connectionString; TableName = tableName; SchemaName = schemaName; ColumnOptions = columnOptions ?? new ColumnOptions(); FormatProvider = formatProvider; if (ColumnOptions.AdditionalDataColumns != null) { AdditionalDataColumnNames = new HashSet <string>(ColumnOptions.AdditionalDataColumns.Select(c => c.ColumnName), StringComparer.OrdinalIgnoreCase); } if (ColumnOptions.Store.Contains(StandardColumn.LogEvent)) { JsonFormatter = new JsonFormatter(formatProvider: formatProvider); } EventTable = CreateDataTable(); if (autoCreateSqlTable) { try { SqlTableCreator tableCreator = new SqlTableCreator(connectionString, SchemaName); tableCreator.CreateTable(EventTable); } catch (Exception ex) { SelfLog.WriteLine("Exception {0} caught while creating table {1} to the database specified in the Connection string.", ex, tableName); } } }
/// <summary> /// Construct a sink posting to the specified database. /// </summary> /// <param name="connectionString">Connection string to access the database.</param> /// <param name="tableName">Name of the table to store the data in.</param> /// <param name="batchPostingLimit">The maximum number of events to post in a single batch.</param> /// <param name="period">The time to wait between checking for event batches.</param> /// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param> /// <param name="autoCreateSqlTable">Create log table with the provided name on destination sql server.</param> /// <param name="columnOptions">Options that pertain to columns</param> public MSSqlServerSink( string connectionString, string tableName, int batchPostingLimit, TimeSpan period, IFormatProvider formatProvider, bool autoCreateSqlTable = false, ColumnOptions columnOptions = null ) : base(batchPostingLimit, period) { if (string.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullException("connectionString"); if (string.IsNullOrWhiteSpace(tableName)) throw new ArgumentNullException("tableName"); _connectionString = connectionString; _tableName = tableName; _formatProvider = formatProvider; _columnOptions = columnOptions ?? new ColumnOptions(); if (_columnOptions.AdditionalDataColumns != null) _additionalDataColumnNames = new HashSet<string>(_columnOptions.AdditionalDataColumns.Select(c => c.ColumnName), StringComparer.OrdinalIgnoreCase); if (_columnOptions.Store.Contains(StandardColumn.LogEvent)) _jsonFormatter = new JsonFormatter(formatProvider: formatProvider); // Prepare the data table _eventsTable = CreateDataTable(); if (autoCreateSqlTable) { try { SqlTableCreator tableCreator = new SqlTableCreator(connectionString); tableCreator.CreateTable(_eventsTable); } catch (Exception ex) { SelfLog.WriteLine("Exception {0} caught while creating table {1} to the database specified in the Connection string.", (object)ex, (object)tableName); } } }
/// <summary> /// Construct a sink posting to the specified database. /// </summary> /// <param name="connectionString">Connection string to access the database.</param> /// <param name="tableName">Name of the table to store the data in.</param> /// <param name="includeProperties">Specifies if the properties need to be saved as well.</param> /// <param name="batchPostingLimit">The maximum number of events to post in a single batch.</param> /// <param name="period">The time to wait between checking for event batches.</param> /// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param> /// <param name="storeTimestampInUtc">Store Timestamp In UTC</param> /// <param name="additionalDataColumns">Additional columns for data storage.</param> /// <param name="autoCreateSqlTable">Create log table with the provided name on destination sql server.</param> /// <param name="excludeAdditionalProperties">Exclude properties from the Properties column if they are being saved to additional columns.</param> /// <param name="storeLogEvent">Save the entire log event to the LogEvent column (nvarchar) as JSON.</param> public MSSqlServerSink( string connectionString, string tableName, bool includeProperties, int batchPostingLimit, TimeSpan period, IFormatProvider formatProvider, bool storeTimestampInUtc, DataColumn[] additionalDataColumns = null, bool autoCreateSqlTable = false, bool excludeAdditionalProperties = false, bool storeLogEvent = false ) : base(batchPostingLimit, period) { if (string.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullException("connectionString"); if (string.IsNullOrWhiteSpace(tableName)) throw new ArgumentNullException("tableName"); _connectionString = connectionString; _tableName = tableName; _includeProperties = includeProperties; _formatProvider = formatProvider; _storeTimestampInUtc = storeTimestampInUtc; _additionalDataColumns = additionalDataColumns; if (_additionalDataColumns != null) _additionalDataColumnNames = new HashSet<string>(_additionalDataColumns.Select(c => c.ColumnName), StringComparer.OrdinalIgnoreCase); _excludeAdditionalProperties = excludeAdditionalProperties; _storeLogEvent = storeLogEvent; if (_storeLogEvent) _jsonFormatter = new JsonFormatter(formatProvider: formatProvider); // Prepare the data table _eventsTable = CreateDataTable(); if (autoCreateSqlTable) { try { SqlTableCreator tableCreator = new SqlTableCreator(connectionString); tableCreator.CreateTable(_eventsTable); } catch (Exception ex) { SelfLog.WriteLine("Exception {0} caught while creating table {1} to the database specified in the Connection string.", (object)ex, (object)tableName); } } }