J'utilise Serilog avec le récepteur MSSqlServer. Même si j'ai suivi toutes les étapes mentionnées dans Serilog.Sinks.MSSqlServer, je n'arrive toujours pas à enregistrer un message dans SQL Table. J'apprécie vraiment si vous pouviez me dire quelle partie j'ai manquée ou configurée incorrectement?Impossible de se connecter MS SQL en utilisant Serilog
Voici la partie du code de configuration de mon projet:
public ILogger Logger = null;
private ColumnOptions _columnOptions = new ColumnOptions
{
AdditionalDataColumns = new Collection<DataColumn>
{
new DataColumn() { AllowDBNull = true, ColumnName = "CreatedBy",DataType = typeof (Guid) },
new DataColumn() { AllowDBNull = true, ColumnName = "CreatedDate",DataType = typeof (DateTime)},
new DataColumn() { AllowDBNull = true, ColumnName = "StatusID",DataType = typeof (byte)},
new DataColumn() { AllowDBNull = true, ColumnName = "ModifiedBy",DataType = typeof (Guid) },
new DataColumn() { AllowDBNull = true, ColumnName = "ModifiedDate",DataType = typeof (DateTime) },
new DataColumn() { AllowDBNull = true, ColumnName = "Version",DataType = typeof (Guid) },
new DataColumn() { AllowDBNull = true, ColumnName = "SessionID", DataType = typeof(string) },
new DataColumn() { AllowDBNull = true, ColumnName = "Username", DataType = typeof(string) },
new DataColumn() { AllowDBNull = true, ColumnName = "IsAuthenticated", DataType = typeof(bool) },
new DataColumn() { AllowDBNull = true, ColumnName = "ClientIPAddress", DataType = typeof(string) },
new DataColumn() { AllowDBNull = true, ColumnName = "ControllerName", DataType = typeof(string) },
new DataColumn() { AllowDBNull = true, ColumnName = "ActionName", DataType = typeof(string) },
new DataColumn() { AllowDBNull = true, ColumnName = "GetParameters", DataType = typeof(string) },
new DataColumn() { AllowDBNull = true, ColumnName = "Request", DataType = typeof(string) },
},
};
Logger = new LoggerConfiguration().WriteTo.MSSqlServer(
connectionString: ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(),
period: TimeSpan.Zero,
batchPostingLimit: 5,
autoCreateSqlTable: false,
tableName: "Logs",
restrictedToMinimumLevel: LogEventLevel.Verbose,
columnOptions: _columnOptions)
.CreateLogger();
Voici le modèle de message que j'utilise:
public const string AuditMessageTemplate = "{SessionID}, {Username}, {IsAuthenticated}, {ClientIPAddress}, {ControllerName}, {ActionName}, {GetParameters}, {Request}, {CreatedBy}, {CreatedDate}, {StatusID}, {ModifiedBy}, {ModifiedDate}, {Version}";
Et pour le tester, j'écrire le code suivant:
for (int i = 0; i < 200; i++)
{
AuditLogger.Instance.Information(LoggerParameters.AuditMessageTemplate, auditLog.SessionID,auditLog.Username, auditLog.IsAuthenticated, auditLog.ClientIPAddress, auditLog.ControllerName,auditLog.ActionName, auditLog.GetParameters, auditLog.Request, auditLog.CreatedBy, auditLog.CreatedDate, auditLog.StatusID, auditLog.ModifiedBy, auditLog.ModifiedDate, auditLog.Version);
}
Voici quelques informations d'exécution:
Voici les assemblées que j'utilise:
- Serilog 1.5.0.0
- Serilog.FullNetFx 1.5.0.0
- Serilog.Sinks.MSSqlServer 3.0.0.0
Pouvez-vous raccorder 'SelfLog' et joindre n'importe quelle sortie à partir de là? Instructions à: https://github.com/serilog/serilog/wiki/Debugging-and-Diagnostics - merci! –
Merci à votre commentaire @NicholasBlumhardt J'ai réussi à trouver la cause première et résoudre le problème. Ce sont les exceptions consignées: System.ArgumentException: Guid doit contenir 32 chiffres avec 4 tirets (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). Ne peut pas stocker <"00000000-0000-0000-0000-000000000000"> dans la colonne CreatedBy. Merci encore. – DeveloperX
@NicholasBlumhardt Je me suis accroché à l'auto-journal et il ne sort rien du tout. (J'ai le même problème). Tout ce que vous avez rencontré? – Sinaesthetic