ASP.NET MVC5에서 예외를 문자화합니다.

8305 단어 ASP.NET_MVCC#

하고 싶은 일.


Controller 이외의 예외
Global.asax.cs의 ApplicationError 이벤트에 집중
잘못된 내용을 NLog으로 출력하려면(엄밀히 말하면 Server.GetLastError()의 메시지)

시도해 본 일


웹은 소스 파일의 인코딩 및 요청, 응답, 응답 헤드를 UTF-8로 취급합니다.config에 다음 설명을 추가합니다

<configuration>
  <system.web>
    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" responseHeaderEncoding="utf-8" />
  </system.web>
・・・
NLog 출력의 파일 인코딩도 UTF-8로 변경됨
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="errorlog"
     xsi:type="File"
     layout="${longdate} [${threadid:padding=8}] [${uppercase:${level:padding=-5}}] ${callsite}() ${message} ${exception:format=tostring}"
     fileName="${basedir}/APP_Data/nlog/ErrorLog.txt" 
     archiveFileName="${basedir}/App_Data/nlog/ErrorLog.{#####}.txt"
     maxArchiveFiles="100"
     archiveAboveSize="102400" 
     archiveNumbering="Sequence"
     archiveEvery="Day"
     concurrentWrites="true"
     keepFileOpen="false"
     encoding="UTF-8" />
  </targets>
  <rules>
    <logger name="ExceptionHandler" minlevel="Debug" writeTo="errorlog" />
  </rules>
</nlog>
나는 이렇게 하면 될 수 있다고 생각한다.asax.cs로 다음 처리를 만들어서 로그를 토해냈습니다
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using NLog;

namespace Hoge
{
    public class MvcApplication : System.Web.HttpApplication
    {
        private static Logger logger = NLog.LogManager.GetLogger("ExceptionHandler");
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
        protected void Application_Error(object sender, EventArgs e)
        {
            if (Server != null)
            {
                var ex = Server.GetLastError();
                logger.Fatal(ex);
            }
        }
    }
}

결실

2018-11-20 18:49:37.6676 [       6] [FATAL] Hoge.MvcApplication.Application_Error() System.Web.HttpException (0x80004005): !baRrz!A public action method 'Fuga' was not found on controller 'Hoge.Controllers.HogeController'. 表©鷗字㌍ 表!
   場所 System.Web.Mvc.Controller.HandleUnknownAction(String actionName)
   場所 System.Web.Mvc.Controller.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState)
(以下スタックトレース)
네.잘못된 내용이 바뀌었어!

이거 정말 곤란하다


한 마디로, 문자화된 텍스트를 간단하게 복사해 보고 Google 선생님께 물어봤습니다.
Qita 관련 기사 찾았다!
프로그램 라이브러리 문제인 것 같습니다.

실제로 확인해 볼게요.



설명이 틀렸습니다.
설명문의 잘못된 정황을 보면 버전 중 3.2.4와 3.2.5는 NG였다.
3.2.6 정상으로 보인다.
Microsoft.AspNet.Mvc.ja를 지금까지 업데이트한 최신 안정판(3.2.6)
Razor.ja 및 Webpagesja도 무단으로 업데이트됐어요.

결실

2018-11-20 18:55:40.0646 [       8] [FATAL] Hoge.MvcApplication.Application_Error() System.Web.HttpException (0x80004005): コントローラー 'Hoge.Controllers.HogeController' にパブリック アクション メソッド 'Fuga' が見つかりませんでした。
   場所 System.Web.Mvc.Controller.HandleUnknownAction(String actionName)
   場所 System.Web.Mvc.Controller.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState)
이렇게 해서 로그를 어지럽히지 않고 출력했기 때문에 순조롭게 해결되었다.

좋은 웹페이지 즐겨찾기