use*_*042 3 connection-string app-config nlog asp.net-core-configuration asp.net-core-3.1
我有一个 .net core 3.1 Console 项目。我正在尝试将其设置为使用 NLog。我使用 2 个目标,数据库和文件。我可以写入文件,但不能写入数据库。我确信连接字符串是正确的,因为我在其他项目中使用它,但它们是在 4.7 框架中编写的。
这是我的 app.config 设置:
<connectionStrings>
<add name="NLog" connectionString="Data Source=mySource;Initial Catalog=MyLogging;Integrated Security=SSPI;" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
这是我尝试在目标中设置它:
<?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\nlog-internal.log">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<target name="database" xsi:type="Database" connectionString="${configsetting:name=NLog}" commandType="StoredProcedure" commandText="[dbo].[MyLogEntry]">
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="Database" />
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
来自 c:\temp\nlog-internal.log 的错误消息是:
2021-02-10 16:11:48.3381 Error DatabaseTarget(Name=database): Error when writing to database. Exception: System.InvalidOperationException: The ConnectionString property has not been initialized.
at System.Data.SqlClient.SqlConnection.PermissionDemand()
at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at NLog.Targets.DatabaseTarget.OpenConnection(String connectionString, LogEventInfo logEventInfo)
at NLog.Targets.DatabaseTarget.EnsureConnectionOpen(String connectionString, LogEventInfo logEventInfo)
at NLog.Targets.DatabaseTarget.WriteLogEventToDatabase(LogEventInfo logEvent, String connectionString)
Run Code Online (Sandbox Code Playgroud)
问题出在:connectionString="${configsetting:name=NLog}"
app.config 并不真正适合 ASP.NET Core。这是可能的,但它很脏。
建议移至 JSON 应用程序设置,例如 appsettings.json (请参阅ASP.NET Core 中的配置)
例如:
应用程序设置.json:
{
"ConnectionStrings":{
"NLog":"Data Source=mySource;Initial Catalog=MyLogging;Integrated Security=SSPI;",
}
}
Run Code Online (Sandbox Code Playgroud)
和用途:${configsetting:item=ConnectionStrings.NLog}
请注意,${configsetting}您需要以下软件包之一:
请参阅https://nlog-project.org/config/?tab=layout-renderers&search=configsetting
| 归档时间: |
|
| 查看次数: |
2519 次 |
| 最近记录: |