首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让JSNLog用NLog登录

让JSNLog用NLog登录
EN

Stack Overflow用户
提问于 2017-09-29 08:47:24
回答 2查看 1.3K关注 0票数 0

我目前正在尝试为我的ASP.Net应用程序实现一个日志系统,类似于,其中使用Elmah捕获所有发生的.NET未捕获异常,并将它们记录到一个SQL数据库中,而NLog用于更轻量级的Debug()和Info()调用,这些调用也将被记录到Server上。除此之外,我还想添加JSNLog,这样我就可以将Javascript /Info/Error等全部发送到NLog中,以便存储在SQL中。

我已经通过NuGet包安装了Elmah,并对我的web.config进行了必要的更改

代码语言:javascript
复制
<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数据库。

我还安装了NLogNLog.Config NuGet包,并将两个节点添加到NLog.config文件中。

代码语言:javascript
复制
<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?在这个装置中,我有什么遗漏了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-06 10:32:11

因此,今天是作为一名开发人员的日子之一,在那里你会为自己的愚蠢感到谦卑。事实证明,对我的问题的隐藏答案是,您必须确保使用与您在JSNLog中创建的NLog记录器完全相同的名称调用NLog.config。

例如,我的NLog记录器名为databaseLogger

代码语言:javascript
复制
<rules>
    <!-- database logger -->
    <logger levels="Error,Warn,Fatal" name="databaseLogger" writeTo="database"/>
</rules>

因此,当我从JSNLog登录时,我需要确保我打电话给

代码语言:javascript
复制
JL("databaseLogger").error("This is an error!");
票数 2
EN

Stack Overflow用户

发布于 2017-09-30 09:11:01

我是JSNLog的作者。我在JSNLog github问题页面上看到了同样的问题,在那里我写了一个答案。

因为这个场景(基于严重性记录到2个日志包)并不常见,所以我没有尝试对此进行故障排除。

不过,我可以提出以下建议:

  • 编写一个基于严重性的Common.Logging适配器,该适配器同时写入NLog和Elmah,详见我在github问题页面上的回答。
  • 将所有内容记录到NLog,并使用NLog目标将所有异常发送到Elmah。在这个场景中,您将安装JSNLog.NLog以将客户端条目记录到NLog:https://github.com/NLog/NLog.Elmah
  • 如果在其内置日志查看器中使用Elmah,则可能需要考虑切换到Serilog和Seq。这允许您将所有日志发送到一个日志包。Seq允许您定义过滤器,因此您可以创建一个只显示关键错误的筛选器。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46485108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档