Error handling 在Quartz计划作业中记录错误时使用什么?
我有一个asp.NETMVC3应用程序。在这个应用程序中,我有一个提醒系统,它使用quartz从数据库中抓取消息并发送出去 我想知道如果发生了什么事情(比如数据库超时,我想知道这一点),最好的记录方式是什么 我在我的mvc应用程序ELMAH中使用它来记录日志,效果非常好。然而,因为quartz.net是它自己的线程,没有httpcontext,所以我不能使用ELMAH(或者至少我认为我不能)。我试图创建一个httpcontext,首先查询我的主页,然后通过调度程序代码,并将其用作上下文,但没有成功Error handling 在Quartz计划作业中记录错误时使用什么?,error-handling,quartz-scheduler,elmah,quartz.net,error-logging,Error Handling,Quartz Scheduler,Elmah,Quartz.net,Error Logging,我有一个asp.NETMVC3应用程序。在这个应用程序中,我有一个提醒系统,它使用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.config)中
如您所见,您可以激活或停用不同的级别
我在quartz.net作业以及调试/跟踪系统中使用了它,它完成了它的工作
唯一的限制是您没有ELMAH接口,这有时可能是一个巨大的限制
<?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>