dev/asp.net, c#

[asp.net core 3.1] 파일 로깅 for log4net(로그4넷)

코딩for 2020. 12. 4. 18:10
반응형

log4net 라이브러리를 이용하여 로깅 구현

 

[다른 라이브러리를 이용한 로깅은 다른 글 참조]

[asp.net core 3.1] 파일 로깅 for nLog (엔로그)

[asp.net core 3.1] 파일 로깅 for SeriLog (세리로그)

 

 

이번 글에서는 asp.core mvc 프로젝트 애플리케이션을 이용한다.

 

 

 

log4net 패키지 모듈 설치 (Microsoft.Extensions.Logging.Log4Net.AspNetCore)

 

설치방법 1. nuget 패키지 콘솔 이용   

PM> Install-Package Microsoft.Extensions.Logging.Log4Net.AspNetCore

 

설치방법 2. nuget 패키지 관리자에서 검색 설치 

 

 

log4net 환경파일 추가

 

프로젝트 > 새항목 추가에서 웹구성파일( .config)을 log4net.config 이름으로 변경(파일명은 변경가능)

 

 

 

log4net.config   환경설정 파일

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
	<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
		</layout>
	</appender>
	
	<appender name="AppendFile" type="log4net.Appender.RollingFileAppender">
		<file value="d:/Logs/" />
		<datepattern value="yyyy-MM-dd.'txt'"/>
		<staticlogfilename value="false"/>
		<appendtofile value="true"/>
		<rollingstyle value="Composite"/>
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
		</layout>
	</appender>

	<root>
		<level value="ALL"/>
		<appender-ref ref="ConsoleAppender" />
		<appender-ref ref="AppendFile" />
	</root>
</log4net>

 

 

 

 

* 환경설정과 관련된 자세한 설명은 log4net 공식 사이트를 참고 바랍니다.

[ log4net 공식 사이트 바로가기 ]

 

 

log4net 사용하기

 

Startup.cs

 

using Microsoft.Extensions.Logging;  추가

Configure 메서드에서 ILoggerFactory 를 인자로 넘겨주고 AddLog4Net()모듈을 사용

AddLog4Net 에 인자로 환경 설정 파일명을 전달(log4net.config 가 디폴트)

 

 

 

Controller 에서의 log4net 사용

DI(Dependency Injection) 생성자 의존성 주입으로 logger 객체를 생성하여 logging

private readonly ILogger<HomeController> _logger;

public HomeController(ILogger<HomeController> logger)
{
	_logger = logger;
}

public IActionResult Index()
{
	_logger.LogError("logging.. 테스트");

	return View();
}

 

config 파일에서 설정한 경로에 로그가 생성

 

 

 

log4net로그는 기록하는 레벨이 존재하며 환경파일 에서 지정한 레벨로 기록을 한다.

 

  • ALL
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

특정 레벨의 로그만 기록하기 위해서는 filter 를 추가 하여(MIN, MAX) 레벨을 제한할 수 있다.

	<appender name="AppendFile_FATAL" type="log4net.Appender.RollingFileAppender">
		<file value="d:/Logs/" />
		<datepattern value="yyyy-MM-dd'_fatal.txt'"/>
		<staticlogfilename value="false"/>
		<appendtofile value="true"/>
		<rollingstyle value="Composite"/>
		<filter type="log4net.Filter.LevelRangeFilter">
			<param name="LevelMin" value="FATAL" />
			<param name="LevelMax" value="FATAL" />
		</filter>
		<layout type="log4net.Layout.PatternLayout">
			<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
		</layout>
	</appender>
    
    	<root>
		<level value="ALL"/>
		<appender-ref ref="ConsoleAppender" />
		<appender-ref ref="AppendFile_FATAL" />
	</root>

 

 

asp.net core 의 loggerFactory 의 로그 레벨

  • Trace
  • Debug
  • Information
  • Warning
  • Error
  • Critical

 

로깅 결과

 

Debug 레벨에는 기록된 로그가 없다.

 

* debug 레벨까지 로깅을 하기 위해서는 appsetting.json 파일의 LogLevel 의 defaut 값을 Debug로 변경해야한다.

 (테스트 해보면 Debug 이상부터만 log4net 모듈로 로깅이 가능한것 같다)

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

 

 

 

[참고]

[asp.net] 웹사이트 Application_Error 에러(Exception)로깅 with log4net

https://www.thecodebuzz.com/log4net-file-logging-console-logging-asp-net-core/

 

 

반응형