11using System ;
22using System . Collections . Generic ;
3+ using System . Collections . ObjectModel ;
34using System . Data ;
45
56namespace Serilog . Sinks . MSSqlServer
@@ -9,7 +10,7 @@ namespace Serilog.Sinks.MSSqlServer
910 /// </summary>
1011 public class ColumnOptions
1112 {
12- private IDictionary < StandardColumn , string > _store ;
13+ ICollection < StandardColumn > _store ;
1314
1415 /// <summary>
1516 /// Default constructor.
@@ -22,35 +23,37 @@ public ColumnOptions()
2223
2324 Properties = new PropertiesColumnOptions ( ) ;
2425
25- Store = new Dictionary < StandardColumn , string >
26+ Store = new Collection < StandardColumn >
2627 {
27- { StandardColumn . Message , StandardColumn . Message . ToString ( ) } ,
28- { StandardColumn . MessageTemplate , StandardColumn . MessageTemplate . ToString ( ) } ,
29- { StandardColumn . Level , StandardColumn . Level . ToString ( ) } ,
30- { StandardColumn . TimeStamp , StandardColumn . TimeStamp . ToString ( ) } ,
31- { StandardColumn . Exception , StandardColumn . Exception . ToString ( ) } ,
32- { StandardColumn . Properties , StandardColumn . Properties . ToString ( ) }
28+ StandardColumn . Message ,
29+ StandardColumn . MessageTemplate ,
30+ StandardColumn . Level ,
31+ StandardColumn . TimeStamp ,
32+ StandardColumn . Exception ,
33+ StandardColumn . Properties
3334 } ;
3435
36+ Message = new MessageColumnOptions ( ) ;
37+ MessageTemplate = new MessageTemplateColumnOptions ( ) ;
3538 TimeStamp = new TimeStampColumnOptions ( ) ;
36-
39+ Exception = new ExceptionColumnOptions ( ) ;
3740 LogEvent = new LogEventColumnOptions ( ) ;
3841 }
3942
4043 /// <summary>
4144 /// A list of columns that will be stored in the logs table in the database.
4245 /// </summary>
43- public IDictionary < StandardColumn , string > Store
46+ public ICollection < StandardColumn > Store
4447 {
4548 get { return _store ; }
4649 set
4750 {
4851 if ( value == null )
4952 {
50- _store = new Dictionary < StandardColumn , string > ( ) ;
51- foreach ( StandardColumn column in Enum . GetValues ( typeof ( StandardColumn ) ) )
53+ _store = new Collection < StandardColumn > ( ) ;
54+ foreach ( StandardColumn column in Enum . GetValues ( typeof ( StandardColumn ) ) )
5255 {
53- _store . Add ( column , column . ToString ( ) ) ;
56+ _store . Add ( column ) ;
5457 }
5558 }
5659 else
@@ -65,10 +68,19 @@ public IDictionary<StandardColumn, string> Store
6568 /// </summary>
6669 public ICollection < DataColumn > AdditionalDataColumns { get ; set ; }
6770
71+ /// Options for the Exception column.
72+ /// </summary>
73+ public ExceptionColumnOptions Exception { get ; set ; }
74+
6875 /// <summary>
69- /// Options for the Id column.
76+ /// Options for the MessageTemplate column.
77+ /// </summary>
78+ public MessageTemplateColumnOptions MessageTemplate { get ; set ; }
79+
80+ /// <summary>
81+ /// Options for the Message column.
7082 /// </summary>
71- public IdColumnOptions Id { get ; private set ; }
83+ public MessageColumnOptions Message { get ; set ; }
7284
7385 /// <summary>
7486 /// Options for the Level column.
@@ -104,7 +116,7 @@ public class IdColumnOptions
104116 /// <summary>
105117 /// Options for the Level column.
106118 /// </summary>
107- public class LevelColumnOptions
119+ public class LevelColumnOptions : CommonColumnOptions
108120 {
109121 /// <summary>
110122 /// If true will store Level as an enum in a tinyint column as opposed to a string.
@@ -115,7 +127,7 @@ public class LevelColumnOptions
115127 /// <summary>
116128 /// Options for the Properties column.
117129 /// </summary>
118- public class PropertiesColumnOptions
130+ public class PropertiesColumnOptions : CommonColumnOptions
119131 {
120132 /// <summary>
121133 /// Default constructor.
@@ -192,10 +204,21 @@ public PropertiesColumnOptions()
192204 public bool UsePropertyKeyAsElementName { get ; set ; }
193205 }
194206
207+ /// <summary>
208+ /// Shared column customization options.
209+ /// </summary>
210+ public class CommonColumnOptions
211+ {
212+ /// <summary>
213+ /// The name of the column in the database.
214+ /// </summary>
215+ public string ColumnName { get ; set ; }
216+ }
217+
195218 /// <summary>
196219 /// Options for the TimeStamp column.
197220 /// </summary>
198- public class TimeStampColumnOptions
221+ public class TimeStampColumnOptions : CommonColumnOptions
199222 {
200223 /// <summary>
201224 /// If true, the time is converted to universal time.
@@ -206,12 +229,27 @@ public class TimeStampColumnOptions
206229 /// <summary>
207230 /// Options for the LogEvent column.
208231 /// </summary>
209- public class LogEventColumnOptions
232+ public class LogEventColumnOptions : CommonColumnOptions
210233 {
211234 /// <summary>
212235 /// Exclude properties from the LogEvent column if they are being saved to additional columns.
213236 /// </summary>
214237 public bool ExcludeAdditionalProperties { get ; set ; }
215238 }
239+
240+ /// <summary>
241+ /// Options for the message column
242+ /// </summary>
243+ public class MessageColumnOptions : CommonColumnOptions { }
244+
245+ /// <summary>
246+ /// Options for the Exception column.
247+ /// </summary>
248+ public class ExceptionColumnOptions : CommonColumnOptions { }
249+
250+ /// <summary>
251+ /// Options for the MessageTemplate column.
252+ /// </summary>
253+ public class MessageTemplateColumnOptions : CommonColumnOptions { }
216254 }
217- }
255+ }
0 commit comments