0
votes

Serliog Sinks: la lecture de la configuration json ne fonctionne pas

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();
  }


0 commentaires

3 Réponses :


0
votes

Essayez-le comme ceci:

WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                .ReadFrom.Configuration(hostingContext.Configuration))
            .Build();


1 commentaires

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?



1
votes

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.


2 commentaires

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.



0
votes

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
                },
            }
        }
    }
}


0 commentaires