标签: elmah

如何让ELMAH使用ASP.NET MVC [HandleError]属性?

我正在尝试使用ELMAH来记录我的ASP.NET MVC应用程序中的错误,但是当我在控制器上使用[HandleError]属性时,ELMAH在发生错误时不会记录任何错误.

正如我猜测它,因为ELMAH只记录未处理的错误,[HandleError]属性正在处理错误,因此无需记录它.

我如何修改或如何修改属性,以便ELMAH可以知道有错误并记录它..

编辑:让我确保每个人都理解,我知道我可以修改那个不是我问的问题的属性... ELMAH在使用handleerror属性时会被绕过,这意味着它不会看到有错误因为它被处理了已经由属性...我要问的是有一种方法让ELMAH看到错误并记录它即使属性处理它...我搜索周围,没有看到任何方法调用强制它来记录错误....

asp.net-mvc logging elmah

562
推荐指数
7
解决办法
11万
查看次数

如何使用ELMAH手动记录错误

是否可以使用ELMAH执行以下操作?

logger.Log(" something");
Run Code Online (Sandbox Code Playgroud)

我正在做这样的事情:

try 
{
    // Code that might throw an exception 
}
catch(Exception ex)
{
    // I need to log error here...
}
Run Code Online (Sandbox Code Playgroud)

ELMAH不会自动记录此异常,因为它已被处理.

c# error-logging elmah exception-handling

257
推荐指数
7
解决办法
9万
查看次数

无法加载文件或程序集'System.Data.SQLite'

我在我的ASP.NET项目中安装了ELMAH 1.1 .Net 3.5 x64,现在我收到此错误(每当我尝试查看任何页面时):

无法加载文件或程序集'System.Data.SQLite,Version = 1.0.61.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'或其依赖项之一.尝试加载格式不正确的程序.

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.BadImageFormatException:无法加载文件或程序集'System.Data.SQLite,Version = 1.0.61.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'或其依赖项之一.尝试加载格式不正确的程序.

底部有更多错误详情.

我的Active Solution平台是"任何CPU",我在x64上运行x64 Windows 7,当然还有处理器.我们使用这个版本的ELMAH的原因是因为1.0 .Net 3.5(x86,它是它编译的唯一平台)在我们的x64 Windows服务器上给了我们同样的错误.

我已经尝试编译x86和x64,我得到了同样的错误.我已经尝试删除所有编译器输出(bin和obj).最后我直接引用了SQLite dll,这是项目在服务器上工作所不需要的东西,我有这个编译错误:

错误1警告错误:程序集生成 - 引用程序集'System.Data.SQLite.dll'针对不同的处理器MyProject

任何想法可能是什么问题?

更多错误详情:

来源错误:

在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.

堆栈跟踪:

[BadImageFormatException:无法加载文件或程序集'System.Data.SQLite,Version = 1.0.61.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'或其依赖项之一.一个试图加载程序使用不正确的格式.]
System.Reflection.Assembly._nLoad(的AssemblyName文件名,字符串的代码库,证据assemblySecurity,装配locationHint,StackCrawlMark&stackMark,布尔throwOnFileNotFound,布尔forIntrospection)0
System.Reflection.Assembly .nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint,StackCrawlMark&stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection)+43
System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark&stackMark,Boolean forIntrospection)+127 System. Reflection.Assembly.InternalLoad(字符串assemblyString,证据assemblySecurity,StackCrawlMark&stackMark,布尔forIntrospection)142 System.Reflection.Assembly.Load(字符串assemblyString)28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串的AssemblyName,布尔starDirective)+ 46

[ConfigurationErrorsException:无法加载文件或程序集'System.Data.SQLite,Version = 1.0.61.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139'或其依赖项之一.一个试图加载程序使用不正确的格式.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串的AssemblyName,布尔starDirective)613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()203 System.Web.Configuration .CompilationSection.LoadAssembly(集信息AI)105个
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)178
System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath用configPath,布尔supportLocalization,字符串outputAssemblyName)54
的System.Web .Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean isPrecompiledApp)+232 …

