我目前正在尝试为我的ASP.Net应用程序实现一个日志系统,类似于这,其中使用Elmah捕获所有发生的.NET未捕获异常,并将它们记录到一个SQL数据库中,而NLog用于更轻量级的Debug()和Info()调用,这些调用也将被记录到Server上。除此之外,我还想添加JSNLog,这样我就可以将Javascript /Info/Error等全部发送到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页面。
但是,如果我从我的ASPX页面调用JL().info("Testing From JS");,或者即使我调用一个不存在的函数来产生错误,我也不会看到应该发送到NLog的日志存储在我的SQL中。当我将JSNLog添加到我的控制台时,肯定安装了正确的:

那么,JSNLog似乎没有将日志传递给NLog?在这个装置中,我有什么遗漏了吗?
发布于 2017-10-06 10:32:11
因此,今天是作为一名开发人员的日子之一,在那里你会为自己的愚蠢感到谦卑。事实证明,对我的问题的隐藏答案是,您必须确保使用与您在JSNLog中创建的NLog记录器完全相同的名称调用NLog.config。
例如,我的NLog记录器名为databaseLogger
<rules>
<!-- database logger -->
<logger levels="Error,Warn,Fatal" name="databaseLogger" writeTo="database"/>
</rules>因此,当我从JSNLog登录时,我需要确保我打电话给
JL("databaseLogger").error("This is an error!");发布于 2017-09-30 09:11:01
我是JSNLog的作者。我在JSNLog github问题页面上看到了同样的问题,在那里我写了一个答案。
因为这个场景(基于严重性记录到2个日志包)并不常见,所以我没有尝试对此进行故障排除。
不过,我可以提出以下建议:
https://stackoverflow.com/questions/46485108
复制相似问题