ASP.NET MVC에서 Log4Net을 통한 로그 기록

이 문서는 ASP.NET MVC 환경에서 log4net 라이브러리를 사용해 애플리케이션 로그를 파일로 기록하는 방법을 설명합니다. 로깅은 시스템 오류 추적, 디버깅 및 운영 모니터링에 필수적인 요소이며, log4net은 .NET 플랫폼에서 가장 널리 사용되는 로깅 프레임워크 중 하나입니다.

1단계: Log4Net 라이브러리 다운로드 및 참조 추가

Apache 공식 사이트(https://logging.apache.org/log4net/download_log4net.cgi)에서 최신 버전의 log4net 바이너리 패키지를 다운로드합니다. 압축을 해제한 후, 프로젝트가 사용하는 .NET Framework 버전에 맞는 log4net.dll 파일을 선택하여 프로젝트 폴더에 복사합니다.

Visual Studio에서 해당 프로젝트를 열고 솔루션 탐색기에서 [참조] 항목을 우클릭 → [참조 추가] → [찾아보기]를 통해 방금 복사한 log4net.dll을 등록합니다.

2단계: 구성 파일 설정 (Web.config 또는 App.config)

MVC 프로젝트에서는 일반적으로 Web.config 파일에 설정을 포함시킵니다. 다음 내용을 구성 파일 내부에 추가하세요:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\\" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <datePattern value="yyyyMMdd'.log'" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>

여기서 주요 설정 항목은 다음과 같습니다:

  • file: 로그 파일 저장 경로 (실제 디렉터리는 애플리케이션 실행 시 자동 생성됨)
  • rollingStyle: 회전 정책 (날짜 + 크기 기반)
  • datePattern: 일별 로그 파일명 형식
  • conversionPattern: 출력 포맷 (%d: 날짜, %p: 우선순위, %m: 메시지 등)

3단계: 글로벌 어셈블리 레벨 설정 및 초기화

로그 설정이 자동으로 로드되도록 하려면 어셈블리 수준에서 XmlConfigurator를 지정해야 합니다. 이를 위해 AssemblyInfo.cs 파일(또는 독립된 구성 클래스)에 다음 코드를 추가합니다:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]

Watch = true는 구성 파일 변경 시 재로드되도록 보장합니다.

4단계: 로그 유틸리티 클래스 작성

모든 컨트롤러나 서비스에서 쉽게 로그를 기록할 수 있도록 헬퍼 클래스를 만듭니다:

using System;
using log4net;

namespace MyMvcApplication.Utilities
{
    public static class Logger
    {
        private static readonly ILog _log = LogManager.GetLogger(typeof(Logger));

        public static void Info(string message)
        {
            if (_log.IsInfoEnabled)
                _log.Info(message);
        }

        public static void Warn(string message)
        {
            if (_log.IsWarnEnabled)
                _log.Warn(message);
        }

        public static void Error(string message, Exception ex = null)
        {
            if (_log.IsErrorEnabled)
                _log.Error(message, ex);
        }

        public static void Debug(string message)
        {
            if (_log.IsDebugEnabled)
                _log.Debug(message);
        }
    }
}

5단계: MVC 컨트롤러에서 로그 사용 예시

예를 들어, HomeController에서 특정 동작에 대해 정보 및 오류 로그를 기록할 수 있습니다:

using System.Web.Mvc;
using MyMvcApplication.Utilities;

namespace MyMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Logger.Info("홈 페이지 접근 - 사용자: " + User.Identity.Name);

            try
            {
                // 어떤 비즈니스 로직 수행
            }
            catch (Exception ex)
            {
                Logger.Error("인덱스 처리 중 예외 발생", ex);
            }

            return View();
        }
    }
}

6단계: 결과 확인

애플리케이션을 실행하고 동작을 유도하면, 프로젝트 루트 폴더에 Logs 디렉터리가 생성되고, 그 안에 날짜 기반의 로그 파일(20250405.log 등)이 생성됩니다. 파일 내용은 아래와 유사하게 출력됩니다:

2025-04-05 14:23:10,123 [7] INFO  MyMvcApplication.Utilities.Logger - 홈 페이지 접근 - 사용자: admin
2025-04-05 14:23:11,456 [7] ERROR MyMvcApplication.Utilities.Logger - 인덱스 처리 중 예외 발생
System.NullReferenceException: 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.
   위치: Controllers.HomeController.Index()...

문제 해결 팁

  • 네임스페이스 인식 오류: 참조는 추가했으나 log4net가 인식되지 않는 경우, 프로젝트 대상 프레임워크를 .NET Framework 4 이상(Client Profile 아님)으로 변경하세요.
  • 로그 파일 미생성: Logs 폴더에 대한 쓰기 권한이 있는지 확인하고, IIS 응용 프로그램 풀 식별자가 적절한 권한을 가지도록 설정하세요.
  • 설정 미반영: XmlConfigurator가 어셈블리에 올바르게 적용되었는지 확인하세요.

이제 ASP.NET MVC 애플리케이션에서 안정적으로 로그를 기록할 수 있는 구조가 완성되었습니다. 필요에 따라 데이터베이스, 이메일, 콘솔 등 다른 출력 대상(appender)도 추가 구성 가능합니다.

태그: log4net ASP.NET MVC C# 로깅 Web.config

7월 17일 04:58에 게시됨