.net sqlite elmah

123
推荐指数
8
解决办法
16万
查看次数

log4net和ELMAH有什么区别?

有些人使用的是ELMAH而不是log4net.是什么让它变得更好?

我在回答Stack Overflow问题时发现了ELMAH 如何登录C#?

.net c# logging log4net elmah

108
推荐指数
4
解决办法
4万
查看次数

发送电子邮件给Elmah?

有人使用Elmah通过电子邮件发送例外吗?我已经通过SQL Server设置了Elmah日志记录,并且可以通过Elmah.axd页面查看错误页面,但我无法使电子邮件组件正常工作.这里的想法是获取电子邮件通知,以便我们可以更快地对异常做出反应.这是我的web.config(省略了不必要的部分),所有敏感数据都被***取代.即使我指定要连接的服务器,SMTP服务是否需要在本地计算机上运行?

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="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>
    <appSettings/>
    <connectionStrings>
        <add name="elmah-sql" connectionString="Data Source=***;Initial Catalog=***;Persist Security Info=True;User ID=***;Password=***" />
    </connectionStrings>

    <elmah>
        <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sql"   >
        </errorLog>
        <errorMail from="test@test.com"
           to="test@test.com"
           subject="Application Exception"
           async="false"
           smtpPort="25"
           smtpServer="***"
           userName="***"
           password="***">
        </errorMail>
    </elmah>

    <system.web>        
        <customErrors mode="RemoteOnly" defaultRedirect="CustomError.aspx">
            <error statusCode="403" redirect="NotAuthorized.aspx" />
            <!--<error statusCode="404" redirect="FileNotFound.htm" />-->
        </customErrors>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, …
Run Code Online (Sandbox Code Playgroud)

.net asp.net elmah

87
推荐指数
3
解决办法
3万
查看次数

Elmah没有使用asp.net网站

我试图在我的asp.net网站上使用elmah,但每当我尝试访问http:// localhost:port/elmah.axd时,我都会找到资源未找到异常.我的web.config如下所示.

    <?xml version="1.0"?>
    <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>
      <elmah>
        <security allowRemoteAccess="0" />
        <errorLog type="Elmah.SqlErrorLog, Elmah" 
                 connectionStringName="elmah-sql" />
        <errorMail
                from="my@account"
                to="myself"
                subject="ERROR From Elmah:"
                async="true"
                smtpPort="587"
                smtpServer="smtp.gmail.com"
                userName="my@account"
                password="mypassword" />
      </elmah>

      <connectionStrings>
        <add name="elmah-sql" connectionString="data source=(sqlserver); 
               database=elmahdb;
             integrated security=false;User ID=user;Password=password"/>
      </connectionStrings>
      <system.web>
        <compilation debug="true">
          <assemblies>
            <add assembly="Elmah, Version=1.0.10617.0, Culture=neutral, 
               PublicKeyToken=null"/>
          </assemblies>
        </compilation>
        <authentication mode="Windows"/>

        <httpHandlers> …
Run Code Online (Sandbox Code Playgroud)

asp.net elmah exception-handling

80
推荐指数
6
解决办法
3万
查看次数

在控制台应用程序中使用ELMAH

我刚开始使用ELMAH并且是粉丝.我的团队支持大量的Web应用程序,我特别兴奋的是ELMAH允许我们将每个应用程序的异常保存到同一个MS SQL数据库表中.

我们还支持一些控制台,DLL和桌面应用程序.是否可以使用ELMAH DLL将这些应用程序中的异常记录到同一位置?

.net elmah desktop-application console-application

65
推荐指数
4
解决办法
3万
查看次数

使用ELMAH的WCF服务的异常日志记录

