使用NLog的Dot Net Core创建日志文件,但从不记录任何内容

时间:2019-03-11 20:50:11

标签: c# .net-core nlog

我已经根据其他人的尝试尝试了各种更改,现在几乎就像本教程中显示的那样。

我可以看到它创建了它的内部日志,然后它使用init main创建了我的日志文件,之后没有任何记录。

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"
      autoReload="true"
      internalLogLevel="Info"
      internalLogFile="c:\temp\internal-nlog.txt">

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file  -->
    <target xsi:type="File" name="allfile" fileName="c:\logs\nlog-all-${shortdate}.log"
            layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
  </rules>
</nlog>

Program.cs

   public static void Main(string[] args)
    {
        // NLog: setup the logger first to catch all errors
        var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
        try
        {
            logger.Debug("init main");
            //BuildWebHost(args).Build().Run();
        }
        catch (Exception ex)
        {
            //NLog: catch setup errors
            logger.Error(ex, "Stopped program because of exception");
            throw;
        }
        finally
        {
            // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
            NLog.LogManager.Shutdown();
        }

        var webHost = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                var env = hostingContext.HostingEnvironment;
                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
                config.AddEnvironmentVariables();

                //Log.Logger = new LoggerConfiguration().MinimumLevel.Error().WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "logs/{Date}.txt")).CreateLogger();
            })
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            })
            .UseStartup<Startup>()
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            })
            .UseNLog()
            .Build();

        webHost.Run();
    }

这是我如何在控制器中使用它的示例

public class AuthController : BaseController
{
    private readonly ILogger<AuthController> _logger;

    public AuthController(CoordinaireDbContext context, ILogger<AuthController> logger, AuthService Auth) : base(context, Auth)
    {
        _logger = logger;
    }

    [AllowAnonymous]
    [HttpPost]
    public IActionResult AuthPost(LoginModel model)
    {
        _logger.LogInformation("test log");
    }
}

1 个答案:

答案 0 :(得分:2)

您的代码初始化NLog,然后调用 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Register</title> <script> function validate() { var username = document.form.username.value; var email = document.form.email.value; var password = document.form.password.value; var conpassword= document.form.conpassword.value; if (username==null || username=="") { alert("Full Name can't be blank"); return false; } else if (email==null || email=="") { alert("Email can't be blank"); return false; } else if(password.length<6) { alert("Password must be at least 6 characters long."); return false; } else if (password!=conpassword) { alert("Confirm Password should match with the Password"); return false; } } </script> </head> <body> <center><h2>Java Registration application using MVC and MySQL </h2></center> <form name="form" action="UserRegistrationServlet" method="post" onsubmit="return validate()"> <table align="center"> <tr> <td>Username</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>Email</td> <td><input type="text" name="email" /></td> </tr> <tr> <td>Password</td> <td><input type="password" name="password" /></td> </tr> <tr> <td>Confirm Password</td> <td><input type="password" name="conpassword" /></td> </tr> <tr> <td><%=(request.getAttribute("errMessage") == null) ? "" : request.getAttribute("errMessage")%></td> </tr> <tr> <td></td> <td><input type="submit" value="Register"></input><input type="reset" value="Reset"></input></td> </tr> </table> </form> </body> </html> ,然后启动WebHost。

尝试以下方法:

NLog.LogManager.Shutdown()