소개
- 정의
Log4net = Log for .NET이며 Apache Log4j(Java 고전 로깅 프레임워크)의 .NET 플랫폼 공식 포팅 버전으로, 안정적인 오픈소스 로깅 라이브러리입니다. - 주요 기능
프로젝트에 적용하면 파일 읽고 쓰는 로직을 직접 구현하지 않아도 빠르게 애플리케이션 로그를 출력할 수 있습니다. 런타임 정보와 예외 스택 트레이스를 기록해 디버깅 및 운영 환경 문제를 진단하는 데 활용합니다. - 용어 비교
- 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".log""/>
<!-- 롤링 전략: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)
G:\xxx같은 절대 경로를 하드코딩하지 마세요. 서버 배포 시 작동하지 않습니다. 상대 경로logs\\를 사용하세요;- 운영 환경에서는
level을INFO혹은ERROR로 변경해 과도한 DEBUG 로그로 디스크 공간이 낭비되지 않도록 하세요.
2단계: Log4Net 전역 초기화
프로젝트 Global.asax의 Application_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("치명적 오류 로그");
}
}
권장 사항:ILog를 static readonly로 선언해 인스턴스를 반복 생성하지 않도록 해 성능을 최적화하세요.
실행 결과 설명
- 프로그램 실행 후 웹 사이트 루트에
logs폴더가 자동 생성됨; 2026-08-04.log형식의 로그 파일이 자동 생성됨;- 파일 내 출력 예시:
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 프로젝트 유지보수에 사용됩니다.
소개와 설치
Next: 로그가 데이터베이스에 기록됩니다