이 문서는 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)도 추가 구성 가능합니다.