首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ELMAH在类库中,web UI使用者也需要ELMAH吗?

ELMAH在类库中,web UI使用者也需要ELMAH吗?
EN

Stack Overflow用户
提问于 2015-06-18 16:58:05
回答 1查看 1K关注 0票数 0

我有一个N层项目,其中一个项目是错误日志类库.除此之外,我还为Elmah添加了Nuget包。本质上,我所做的是从抛出异常的方法中获取更多信息,将其打包到我创建的新异常中,并提供给ELMAH。

类库可以添加到解决方案中的其他项目(服务层、UI)中。当没有HTTP上下文时,我立即将其写入文件。

代码语言:javascript
复制
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);
}

我的问题是,当我从UI (MVC)层调用这个库代码时,我确实有一个HTTP上下文,它调用了ELMAH。但是,我不知道这些错误会发生在哪里!我的UI层需要有ELMAH才能使调用引发()工作吗?

当我将ELMAH添加到类库时,没有创建任何.config文件。我添加了一个带有一些ELMAH设置的App.config,我复制了另一个问题。我把它贴在下面,但我不能说类库正在使用它.

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-19 09:53:10

我找到了答案。

线索在于,如果您需要一些appSettings,类库不使用自己的App.config,而是从调用者的.config中提取它们。因此,对于调用这个类库的MVC站点,appSettings应该位于web.config中。

因此,为了让已安装了ELMAH的类库在有http上下文(来自网站)时使用ELMAH登录,网站的web.config需要ELMAH配置信息,类库将读取和使用这些信息。

代码语言:javascript
复制
<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" />
</sectionGroup>
</configSections>

//.

代码语言:javascript
复制
<system.web>
//...
<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>

//.

代码语言:javascript
复制
</runtime>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
</system.webServer>
<elmah>
<security allowRemoteAccess="false" />
</elmah>
<location path="elmah.axd" inheritInChildApplications="false">
<system.web>
  <httpHandlers>
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
  </httpHandlers>
</system.web>
<system.webServer>
  <handlers>
    <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
  </handlers>
</system.webServer>
</location>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30921421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档