我正在尝试使用ELMAH进行错误记录,我尝试了其他几个
当启用ASP.NET中的自定义错误功能时,这两种情况似乎都没有记录错误
我在所有控制器中使用[HandleError]属性,起初我认为这是问题,但不只是每当我启用自定义错误页面时它都不记录任何错误,即使这些错误记录库中有一半说他们是假设的.
我究竟做错了什么?
好的,我不知道为什么Elmah在Windows Azure上部署时没有记录任何错误.另一件事是以前它曾经工作过.环境是一样的.
我检查了我的web.config设置,并在system.webServer下定义了处理程序和模块.它似乎在本地开发(webdev.exe)下记录消息,并且本地sql express模式被导出到sql azure模式(包括存储过程).
唯一的区别是,在主站点上,应用程序在具有多个子域的主域下运行.在本地,这是通过修改主机文件来模拟的.在本地登录,但在部署时不会.
关于我应该怎么做以找出错误的任何想法?最后一个选项是使用诊断程序来跟踪/找出部署时出现的问题,但这是一个皮塔饼.
库存的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)
非常感激
设置简单,我使用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) 我有一个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 ...
我正在尝试将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),但是这个错误仍然存在.有人遇到过这种情况么?
我目前正在使用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)
我的例外记录两次.
我的问题如下
目前正在做什么
添加过滤器
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)
}
只是想确保我正确的方式!
谢谢你的时间
我有一个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之类的问题。
有什么建议么?谢谢。
我正试图在我的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
我有一个配置了 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) elmah ×10
asp.net-mvc ×3
c# ×3
asp.net ×1
azure ×1
global-asax ×1
json ×1
mysql ×1
nuget ×1
sql-server ×1
sqlxml ×1
xpath ×1