2016-02-03 1 views
5

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:

locals windows of visual studio

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
+1

Pouvez-vous raccorder 'SelfLog' et joindre n'importe quelle sortie à partir de là? Instructions à: https://github.com/serilog/serilog/wiki/Debugging-and-Diagnostics - merci! –

+0

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

+0

@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

Répondre

0

Bonne journée,

J'ai eu le même problème lors de l'ajout de colonnes supplémentaires à la table de journal dans ma base de données. Ce que j'ai trouvé était, lors de la définition d'un objet de colonne de données de type de date Guid, il ne se connectera pas. Une fois que j'ai changé le type de données en chaîne, cela a parfaitement fonctionné.

Exemple:

new DataColumn() { AllowDBNull = true, ColumnName = "CreatedBy",DataType = typeof (Guid) }, 

vs

new DataColumn() { AllowDBNull = true, ColumnName = "CreatedBy",DataType = typeof (string) }, 

Je sais que ce n'est pas idéal, parce que je voudrais aussi utiliser Guid au lieu de chaîne.