关于c#:不要将日志写入数据库NLog + ASP .NET 5 + SQL Server

Do not write logs to the database NLog + ASP .NET 5 + SQL Server

我的应用程序基于ASP .NET 5构建
我曾经在.NET Core上做过一个项目,一切都很好,日志没有问题。 但是在ASP.NET 5中,我不知道如何执行此操作
我正在尝试使用此配置将日志写入数据库:

https://github.com/nlog/NLog/wiki/Database-target#example-configurations

这是我的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?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\
log-internal.log"
>

  <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
  <variable name="myvar" value="myvalue"/>

  <!--
  See https://github.com/nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->
  <targets>
  <target name="database" xsi:type="Database">

    <connectionStringName>"Server=localhost\\\\SQLEXPRESS;Database=LocalDB;User ID=sa;Password=1234;"</connectionStringName>


    <commandText>
      insert into dbo.LogExcelWorker (
      Application, Logged, Level, Message,
      Username,
      ServerName, Port, Url, Https,
      ServerAddress, RemoteAddress,
      Logger, CallSite, Exception
      ) values (
      @Application, @Logged, @Level, @Message,
      @Username,
      @ServerName, @Port, @Url, @Https,
      @ServerAddress, @RemoteAddress,
      @Logger, @Callsite, @Exception
      );
    </commandText>

    <parameter name="@application" layout="${appsetting:name=AppName:default=Unknown\\: set AppName in appSettings}" />
    <parameter name="@logged" layout="${date}" />
    <parameter name="@level" layout="${level}" />
    <parameter name="@message" layout="${message}" />

    <parameter name="@username" layout="${identity}" />

    <parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME}" />
    <parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
    <parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
    <parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />

    <parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
    <parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />

    <parameter name="@logger" layout="${logger}" />
    <parameter name="@callSite" layout="${callsite}" />
    <parameter name="@exception" layout="${exception:tostring}" />
  </target>
</targets>
  <rules>

    <logger name="*" minlevel="Debug" writeTo="database" />
  </rules>
</nlog>

我在数据库中创建了表

我尝试对日志进行测试调用,但未写下任何内容:

1
2
3
4
5
6
7
8
9
10
11
12
    public string Index()
    {
        Logger log = LogManager.GetCurrentClassLogger();
        log.Trace("trace message" );
        log.Debug("debug message" );
        log.Info("info message" );
        log.Warn("warn message" );
        log.Error("error message" );
        log.Fatal("fatal message" );

        return"start...";
    }

但是数据库中没有记录


WriteTog属性错误

1
<logger name="*" minlevel="Debug" writeTo="f" />

应该在你的情况下

1
<logger name="*" minlevel="Debug" writeTo="database" />

(更改目标名称)

一般在这种情况下启用内部日志。 这将对您有很大帮助。 这里有一个示例如何启用:

1
2
3
4
internalLogLevel="trace"
internalLogFile="log/internal-nlog.txt"
throwExceptions="true"  
throwConfigExceptions="true"


您需要指向正确的目标名称

1
<logger name="*" minlevel="Debug" writeTo="database" />