Error handling 在Quartz计划作业中记录错误时使用什么?

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,首先查询我的主页,然后通过调度程序代码,并将其用作上下文,但没有成

我有一个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>