4

I've been using ELMAH on my development machine and it works fine. I also deployed it on Win2008 IIS7 and run the LOCALHOST website with force exception and it logs.. However, when i try browsing the website on other machine (using other machine from the network to browse the website) ELMAH is not logging.. I've check the App_Data for xml and none created. I already give Network service persmission on the folders.

So, the problem is when browsing the website in localhost ELMAH logs, when browsing it on other machine it didn't logs.

Below is my web.config file..

<configuration>
<configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            </sectionGroup>
        </sectionGroup>
    </sectionGroup>
    <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>

------------------------------- cut other non related

<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, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="POST,GET,HEAD" name="Elmah" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="ScriptModule"/>
        <remove name="UrlRoutingModule"/>
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </modules>
    <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <remove name="ScriptHandlerFactory"/>
        <remove name="ScriptHandlerFactoryAppServices"/>
        <remove name="ScriptResource"/>
        <remove name="MvcHttpHandler"/>
        <remove name="UrlRoutingHandler"/>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" preCondition="integratedMode" type="Elmah.ErrorLogPageFactory, Elmah" />
    </handlers>
</system.webServer>
ahsteele
  • 26,243
  • 28
  • 134
  • 248
Petrick Lim
  • 91
  • 1
  • 7

1 Answers1

11

When I've had issues with ELMAH in production in the past, it's typically been one of two things:

1) The directory I want to drop the log files in has not been created 2) The ASP.NET worker process does not have write permission to the drop directory

You haven't posted the actual config section here, but I take it from your question that you're doing something like this:

<elmah> 
   <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" /> 
</elmah> 

If you're using App_Data, I assume that folder already exists in your deployment directory. If not, you'll need to add it. If it's there, try giving the ASPNET account write privs on that directory, if you haven't already.

Brandon Satrom
  • 1,801
  • 14
  • 17
  • 1
    Yes, i already have that in my config and which is why Elmah is logging correctly on localhost. When i say localhost i mean not in development machine but in production, elmah is logging exceptions in production when i tried to browse the website as locahost in the server's browser. But the weird thing is, it's not logging when I try to browse the website url on other machine's browser. In short, i already hosted the project on the server then i browse the url on client machine and friendly error displays but elmah didnt log. But in the server when i browse locahost elmah logs it. – Petrick Lim Jul 07 '10 at 15:52
  • btw, i'll try the ASPNET account. bec. i only give privs to Network Service and see if things works out. thanks. – Petrick Lim Jul 07 '10 at 15:53
  • Sounds like it might be ASPNET if elmah logs when you browse while logged into the production box, but not when external requests come into the box. Let me know if that works or not. – Brandon Satrom Jul 07 '10 at 16:30
  • 1
    Hi Brandon, i think i figured it out what causing elmah not to log. It might be the [HandleError] attribute in asp.net mvc that is causing to handle the error firsthand. thus, elmah didn't catch anything. check out the answer from Atif Aziz himself http://stackoverflow.com/questions/766610/how-to-get-elmah-to-work-with-asp-net-mvc-handleerror-attribute/779961#779961 – Petrick Lim Jul 07 '10 at 17:15
  • Hmm, but wouldn't that be consistent in both dev and production? Let me know if that fixes it, I'd be interested in knowing. – Brandon Satrom Jul 07 '10 at 20:47
  • Yes, thats what i think also that it should be consistent. But if you dig deeper and try to set customError to "remoteOnly" in the web.config which redirects you to your custom error page. Somehow the handleerror handles it and elmah is clueless. while if you turned customError to "off" then handleError doesn't catch it and elmah is signaled, then you get also the unfriendly error message. You can verify it by reading Atif Aziz example. – Petrick Lim Jul 08 '10 at 07:08
  • Hi Brandon, it's working now. To simulate the problem decorate all the controllers with [HandleError] and set the customError="On". With this setup, elmah will not log. The fix is i created a new attribute "ElmahHandleError" from the code of Atif Aziz. Works fine now. Thank you for your interest Brandon. – Petrick Lim Jul 08 '10 at 08:33
  • Not to revive an old answer, but, folder permissions was the issue for me. I use impersonation for my applications and the service account didn't have write permission to my specified folder. – Justin Helgerson Jul 05 '12 at 13:57