Poziom `Trace` nie jest logowany.

0

Cześć,

Próbuje do projektu .net core dodać logowanie z użyciem nLog'a.
Wszystko niby działa, ale z jakiegoś powodu logi poziomu trace nie są uruchamiane (pozostałe poziomy działają prawidłowo).

Co zrobiłem źle?

Moja konfiguracja:
appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Trace",
      "Microsoft.Hosting.Lifetime": "Trace"
    }
  },
  "AllowedHosts": "*"
}

program.cs:

public class Program
{
    public static void Main(string[] args)
    {
        var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger();
        try
        {
            logger.Debug("Application Starting Up");
            CreateHostBuilder(args).Build().Run();
        }
        catch (Exception exception)
        {
            logger.Error(exception, "Stopped program because of exception");
            throw;
        }
        finally
        {
            NLog.LogManager.Shutdown();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            }).ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(LogLevel.Trace);
            })
        .UseNLog();
}

NLog.config:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

	<targets>
		<target xsi:type="ColoredConsole" name="consoleTarget" layout="${longdate} ${uppercase:${level}} ${message}" />
	</targets>

	<rules>
		<logger name="*" minlevel="Trace" writeTo="consoleTarget" />
	</rules>
</nlog>
1

Ale nie masz w kodzie żadnego Trace. Czego oczekujesz a co masz? i zdecyduj się jak robisz konfigurację czy przez appsettings.json czy przez NLog.config.

0

Ale nie masz w kodzie żadnego Trace. Czego oczekujesz a co masz?

Mam Trace w dalszej części.
Dla testu dodałem też w metodzie Main - tutaj działa.
Wyglada na to, że nLog jest skonfigurowany poprawnie, ale z jakiegoś powodu mechanizm logowania nie przepuszcza poziomu Trace

Kontroler którym testuje:

[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
    ILogger<ProductController> logger;

    public ProductController(ILogger<ProductController> logger)
    {
        this.logger = logger;
                    
        logger.LogTrace($"ProductController()");
        logger.LogInformation($"ProductController()");    
    }

    [HttpGet]
    public JsonResult Get()
    {
       return  new JsonResult("ProductController");
    }

    [HttpGet("FindProduct/{id}")]
    public JsonResult FindProduct(int id)
    {
        logger.LogTrace($"FindProduct()");
        logger.LogInformation($"FindProduct({id})");
        return new JsonResult("TEST");
    }
}

Po uruchomieniu projektu i przejściu na endpoint /api/Product/FindProduct/2001 w konsoli mam:
screenshot-20220328132324.png

i zdecyduj się jak robisz konfigurację czy przez appsettings.json czy przez NLog.config.

Z racji tego, że nie chce to działać zacząłem dodawać w każdym miejscu.

0

A Debug ci dochodzi to tej linii logiem ?

0

Nie jestem pewny o co pytasz.
Jeżeli o to czy poziom debug jest logowany - to wyglada na to że nie...

Zmieniłem akcję w kontrolerze na:

[HttpGet("FindProduct/{id}")]
public JsonResult FindProduct(int id)
{
    logger.LogTrace($"FindProduct()");
    logger.LogInformation($"FindProduct({id})");
    logger.LogDebug($"FindProduct({id})");
    logger.LogWarning($"FindProduct({id})");
    logger.LogError($"FindProduct({id})");
    return new JsonResult("TEST");
}

Wynik na konsoli:
screenshot-20220328133545.png

0

Umiesz używać Debugera w aplikacji? Bo prawdopodobnie przez błąd w kodzie/ dane linia, o jaką ci się rozchodzi nie jest wywoływana.

0

Umiem - po prostu nie zrozumiałem Twojego pytanie

Program poprawnie przechodzi przez dane linie.
W ostatnim screenie widać to m.in. po tym, że komunikaty z poziomem warning i error są poprawnie zalogowane.

1

Mnie to w ogóle zastanawia, czemu cokolwiek tu działa przy takim miksie różnych loggerów i ich konfiguracji.
Ja bym na początek pozbył się tego antycznego nlog.config i podążył za instrukcją

1 użytkowników online, w tym zalogowanych: 0, gości: 1