소개와 설치

소개

  1. 정의
    Log4net = Log for .NET이며 Apache Log4j(Java 고전 로깅 프레임워크)의 .NET 플랫폼 공식 포팅 버전으로, 안정적인 오픈소스 로깅 라이브러리입니다.
  2. 주요 기능
    프로젝트에 적용하면 파일 읽고 쓰는 로직을 직접 구현하지 않아도 빠르게 애플리케이션 로그를 출력할 수 있습니다. 런타임 정보와 예외 스택 트레이스를 기록해 디버깅 및 운영 환경 문제를 진단하는 데 활용합니다.
  3. 용어 비교
  • Log4j:Java 생태계의 오래된 로그 컴포넌트
  • Log4net:C#/.NET에 맞춰 포팅된 Log4j

설치

최신 .NET 프로젝트는 NuGet 설치를 권장합니다:

dotnet add package log4net

Visual Studio의「NuGet 패키지 관리」에서 log4net을 검색해 한 번 클릭으로 설치할 수도 있습니다.

초기 log4net은 dll 파일을 직접 다운로드해 참조했지만 현재는 NuGet이 주 방식입니다.

Log4Net 환경 구성

log4net은 콘솔, 데스크톱, 웹 프로그램 등 모든 종류의 프로젝트에서 사용 가능합니다.

사용 절차

1단계: Web.config 수정 후 log4net 설정 추가
<?xml version="1.0"?>
<configuration>
  <configSections>
    <!-- log4net 설정 노드 등록 -->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <!-- 날짜 기준 롤링 파일 어펜더 -->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!-- 로그 저장 경로, 상대 경로 권장, USB 등 절대 경로 하드코딩 금지 -->
      <param name="File" value="logs\\"/>
      <!-- 추가 모드:true=로그 계속 추가, false=프로그램 시작 시 파일 초기화 -->
      <param name="AppendToFile" value="true"/>
      <!-- 보관할 최대 로그 파일 개수 -->
      <param name="MaxSizeRollBackups" value="10"/>
      <!-- 고정 파일 이름 사용 여부 false=날짜별로 다른 파일 생성 -->
      <param name="StaticLogFileName" value="false"/>
      <!-- 파일 이름 패턴 -->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;"/>
      <!-- 롤링 전략:Date=날짜 기준 로그 분할 -->
      <param name="RollingStyle" value="Date"/>

      <!-- 로그 출력 형식 템플릿 -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
        <!-- ❗원본 스크린샷 템플릿에 불필요한 %loggername이 있어 로그 끝에 잡음 문자가 발생하므로 제거했습니다 -->
      </layout>
    </appender>

    <!-- 루트 로거 설정, 전역 적용 -->
    <root>
      <!-- 로그 레벨 all:모든 레벨 출력;옵션:DEBUG/INFO/WARN/ERROR/FATAL/OFF -->
      <level value="all"/>
      <!-- 위에서 정의한 어펜더 연결 -->
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
  </log4net>
</configuration>Code language: HTML, XML (xml)
  1. G:\xxx 같은 절대 경로를 하드코딩하지 마세요. 서버 배포 시 작동하지 않습니다. 상대 경로 logs\\를 사용하세요;
  2. 운영 환경에서는 levelINFO 혹은 ERROR로 변경해 과도한 DEBUG 로그로 디스크 공간이 낭비되지 않도록 하세요.
2단계: Log4Net 전역 초기화

프로젝트 Global.asaxApplication_Start 메서드에 초기화 코드를 추가하여 프로그램 시작 시 설정을 불러옵니다

protected void Application_Start(object sender, EventArgs e)
{
    // log4net 초기화, Web.config 설정 읽어오기
    log4net.Config.XmlConfigurator.Configure();
}Code language: JavaScript (javascript)

주의: 이 코드 한 줄이 빠지면 로그 호출해도 파일이 전혀 생성되지 않습니다. 자주 실수하는 포인트입니다.

3단계: 페이지에서 Logger 가져오고 로그 출력

Default.aspx.cs에 호출 코드를 작성합니다. 어느 곳에서나 호출 가능하며 예시는 한 페이지만 보여줍니다.

using log4net;

public partial class _Default : System.Web.UI.Page
{
    // 로거 인스턴스 가져오기, 문자열은 로거 이름으로 자유롭게 지정 가능
    public static readonly ILog log = LogManager.GetLogger("logger-name");

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Info("일반 로그");
        log.Error("오류 로그");
        // 기타 사용 가능 레벨
        // log.Debug("디버그 로그");
        // log.Warn("경고 로그");
        // log.Fatal("치명적 오류 로그");
    }
}

권장 사항:ILogstatic readonly로 선언해 인스턴스를 반복 생성하지 않도록 해 성능을 최적화하세요.

실행 결과 설명

  1. 프로그램 실행 후 웹 사이트 루트에 logs 폴더가 자동 생성됨;
  2. 2026-08-04.log 형식의 로그 파일이 자동 생성됨;
  3. 파일 내 출력 예시:
2026-08-04 15:30:22,123 [6] INFO  logger-name - 일반 로그
2026-08-04 15:30:22,129 [6] ERROR logger-name - 오류 로그Code language: CSS (css)

보충 설명

  • 파일 출력 외에도 콘솔, 데이터베이스, 이메일 출력을 지원합니다;
  • 신규 프로젝트는 NLog / Serilog도 비교 검토하세요. .NET Core/.NET5 이상에 대한 지원이 더 좋습니다. Log4Net은 주로 레거시 WebForm, WinForms 프로젝트 유지보수에 사용됩니다.

소개와 설치

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다