标签: elmah

ELMAH和ASP.NET MVC自定义错误未被记录

我正在尝试使用ELMAH进行错误记录,我尝试了其他几个

当启用ASP.NET中的自定义错误功能时,这两种情况似乎都没有记录错误

我在所有控制器中使用[HandleError]属性,起初我认为这是问题,但不只是每当我启用自定义错误页面时它都不记录任何错误,即使这些错误记录库中有一半说他们是假设的.

我究竟做错了什么?

asp.net-mvc elmah

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

Elmah不会记录任何错误消息

好的,我不知道为什么Elmah在Windows Azure上部署时没有记录任何错误.另一件事是以前它曾经工作过.环境是一样的.

  • 在Sql Azure上使用SqlErrorLog
  • Sql Azure与主站点共享相同的数据库.我没有使用单独的数据库,所以我可以使用相同的连接字符串.
  • 建立源代码,我已经排除了VistaDB和SQLite dll.

我检查了我的web.config设置,并在system.webServer下定义了处理程序和模块.它似乎在本地开发(webdev.exe)下记录消息,并且本地sql express模式被导出到sql azure模式(包括存储过程).

唯一的区别是,在主站点上,应用程序在具有多个子域的主域下运行.在本地,这是通过修改主机文件来模拟的.在本地登录,但在部署时不会.

关于我应该怎么做以找出错误的任何想法?最后一个选项是使用诊断程序来跟踪/找出部署时出现的问题,但这是一个皮塔饼.

elmah azure azure-sql-database

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

查询ELMAH的XML字段

库存的ELMAH_Error表使用nText字段来存储错误条目。我发现通过添加XML类型的字段来实现。然后将此新字段添加到填充该字段的SPROC的INSERT语句中;我可以更好地利用ELMAH的输出。

现在,我想学习如何查询该XML字段中的特定元素值。该文档的结构为:

<error [...]>
  <serverVariables>
    <item name="ALL_HTTP">
      <value string="..." />
    </item>
    <item name="ALL_RAW">
      <value string="..." />
    </item>
    .
    .
    .
  </serverVariables>
</error>
Run Code Online (Sandbox Code Playgroud)

我需要能够查询下方特定项目的值。

因此,我正在看15seconds.com文章中的示例:

SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
Run Code Online (Sandbox Code Playgroud)

并尝试将这些值映射到我的字段的结构-但不能。例如

select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)') 
Run Code Online (Sandbox Code Playgroud)

格式化REMOTE_HOST的位置:

<item name="REMOTE_HOST">
  <value string="55.55.55.55" />
</item>
Run Code Online (Sandbox Code Playgroud)

非常感激

sql-server xpath elmah sqlxml

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

ELMAH适用于本地机器,但不适用于生产

设置简单,我使用ELMAH记录异常并向我发送电子邮件.在我的本地机器上一切正常,但是当我在生产服务器上进行更改时,错误不会被记录,我也没有收到电子邮件.

这是我本地机器上的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="MyDB" />
        <errorMail from="errors@mysite.com" to="myemail@mysite.com"
            subject="Error" smtpServer="localhost" smtpPort="25" 
            userName="user@mysite.com" password="mypassword" />
    </elmah>

    <connectionStrings>
        <add name="MyDB" connectionString="Data Source=.\SQLEXPRESS
            AttachDbFilename=|DataDirectory|\MyDB.mdf;
            Integrated Security=True;User Instance=True;
            MultipleActiveResultSets=True"
            providerName="System.Data.SqlClient" />
        <!--<add name="MyDB" connectionString="Server=mysite.com;
            Database=MyDB;User ID=user;Password=mypassword;
            Trusted_Connection=True;Integrated Security=False;
            MultipleActiveResultSets=True"
            providerName="System.Data.SqlClient" />-->
    </connectionStrings>

    <system.web>  
        <!--<httpHandlers>
            <add verb="POST,GET,HEAD" …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc elmah asp.net-mvc-3

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

在捕获MVC 3中正确的JSON格式的错误时,如何使用ELMAH记录错误

我有一个ASP.NET MVC 3应用程序,我正在进行AJAX调用并期待返回JSON结果.我正在使用ELMAH来记录错误.在测试时我遇到了意外错误.ELMAH记录了错误,但我的客户端脚本没有记录,因为现在结果不是正确的JSON.如果我处理控制器中的所有错误以返回正确的JSON结果,则ELMAH不会记录错误.我知道我可以专门调用ELMAH来记录错误,但我更喜欢我不必在其他任何地方这样做.

任何人都可以澄清处理这种情况的"正确"方法吗?

例如

    try
{
                //service.dosomethingwitherror();
    return new JsonResult { Data = new { result = true, message = "Success." } };
}
catch (Exception ex)
{
    return new JsonResult { Data = new { result = true, message = "Failed." } };
}
Run Code Online (Sandbox Code Playgroud)

因为我'处理'这个,所以ELMAH不会记录.如果我不处理这个,我的客户端将无法获得JSON ...

json elmah asp.net-mvc-3

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

Elmah MySql Nuget包问题'无法加载文件或程序集'

我正在尝试将Elmah添加到我的MVC3项目中.通过Nuget安装后,当我尝试访问elmah(via localhost:port/elmah.axd)时,出现包含以下内容的错误:

Could not load file or assembly 'MySql.Data, Version=6.1.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