我们使用优秀的ELMAH来处理ASP.NET 3.5 Web应用程序中的未处理异常.除了使用REST功能使用的WCF服务之外,这对于所有站点都非常有效.当应用程序代码未处理的操作方法中发生异常时,WCF会以各种方式处理它,具体取决于服务协定和配置设置.这意味着该异常不会最终触发ELMAH使用的ASP.NET HttpApplication.Error事件.我知道要处理的两个解决方案是:

  • 在try {} catch中包含所有方法调用(Exception ex){Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 扔; 在catch块中显式调用Elmah.
  • 使用IErrorHandler,如Will Hughes的博客文章中所述,使WCF和ELMAH一起发挥出色,将对ELMAH的调用分解为单独的ErrorHandler.

第一个选项非常简单,但并不完全是DRY.第二个选项仅要求您在实现属性和ErrorHandler后使用自定义属性装饰每个服务.我是根据Will的工作完成的,但我想在发布代码之前验证这是正确的方法.

有没有更好的方法让我错过了?

在MSDN documenation为IErrorHandler说,的HandleError方法是做记录的地方,但ELMAH访问HttpContext.Current.ApplicationInstance,即使HttpContext.Current可用,在此方法中为null.在ProvideFault方法中调用Elmah是一种解决方法,因为ApplicationInstance已设置,但这与API文档中描述的意图不匹配.我在这里错过了什么吗?文档确实声明您不应该依赖于在操作线程上调用的HandleError方法,这可能是ApplicationInstance在此范围内为空的原因.

asp.net wcf logging elmah exception

62
推荐指数
2
解决办法
2万
查看次数

在ASP.NET网站上保护Elmah

我无法确保ELMAH的安全.我跟随了Phil Haacked的教程,唯一的区别是演示项目是一个Web应用程序,我的项目是一个网站.

   <add verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

   <location path="admin">
        <system.web>  
            <authorization>  
                <deny users="?"/>  
            </authorization>  
        </system.web> 
    </location>
Run Code Online (Sandbox Code Playgroud)

使用前导"/"我收到"无法找到资源"的响应,如果我删除前导"/"一切正常,除了可以通过在/admin/elmah.axd前面附加目录名来绕过身份验证.

例如没有前导"/"

www.mysite.com/admin/elmah.axd - 触发身份验证
www.mysite.com/asdasdasd/admin/elmah.axd - 不会触发身份验证并显示ELMAH

如何在保持远程查看日志的同时确保ELMAH安全?

谢谢.

其他人注意:
以下Alan的回答结果如下.

www.mysite.com/admin/elmah.axd - 触发身份验证
www.mysite.com/admin/asdasdasd/elmah.axd - 触发身份验证
www.mysite.com/asdasdasd/admin/elmah.axd - 资源不能是找到.(正是我们想要的)

.net asp.net elmah web-config

59
推荐指数
3
解决办法
1万
查看次数

无法使用Elmah MVC访问生产服务器上的/ elmah?

我安装了elmah.mvc nuget软件包并保留了默认配置,即设置发送电子邮件并将其插入SQL数据库.

在我使用Visual Studio主机的本地计算机上,我可以打开我的应用程序并访问/ elmah罚款以查看错误报告.但是,当我尝试访问/ elmah生产时,我得到两个错误,首先我收到403 access is denied服务器错误.然后在我的电子邮件中(来自elmah)我得到:

System.Web.HttpException: Server cannot set status after HTTP headers have been sent.
Run Code Online (Sandbox Code Playgroud)

任何人都知道这里发生了什么以及如何解决?谢谢.

到目前为止,我尝试了以下答案的建议:

<system.webServer>

<handlers>
  <add name="elmah" verb="GET" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
</handlers>
Run Code Online (Sandbox Code Playgroud)

并在 <system.web>

<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)

我尝试将路径设置为两者elmah.axd并且简单~/elmah.所有仍然给出相同的错误,仍然在本地工作,但不在生产中.

编辑:它实际上也适用于我远程进入服务器并通过浏览器访问它(不使用localhost,但实际的站点地址).那么我没有什么许可?好像它是在服务器级别.

c# asp.net-mvc elmah http-status-code-403

55
推荐指数
1
解决办法
1万
查看次数