Le système ne crée pas automatiquement la table des journaux et les erreurs de journalisation dans ma base de données postgres. J'utilise Serilog.Sinks.PostgresSQL. Qu'est-ce que je rate?
Program.cs:
"Serilog": { "Using": [ "Serilog.Sinks.PostgreSQL" ], "MinimumLevel": "Warning", "WriteTo": [ { "Name": "PostgreSQL", "Args": { "connectionString": "Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=<password>;Pooling=true;Minimum Pool Size=1;Maximum Pool Size=100;", "tableName": "Logs", "autoCreateSqlTable": true, "batchPostingLimit": 1 } } ] }
appsettings.Development.json
public class Program { public static void Main(string[] args) { var path = Directory.GetCurrentDirectory(); var environmentName =Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"; var configuration = new ConfigurationBuilder() .SetBasePath(path) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .ReadFrom.Configuration(configuration) .CreateLogger(); try { var iWebHost = CreateWebHostBuilder(args).Build(); iWebHost.Run(); } finally { Log.CloseAndFlush(); } } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseSerilog(); }
3 Réponses :
Essayez-le comme ceci:
WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration .ReadFrom.Configuration(hostingContext.Configuration)) .Build();
J'ai changé le code comme ci-dessus mais la base de données n'enregistre toujours pas les journaux d'erreurs. Existe-t-il un moyen de trouver le traçage dans Serilog \ Serilogs.Sinks.Postgre pour découvrir quel pourrait être le problème?
Votre problème semble que le nom de paramètre de la table générée automatiquement est incorrect. Essayez de changer le paramètre comme ci-dessous:
Serilog.Debugging.SelfLog.Enable(msg => { Debug.Print(msg); Debugger.Break(); });
Référence: https://github.com/b00ted/serilog-sinks-postgresql
Mise à jour :
Vous pouvez ajouter Serilog.Debugging.SelfLog.Enable
dans la méthode Configure pour obtenir les exceptions générées par Serilog lui-même, reportez-vous au code ci-dessous:
"Serilog": { "Using": [ "Serilog.Sinks.PostgreSQL" ], "MinimumLevel": "Warning", "WriteTo": [ { "Name": "PostgreSQL", "Args": { "connectionString": "Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=<password>;Pooling=true;Minimum Pool Size=1;Maximum Pool Size=100;", "tableName": "Logs", "needAutoCreateTable": true, "batchPostingLimit": 1 } } ] }
Voici la démo de mon travail, si vous avez toujours l'erreur, vous pouvez vérifier la différence avec la vôtre.
J'ai changé le code comme ci-dessus mais la base de données n'enregistre toujours pas les journaux d'erreurs. Existe-t-il un moyen de trouver le traçage dans Serilog \ Serilogs.Sinks.Postgre pour découvrir quel pourrait être le problème?
@AjitGoel, vous pouvez ajouter Serilog.Debugging.SelfLog.Enable dans la méthode Configure pour obtenir les exceptions générées par Serilog lui-même. Veuillez vérifier ma mise à jour.
Je cherchais cela aussi et je l'ai découvert sur la page de problème github du projet. Vous devez utiliser la propriété "removeStandardColumns" dans "columnOptionsSection".
WriteTo": [ { "Name": "PostgreSQL", "Args": { "connectionString": "User ID=;Password=;Host=localhost;Port=5432;Database=", "needAutoCreateTable": "true", "schemaName": "banklink", "tableName": "Logs", "columnOptionsSection": { "removeStandardColumns": [ "Message", "Message_Tempate", "Level", "Timestamp", "Exception", "Log_Event" ], "customColumns": [ { "ColumnName": "message", "DataType": "text", "AllowNull": true }, { "ColumnName": "message_template", "DataType": "text", "AllowNull": true }, { "ColumnName": "logcode", "DataType": "integer", "AllowNull": true }, { "ColumnName": "level", "DataType": "integer", "AllowNull": true }, { "ColumnName": "timestamp", "DataType": "timestamp", "AllowNull": true }, } } } }