我删除了mysql.data dll并添加了我自己的副本(版本6.4.4.0 - 文档说你可以覆盖新版本提供的dll),但是这个错误仍然存​​在.有人遇到过这种情况么?

c# mysql elmah nuget

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

澄清在ASP.NET MVC中使用ELAMH

我目前正在使用mvc4和vs2012,我已经安装了mvc.elmah nugget.

我做了什么 ?

最初我没有写任何代码,我的异常记录在ELMAH中.

后来我决定使用MVC HandleError来处理Application Exceptions并添加过滤器

  filters.Add(new HandleErrorAttribute());
Run Code Online (Sandbox Code Playgroud)

现在我在过滤器中调试,看到我有2个过滤器 ELMAH HandleErrorAttribute and MVC HandleErrorAttribute !

我看到了这个优秀的链接/sf/answers/415580721/,其中讨论了如何使用ErrorSignal来处理应用程序异常

但是我没有使用,ErrorSignal但我的例外情况仍被ELMAH捕获?

如果我使用

if (context.ExceptionHandled)
            ErrorSignal.FromCurrentContext().Raise(context.Exception);
Run Code Online (Sandbox Code Playgroud)

我的例外记录两次.

我的问题如下

  • 我需要使用2个过滤器(ELMAH和MVC)吗?
  • 如果ELMAH已经有HandleErrorAttribute并记录异常.我需要添加MVC HandleErrorAttribute吗?

目前正在做什么

添加过滤器

filters.Add(new HandleErrorAttribute());
Run Code Online (Sandbox Code Playgroud)

和覆盖(将来处理Ajax错误)

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
    {
        public override void OnException(ExceptionContext context)
        {
 base.OnException(context);
}
Run Code Online (Sandbox Code Playgroud)

这是足够的还是什么是好的做法?我没有提高ErrorSignal,因为它记录了两次.

我没有使用任何try.catch正在使用下面的行,并希望我的例外处理.

base.OnException(context);
Run Code Online (Sandbox Code Playgroud)

}

只是想确保我正确的方式!

谢谢你的时间

asp.net-mvc elmah

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

MVC 4应用程序中的ELMAH,在Global.asax中不起作用

我有一个MVC 4 Web应用程序。使用ELMAH和Elmah.Contrib.WebApi,可以完美记录我的控制器或API控制器(或其底层服务)中发生的任何异常。

我遇到麻烦的地方是手动记录错误。具体来说,在Global.asax中,我有很多初始化代码(设置自动映射器等)。为了捕获初始化代码中可能发生的问题,我具有以下内容:

 protected void Application_Start()
    {
        try
        {
            ControllerBuilder.Current.SetControllerFactory(new ErrorHandlingControllerFactory());
            GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
            GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());

            AutoMapperConfiguration.Configure();
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

            DatabaseConfig.Initialize();
            SecurityConfig.Initialize();
        }
        catch (Exception e)
        {
            var context = HttpContext.Current;
            var signal = ErrorSignal.FromContext(context);
            if (signal != null)
            {
                signal.Raise(e, context);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

ELMAH永远不会记录在“ catch”块内捕获的任何异常。但是,我知道ELMAH正在工作,因为从此以后,任何控制器内部都会记录任何其他异常。因此,我排除了web.config之类的问题。

有什么建议么?谢谢。

error-handling elmah global-asax asp.net-mvc-4

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

WebAPI 2.2上的Elmah.axd - 未找到HTTP资源

我正试图在我的broswer中访问/elmah.axd,但它返回:

{"message":"No HTTP resource was found that matches the request URI 'http://services.domain.com/elmah.axd'."}
Run Code Online (Sandbox Code Playgroud)

服务器是本地的(127.0.0.1),即使在那,我有我的web.config Elmah设置以这种方式保护它:

<elmah>
    <security allowRemoteAccess="true" />
</elmah>
Run Code Online (Sandbox Code Playgroud)

我的WebApiConfig看起来像:

public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Locally only you will be able to see the exception errors
            config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.LocalOnly;

            // Web API routes
            config.Routes.IgnoreRoute("elmah", "elmah.axd");
            config.Routes.IgnoreRoute("allemah", "elmah.axd/{*pathInfo}");
            config.Routes.IgnoreRoute("elmahgeneric", "{resource}.axd/{*everything}");
            config.MapHttpAttributeRoutes();

            var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
            jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

            // Remove the XML formatter
            config.Formatters.Remove(config.Formatters.XmlFormatter);

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "{controller}/{id}",
                defaults: new { …
Run Code Online (Sandbox Code Playgroud)

elmah asp.net-web-api asp.net-web-api-routing asp.net-web-api2

3
推荐指数
2
解决办法
1747
查看次数

Elmah 不过滤/拦截 web api 上的错误

我有一个配置了 Elmah 并正常工作的 Web Api 应用程序,日志正常创建。

为了从日志中隐藏/删除敏感数据,我尝试了这个,但它不适用于我的 Web Api 控制器。仅当 MVC 管道(项目中有 MVC 和 Web API 控制器)中发生错误时才会触发过滤器。

我也检查了这个问题,但我的配置文件似乎没问题:

    <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>

    [...]

   <location path="." inheritInChildApplications="false">
      <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>
          [..]
      </system.web>
   </location>

   [...]

   <system.webServer>
       <modules runAllManagedModulesForAllRequests="true">
           <add name="ErrorLog" …
Run Code Online (Sandbox Code Playgroud)

c# elmah asp.net-web-api

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