2016-07-29 4 views
-1

저는 Elmah의 세계에서 새로 왔으며 로그를 보려면 (web.api 프로젝트에서) 작동하지만 작동하지 않습니다. 나는이 내가 구성을 일부 구성 :(여기
를 실종 것 같아 :Elmah와 log4net이 기록되지 않습니다.

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

의 Web.config에게

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    <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> 

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

<elmah> 
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~\App_Data\" /> 
    <security allowRemoteAccess="1" /> 
</elmah> 

<log4net> 
    <logger name="PROJECT"> 
    <level value="ALL" /> 
    <appender-ref ref="elmahappender" /> 
    </logger> 
    <!--ELMAH Appender--> 
    <appender name="elmahappender" type="elmahappender_log4net.ELMAHAppender, elmahappender_log4net"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [thread] %-5level %logger - %message%newline" /> 
    </layout> 
    <UseNullContext>False</UseNullContext> 
    </appender> 
</log4net> 

<system.webServer> 
    <handlers> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <remove name="OPTIONSVerbHandler" /> 
    <remove name="TRACEVerbHandler" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />  
    <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />  
    </handlers> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <remove name="FormsAuthentication" /> 
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/> 
    </modules>  
    <validation validateIntegratedModeConfiguration="false" /> 
</system.webServer> 

사람이 내가 부족 무엇인지 말해 줄 수

주? : (FileAppender)와 같은 다른 appender를 사용하면 작동합니다!

감사합니다.

+0

첫 번째 단계는 log4net 디버그 로깅을 활성화하고 오류를 찾아야합니다. 이 [10 년 전의 블로그 게시물] (http://haacked.com/archive/2006/09/27/Log4Net_Troubleshooting.aspx/)이 도움이 될 것입니다. – stuartd

+0

안녕 스튜어트, 귀하의 답변을 주셔서 감사합니다하지만 내 문제는 그것이 아닙니다. Log4net은 appender로 FileAppender를 사용할 때 잘 작동하지만 ELMAH를 사용할 때 작동하지 않아 일부 구성이 누락되었다고 생각합니다. 다른 아이디어가 있으면 환영합니다. – Lau

+0

Log4net은 제대로 구성된 애펜더를 사용하고 그렇지 않은 애플릿은 무시하지만 ** 로깅을 디버그하기 위해 ** 어떤 ** 구성이 잘못된지에 대한 세부 정보를 출력합니다. – stuartd

답변

0

많은 문제와 게시물을 읽은 후에 마침내 문제를 해결했습니다. ActionFilterAttribute를 생성 한 후 모든 예외가 ELMAH에 기록됩니다. 누군가가 필요로 할 경우를 대비하여 여기에 제 코드가 있습니다.

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Filters.Add(new ElmahLogger()); 
    } 
} 

이 그것을 즐기

public class ElmahLogger : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
     { 
     if ((actionExecutedContext.Response != null) && !actionExecutedContext.Response.IsSuccessStatusCode) 
     { 
      try 
      { 
       var messages = (System.Web.Http.HttpError)((System.Net.Http.ObjectContent<System.Web.Http.HttpError>)actionExecutedContext.Response.Content).Value; 
       StringBuilder stringBuilder = new StringBuilder(); 
       foreach (var keyValuePair in messages) 
        stringBuilder.AppendLine(keyValuePair.Value.ToString()); 

       Elmah.ErrorSignal.FromCurrentContext().Raise(new HttpException((int)actionExecutedContext.Response.StatusCode, stringBuilder.ToString())); 
      } 
      catch (Exception ex) 
       Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("Error in ElmahLoggerFilter - OnActionExecuted: " + ex.ToString())); 
     } 
    } 
} 

그리고 물론

, 당신은 WebApiConfig.cs

에 필터를 등록해야합니다! :)

+0

직접 코드를 작성하면 안됩니다. ELMAH가 웹 API를 처리하기위한 [contrib] (https://www.nuget.org/packages/Elmah.Contrib.WebApi/) 프로젝트가 있습니다. [elmah.io] (https : // elmah.)를 사용하여 설치하고 구성하는 방법에 대한 게시물 (http://docs.elmah.io/logging-to-elmah-io-from-web-api/)을 작성했습니다. io /)가 있지만 XML 로거와 절차는 동일합니다. elmah.io 패키지를 설치하지 말고 elmah.corelibrary 만 설치하고 한 줄짜리를 사용하여 구성하십시오 :) – ThomasArdal

+0

게시물에 @ThomasArdal 감사합니다! – Lau

관련 문제