NLog,ASP.NET核心和SQL - 服务器未找到或无法访问
问题描述:
我一直在尝试使用NLog获取ASP.NET Core站点。它工作正常,直到我尝试写入SQL数据库。我试过本地数据库和Azure数据库 - 所有这些都有相同的问题。我甚至将nlog表添加到一个已知的数据库中,一个网站已经连接到(使用EF)。写入数据库时NLog,ASP.NET核心和SQL - 服务器未找到或无法访问
错误错误:
我使用的NuGet包:NLog.Web.AspNetCore
不管是什么,我得到以下。异常: System.Data.SqlClient.SqlException(0x80131904):与SQL Server建立连接时出现与网络有关的或 实例特定的错误。服务器未找到或无法访问。验证 实例名称是否正确,并且SQL Server配置为允许远程连接的 。
这里是我如何配置的东西(我试图改变这些语句的顺序):
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddNLog();
app.AddNLogWeb();
env.ConfigureNLog("nlog.config");
LogManager.Configuration.Variables["connectionString"] = Configuration.GetConnectionString("DefaultConnection");
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
//etc...
这里是我的n日志配置:
<?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="Warn"
internalLogFile="c:\temp\internal-nlog.txt">
<!-- define various log targets -->
<targets>
<target name="db"
xsi:type="Database"
commandType="StoredProcedure"
commandText="[dbo].[NLog_AddEntry_p]">
<parameter name="@machineName" layout="${machinename}" />
<parameter name="@siteName" layout="${iis-site-name}" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@username" layout="${aspnet-user-identity}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@properties" layout="${all-event-properties:separator=|}" />
<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="@callSite" layout="${callsite}" />
<parameter name="@exception" layout="${exception:tostring}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="db" />
</rules>
</nlog>
末,这里是我的appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\projectsV13;Database=XXXX;Trusted_Connection=True;MultipleActiveResultSets=true",
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
答
你没有在数据库目标中使用变量“connectionString”。
您还需要
<target name="db"
..
connectionString="${var:connectionString}"
>
变量在NLOG不会自动绑定到目标。你需要在你的配置中设置和使用它们。
答
首先,
ConnectionString的是看起来像不同
,如果你使用的是本地,你可以把这个错误。但是,如果你有一台服务器 定义代码是这样的。
"ConnectionStrings": { "DatabaseContext": "Server=(localdb)\\mssqllocaldb;Database=NAME;Trusted_Connection=True;MultipleActiveResultSets=true"}
在我看来:关于错误的第二个原因。也许你无法正确读取connectionString。
这是正确的@Julian。我曾经读过在目标中使用连接字符串的地方。所以相反,我使用这个:LogManager.Configuration.Variables [“connectionString”] = Configuration.GetConnectionString(“DefaultConnection”);我将再次尝试使用nlog config中目标节点中的数据。 – Schwammy
你还需要'LogManager.Configuration.Variables [“connectionString”] = Configuration.GetConnectionString(“DefaultConnection”);' - 你需要(config和C#) – Julian
Both?好吧,我会尝试!我在测试后会在这里更新。 – Schwammy