Что использовать для регистрации ошибок в запланированном задании Quartz? - PullRequest
1 голос
/ 07 июня 2011

У меня есть приложение asp.net mvc 3.В этом приложении у меня есть система напоминаний, которая использует кварц, чтобы получать сообщения из базы данных и отправлять их.

Мне интересно, как лучше всего войти, если что-то случится (скажем, тайм-аут базы данных - я хочузнать об этом).

Я использую в своем приложении 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).

1 Ответ

0 голосов
/ 07 июня 2011

Вы можете попробовать NLog .Это очень просто реализовать и эффективно.
Вы можете отправить электронная почта , отследить практически все.Обычно я склонен хранить все в отдельном конфигурационном файле (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, который иногда может быть огромным.

...