1
votes

Comment écrire des journaux dans EventLog par ILogger dans Asp.net Core?

Je suis ce document Connexion .NET Core et ASP.NET Core , essayez d'écrire le journal dans Windows EventLog.

D'abord, je crée la source et le journal dans le journal des événements Windows:

[Route("[controller]")]
[ApiController]
public class ServerController : ControllerBase
{
    ILogger<ServerController> _logger = null;
    public ServerController(ILogger<ServerController> logger)
    {
        _logger = logger;
    }

    [HttpGet("GetServerInfo")]
    public string GetServerInfo()
    {
        _logger.LogInformation("GetServerInfo Called");
        return "Hello I'm Server";
    }
}

et il est créé.

ensuite, j'ai configuré la connexion dans CreateHostBuilder à partir de Program.cs de mon application ASP.NET Core (core 3.0):

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddEventLog(new EventLogSettings
            {
                SourceName = "MyTestSource",
                LogName = "MyTestLog"
            });
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Je pense que c'est tout. Ensuite, j'utilise logger dans mon contrôleur:

if (!EventLog.SourceExists("MyTestSource"))
{
    EventLog.CreateEventSource("MyTestSource", "MyTestLog");
    return;
}

mais il n'y a rien dans MyTestLog dans Windows EventLog. Y a-t-il quelque chose que j'ai manqué?


0 commentaires

3 Réponses :


1
votes

Essayez de faire passer votre journalisation à _logger.LogError ("GetServerInfo Called" ") et voyez si cela fonctionne. Si tel est le cas, vous devrez configurer le filtrage de votre journal


1 commentaires

salut Paul, LogError peut écrire dans Windows EventLog, mais LogInformation ne fonctionne pas, comment le faire fonctionner?



2
votes

Cela est causé par Host.CreateDefaultBuilder (args) , qui exécute:

.ConfigureLogging(loggingBuilder => {
    loggingBuilder.AddFilter<EventLogLoggerProvider>((Func<LogLevel, bool>) (level=>level>=LogLevel.Warning));
}

sous le capot. L'avertissement est 1 niveau supérieur à Information, donc ...

En tant que solution, vous pouvez créer un nouveau HostBuilder en utilisant new HostBuilder () et le configurer à partir de zéro ou remplacez ce comportement en appelant .ConfigureLogging après avoir créé le générateur d'hôte par défaut.


0 commentaires

1
votes

Vous pouvez opter pour une approche de configuration uniquement, en laissant votre code CreateHostBuilder existant tel quel.

Comme mentionné dans le document que vous avez lié, sous section Windows Eventlog , le EventLogProvider prend par défaut le niveau d'avertissement lorsqu'il n'est pas explicitement configuré:

Contrairement aux autres fournisseurs, le fournisseur EventLog n'hérite pas du paramètres par défaut des non-fournisseurs.
Si les paramètres du journal EventLog ne sont pas spécifié, ils sont par défaut LogLevel.Warning.

Pour abaisser ce niveau de journalisation à Information , vous devez prévoir une entrée explicite pour le fournisseur EventLog dans Logging section de votre appsettings. {Environment} .json file.

Par exemple: appsettings.Development.json:

{
    "Logging": {
        "LogLevel": {
            "Default": "Debug",
            "System": "Information",
            "Microsoft": "Information"
        },
        "EventLog": {
            "LogLevel": {
                "Default": "Information"
            }
        }
    }
}


0 commentaires