У меня есть проект N-Tier, один из проектов - библиотека классов журнала ошибок. К этому я добавил пакет Nuget для Elmah. По сути дела, я беру дополнительную информацию из метода, который забрасывал исключение, упаковывая его в новое исключение, которое я создаю, и даю это ELMAH.ELMAH в библиотеке классов, нужен ли веб-пользовательскому интерфейсу ELMAH?
Библиотека классов может быть добавлена в другие проекты в решении (Service Layer, UI). Когда нет HTTP-контекста, я записываю в файл в данный момент.
string details = BuildExceptionString(exception, extraDetails, arguments);
LoggingModuleException ex = new LoggingModuleException(details);
// We may have come from a website, or a backend layer. Handle both.
if (HttpContext.Current != null)
{
ErrorSignal.FromCurrentContext().Raise(ex); // ELMAH Signaling
}
else
{
// Not a web app so no httpcontext
System.IO.File.WriteAllText(@"C:\MyLogs\Log.txt", ex.Message);
}
Мой вопрос, когда я называю этот код библиотеки из пользовательского интерфейса (MVC) слой у меня есть HTTP-контекст, и это вызывает ELMAH. Однако я не знаю, куда идут ошибки! Должен ли мой слой пользовательского интерфейса иметь ELMAH для вызова функции Raise()?
Когда я добавил ELMAH в свою библиотеку классов, у меня не было никакого файла .config. Я добавил App.config с некоторыми настройками ELMAH, которые я скопировал из другого вопроса. Я вставил его ниже, но я не могу сказать, что он используется библиотекой классов вообще ...
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
<section name="errorTweet" requirePermission="false" type="Elmah.ErrorTweetSectionHandler, Elmah"/>
</sectionGroup>
</configSections>
<elmah>
<security allowRemoteAccess="yes" />
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="C:\MyLogs\Elmah\" />
</elmah>
<system.web>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</httpModules>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
</system.web>
<location path="elmah.axd">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>