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" /> |