ELMAH не входит в ASP.NET MVC 2 - PullRequest
4 голосов
/ 14 января 2011

Я не могу понять, что я делаю здесь неправильно, пытаясь использовать ELMAH в своем приложении MVC 2, и он никогда ничего не регистрирует.

Вот что у меня есть в моем web.config (соответствующие части)

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

<elmah>
  <security allowRemoteAccess="0" />
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ELMAH.SqlServer" />
  <!-- 
  <errorMail from="youremail@example.com" to="youremail@example.com" cc="" subject="Elmah Error" async="true" smtpPort="25" smtpServer="[EmailServerName]" userName="" password="" />
  <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
  -->
</elmah>


<connectionStrings>
  ...
  <add
      name="ELMAH.SqlServer"
      connectionString="data source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ELMAH_Logging.mdf;Integrated Security=SSPI;Connect Timeout=30;User Instance=True;"
      providerName="System.Data.SqlClient"/>
</connectionStrings>  

<system.Web>
   <httpHandlers>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      ...
    </httpHandlers>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      ...
    </httpModules>
</system.Web>



<system.webServer>
   <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
    </modules>
    <handlers>
      <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
      ...
    </handlers>
</system.webServer>

Затем, используя код из DotNetDarren.com , но независимо от того, что я делаю, исключения никогда не регистрируются?

Ответы [ 3 ]

5 голосов
/ 20 января 2011

Elmah завершается с ошибкой, если не может регистрировать ошибки ... Перепроверьте все строки подключения, используемые elmah, и вы можете увидеть там проблемы.

Вот табличный скрипт, используемый для создания таблицы БД

CREATE TABLE [dbo].[ELMAH_Error](
    [ErrorId] [uniqueidentifier] NOT NULL,
    [Application] [nvarchar](60) NOT NULL,
    [Host] [nvarchar](50) NOT NULL,
    [Type] [nvarchar](100) NOT NULL,
    [Source] [nvarchar](60) NOT NULL,
    [Message] [nvarchar](500) NOT NULL,
    [User] [nvarchar](50) NOT NULL,
    [StatusCode] [int] NOT NULL,
    [TimeUtc] [datetime] NOT NULL,
    [Sequence] [int] IDENTITY(1,1) NOT NULL,
    [AllXml] [varchar](max) NOT NULL,
 CONSTRAINT [PK_ELMAH_Error] PRIMARY KEY NONCLUSTERED 
(
    [ErrorId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[ELMAH_Error] ADD  CONSTRAINT [DF_ELMAH_Error_ErrorId]  DEFAULT (newid()) FOR [ErrorId]
0 голосов
/ 19 января 2011

Мне придется повторить предварительное условие Пола, но у меня также есть preCondition="managedHandler" в разделе модулей для каждой записи.

Я также использую allowRemoteAccess="1" в группе безопасности elmah, но я заблокировал путь, чтобытолько аутентифицированные пользователи уровня администратора могут получить доступ к странице через вызов контроллера.

Я заметил, что запись в журнале ошибок XML закомментирована.Работает ли это вообще через режим XML по сравнению с SQL?Я знаю, что когда я только начинал, мне приходилось работать в режиме XML, пока я не рассмотрел проблемы со строкой подключения и схемой базы данных, которые у меня были.

Вы также можете столкнуться с проблемами полного / среднего доверия в зависимости от развертывания, но ядумаю, что вы получаете исключения от Elmah в таких ситуациях.Вы пробовали смотреть журнал событий на машине?Это также помогло мне справиться с растущими болями, которые я настраивал.

Наконец, я только что заметил это в журнале изменений 14 января: http://code.google.com/p/elmah/source/detail?r=782, указывающий на ELMAH - Фильтрация 404Ошибки , которые просто говорят о том, что модуль ErrorFilter должен быть зарегистрирован последним, чтобы фильтрация работала должным образом.Вы не вставляли параметры конфигурации фильтра, поэтому я сомневаюсь, что это применимо, но порядок регистрации вещей имеет значение, очевидно, поэтому, возможно, есть какое-то отношение.

0 голосов
/ 18 января 2011

Я не уверен, поможет ли это вам, но я столкнулся с той же проблемой, с моей первой попыткой включить ELMAH в мой сайт. Во-первых, я даже не мог видеть экран ошибок, во-вторых, как только я сортировал, что об ошибках не сообщалось. Обе они были вызваны отсутствующими разделами system.WebServer . Я использую сайт MVC3.0 (недавно преобразованный из 2.0). Единственное различие, которое я действительно вижу между моим конфигом и вашим, состоит в том, что у вас нет preCondition = "integratedMode" в разделе обработчиков system.WebServer (см. Ниже). Может быть, это вызывает у вас проблемы?

<handlers>
   <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>

EDIT

Извините, что моя оригинальная идея не помогла - еще пара мыслей:

  1. Какую версию ELMAH вы скачали (x86 или x64?) И для какой версии CPU вы собираете? Вы пытались установить свой процессор сборки для той же самой версии, которую вы скачали.
  2. Есть ли у вас какая-либо обработка OnError внутри вашего global.asax, если так, что произойдет, если вы удалите это?
  3. Наконец, вы пытались создать пустой проект MVC, в котором не было ничего, кроме ELMAH, только для того, чтобы убедиться, что вы можете заставить его правильно регистрироваться.
...