我目前正在尝试为我的 ASP.Net 应用程序实现一个与此类似的日志记录系统,其中 Elmah 用于捕获发生的所有 .NET 未捕获异常并将它们记录到 SQL 数据库中,而 NLog 用于更轻量级的调试() 和 Info() 调用也将记录到 SQL Server。除此之外,我还想添加JSNLog,以便我可以将我所有的 Javascript 调试/信息/错误等发送到 NLog 以存储在 SQL 数据库中。
我已经通过 NuGet 包安装了 Elmah,并对我的 web.config 进行了必要的更改
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ErrorLog"/>
<security allowRemoteAccess="false" />
</elmah>
<connectionStrings>
<add
name="ErrorLog"
connectionString="ConnectionStringGoesHere"
providerName="System.Data.SqlClient" />
</connectionStrings>
我可以确认 Elmah 正确记录到我的 SQL 数据库。
我还安装了NLog
和NLog.Config
NuGet 包,并在NLog.config
文件中添加了两个节点
<targets>
<!-- database target -->
<target name="database"
xsi:type="Database"
connectionStringName="NLog"
commandText="exec dbo.InsertLog
@level,
@callSite,
@type,
@message,
@stackTrace,
@innerException,
@additionalInfo">
<parameter name="@level" layout="${level}" />
<parameter name="@callSite" layout="${callsite}" />
<parameter name="@type" layout="${exception:format=type}" />
<parameter name="@message" layout="${exception:format=message}" />
<parameter name="@stackTrace" layout="${exception:format=stackTrace}" />
<parameter name="@innerException"
layout="${exception:format=:innerFormat=ShortType,Message,Method:MaxInnerExceptionLevel=1:InnerExceptionSeparator=}" />
<parameter name="@additionalInfo" layout="${message}" />
</target>
</targets>
<rules>
<!-- database logger -->
<logger levels="Error,Warn,Fatal" name="databaseLogger" writeTo="database"/>
</rules>
这也已经从我的 .NET 应用程序中进行了测试,它可以正确记录到 SQL 数据库。
现在进入 JSNLog。我已按照安装说明安装JSNLog.NLog
NuGet 包并添加<%= JSNLog.JavascriptLogging.Configure() %>
到我的 .ASPX 页面。
但是,如果我JL().info("Testing From JS");
从我的 ASPX 页面调用,或者即使我调用一个不存在的函数来产生错误,我也看不到应该发送到存储在我的 SQL 数据库中的 NLog 的日志。当我将它添加到我的控制台时,JSNLog 肯定安装正确:
所以看起来 JSNLog 没有将日志传递到 NLog 上?我在这个安装中有什么遗漏的吗?