C# 将Nlog与SQL Server数据库结合使用

C# 将Nlog与SQL Server数据库结合使用,c#,asp.net-web-api,.net-core,nlog,C#,Asp.net Web Api,.net Core,Nlog,我想将nlog与SQL Server数据库一起使用。我阅读了官方文件和一些不同的文章。我将nlog连接到我的项目,项目成功构建 但当我开始调试时,在数据库中什么也不写。我在VisualStudio中没有看到任何错误。当我使用nlog只在文件中编写时,一切都很好。我使用实体框架核心创建nlog的表。我在appsettings.json中使用了相同的连接字符串,效果很好 我不知道我犯了什么错误 NLog.config: <?xml version="1.0" encodin

我想将nlog与SQL Server数据库一起使用。我阅读了官方文件和一些不同的文章。我将nlog连接到我的项目,项目成功构建

但当我开始调试时,在数据库中什么也不写。我在VisualStudio中没有看到任何错误。当我使用nlog只在文件中编写时,一切都很好。我使用实体框架核心创建nlog的表。我在appsettings.json中使用了相同的连接字符串,效果很好

我不知道我犯了什么错误

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">
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>  
  <targets>
    <target xsi:type="Database"
            name="dblog"
            connectionString="Data Source=.\\SQLEXPRESS;Initial Catalog=AyanaDB;integrated security=True;MultipleActiveResultSets=True;"
            commandText="INSERT INTO [dbo].[NLogs] ([CallSite], [Date], [Exception], [Level], [Logger], [MachineName], [Message], [StackTrace], [Thread], [Username])
                         VALUES (@CallSite, @Date, @Exception, @Level, @Logger, @MachineName, @Message, @StackTrace, @Thread, @Username);">
      <parameter name="@CallSite" layout="${callsite:filename=true}" />
      <parameter name="@Date" layout="${longdate}" />
      <parameter name="@Exception" layout="${exception}" />
      <parameter name="@Level" layout="${level}" />
      <parameter name="@Logger" layout="${logger}" />
      <parameter name="@MachineName" layout="${machinename}" />
      <parameter name="@Message" layout="${message}" />
      <parameter name="@StackTrace" layout="${stacktrace}" />
      <parameter name="@Thread" layout="${threadid}" />
      <parameter name="@Username" layout="${windows-identity:domain=true}" />
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="dblog" />
  </rules>
</nlog>

您可以看到的所有项目文件。

默认情况下,.NET Core上的
${windows identity}
不可用:

<parameter name="@Username" layout="${windows-identity:domain=true}" />

另请参见:

检查。激活NLog InternalLogger并检查警告/错误可能是个好主意。@RolfKristensen非常感谢。这对我真的很有帮助。“${windows identity:domain=true}”中出现错误。可能替换为
${environment user}
。另请参见@RolfKristensen Yes,使用${environment user}效果良好。非常感谢。)
public class EveningWorkService : IEveningWorkService
{
    public EveningWorkService(AyDbContext ayDbContext,
                              IRutorService rutorService,
                              IDriverService driverService,
                              ISoftService softService,
                              ILogService logService,
                              ILogger<EveningWorkService> logger)
    {
        _context = ayDbContext;
        _rutorService = rutorService;
        _driverService = driverService;
        _softService = softService;
        _logService = logService;
        _logger = logger;
        logger.LogInformation("It's work!");
    }
public class NLog
{
    public int Id { get; set; }
    public string CallSite { get; set; }
    public DateTime Date { get; set; }
    public string Message { get; set; }
    public string Exception { get; set; }
    public string Level { get; set; }
    public string Logger { get; set; }
    public string MachineName { get; set; }
    public string StackTrace { get; set; }
    public string Thread { get; set; }
    public string Username { get; set; }
}
<parameter name="@Username" layout="${windows-identity:domain=true}" />
<parameter name="@Username" layout="${environment-user}" />