gpt4 book ai didi

error-handling - 用什么来记录 Quartz 计划作业中的错误?

转载 作者:行者123 更新时间:2023-12-03 08:01:56 33 4
gpt4 key购买 nike

我有一个 asp.net mvc 3 应用程序。在这个应用程序中,我有一个提醒系统,它使用 quartz 从数据库中获取消息并将它们发送出去。

我想知道如果发生某些事情,最好的记录方式是什么(比如数据库超时——我想知道这一点)。

我在我的 mvc 应用程序 ELMAH 中使用我的日志记录,它工作得很好。然而,由于quartz.net 是它自己的线程,没有httpcontext 我不能使用ELMAH(或者至少我认为我不能)。我尝试通过首先查询我的主页然后通过调度程序代码并将其用作上下文来创建 httpcontext,但这不起作用。

System.ArgumentNullException was unhandled by user code
Message=Value cannot be null.
Parameter name: application
Source=Elmah
ParamName=application
StackTrace:
at Elmah.ErrorSignal.Get(HttpApplication application)
at Elmah.ErrorSignal.FromContext(HttpContext context)
at Job.Execute(JobExecutionContext context) in Job.cs:line 19
at Quartz.Core.JobRunShell.Run()
InnerException:

ErrorSignal.FromCurrentContext().Raise(new System.Exception());

因此,我正在寻找如何让 ELMAH 在这种情况下工作或与之相媲美的东西(发送电子邮件、堆栈跟踪和 ELMAH 所拥有的一切的东西)。

最佳答案

你可以试试NLog .它实现起来非常简单且有效。
您可以发送email ,几乎可以追踪一切。
我通常倾向于将所有内容保存在单独的配置文件(NLog.Config)中

<?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" >
<targets>
<target name="DebugHandler" type="File" filename="${basedir}/_Logs/${date:format=yyyyMMdd}_${level}.Log"
layout="${longdate} ${logger} ${aspnet-session:variable=UserName} ${threadid} ${environment} ${identity} ${aspnet-request} ${message} ${exception}" />
<target name="ErrorHandler" type="File" filename="${basedir}/_Logs/${date:format=yyyyMMdd}_${level}.Log"
layout="${longdate} ${logger} ${aspnet-session:variable=UserName} ${threadid} ${environment} ${aspnet-request} ${message} ${exception}" />
<target name="FatalHandler" type="File" filename="${basedir}/_Logs/${date:format=yyyyMMdd}_${level}.Log"
layout="${longdate} ${logger} ${aspnet-session:variable=UserName} ${threadid} ${environment} ${aspnet-request} ${message} ${exception}" />
<target name="GenericHandler" type="File" filename="${basedir}/_Logs/${date:format=yyyyMMdd}_${level}.Log"
layout="${longdate} ${logger} ${aspnet-session:variable=UserName} ${threadid} ${environment} ${aspnet-request} ${message} ${exception}" />
</targets>
<rules>
<logger name="*" level="Debug" appendTo="DebugHandler" />
<logger name="*" level="Error" appendTo="ErrorHandler" />
<logger name="*" level="Fatal" appendTo="FatalHandler" />
<logger name="*" levels="Info,Warn" appendTo="GenericHandler" />
</rules>
</nlog>

如您所见,您可以激活或停用不同的级别。

我已经在我的quartz.net 工作以及调试/跟踪系统中使用了它,它完成了它的工作。

唯一的限制是您没有 ELMAH 接口(interface),有时这可能是一个巨大的限制。

关于error-handling - 用什么来记录 Quartz 计划作业中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257906/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com