.NET Core 3.0 로그 logging 의 실현
다년간 의 경험,로그 기록 은 소프트웨어 개발 의 중요 한 구성 부분 이다.로그 기록 메커니즘 이 없 는 시스템 은 완벽 한 시스템 이 아니다.개발 단계 에 서 는 debug 첨부 프로 세 스 를 통 해 인 터 랙 션 디 버 깅 을 할 수 있 으 며,일부 문 제 를 감지 할 수 있 으 나,접속 후 로그 의 기록 은 중요 한 역할 을 합 니 다.그것 은 우리 로 하여 금 시스템 에 문제 가 생 긴 후에 오 류 를 조사 하여 근 거 를 제공 하 게 할 수 있다.
.NET Core 3.0 에는 다양한 로그 기록 프로그램 이 내장 되 어 있 으 며 제3자 가 제공 하 는 로그 기록 프로그램 프레임 워 크 가 있 습 니 다.예 를 들 어 log4net,NLog,Serilog,elmah.io 등 입 니 다.다음 세 가지 로그 프레임 워 크 가.NET core 3.0 과 어떻게 결합 하여 사용 되 는 지 소개 합 니 다.
내 장 된 로그 기록 공급 자
ASP.NETCore 는 다음 과 같은 프로그램 을 제공 합 니 다.
컨트롤 러-컨트롤 러 에서 로그 출력 을 볼 수 있 습 니 다
유 니 버 설 호스트 의 응용 프로그램 과 비 호스트 응용 프로그램 이 사용 하 는 방식 도 다르다.유 니 버 설 호스트 내부 에 주입,logging,설정,IHosted Service 에 의존 하 는 구현 이 봉인 되 어 있 기 때 문 입 니 다.또한 기본적으로 콘 솔,디 버 깅,EventSource,EventLog(windows 에서 만 실 행 될 때)프로그램 을 설정 합 니 다.원본 코드 는 아래 와 같다.
.ConfigureLogging((hostingContext, logging) =>
{
var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
// IMPORTANT: This needs to be added *before* configuration is loaded, this lets
// the defaults be overridden by the configuration.
if (isWindows)
{
// Default the EventLogLoggerProvider to warning or above
logging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);
}
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
if (isWindows)
{
// Add the EventLogLoggerProvider on windows machines
logging.AddEventLog();
}
})
범용 호스트공급 자 추가
기본 공급 자 를 교체 하기 위해 공급 자 를 스스로 선택 할 수 있 습 니 다.CreateHostBuilder 에서 ClearProviders()를 호출 하고 필요 한 공급 자 를 추가 합 니 다.api 프로젝트 를 만 드 는 것 을 예 로 들 면
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();//
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
logging.AddEventLog();
//logging.AddTraceSource();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
로그 만 들 기웹 응용 프로그램 이나 위탁 관리 서비스 에서 의존 관계 주입(DI)으로 ILogger 를 가 져 옵 니 다.
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
// ILoggerFactory logger
//logger.CreateLogger("WebApi.Controllers.WeatherForecastController");
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
//
_logger.LogTrace(1000, "log Trace msg"); //
_logger.LogDebug(1001, "log Debug msg"); //
_logger.LogInformation(1002, "log Information msg"); //
_logger.LogWarning(1003, "log Warning msg"); //
_logger.LogError(1004, "log Error msg"); //
_logger.LogCritical(1005, "log Critical msg"); //
비 호스트 콘 솔
공급 자 추가
Logger Factory 를 만 들 때 프로그램 을 제공 하 는 add{provider name}확장 방법 을 호출 합 니 다.
var loggerFactory = LoggerFactory.Create(builder =>
{
builder
.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
.AddFilter("LoggingConsoleApp.Program", LogLevel.Debug)
.AddConsole()
.AddEventLog();
});
로그 만 들 기호스트 가 아 닌 콘 솔 응용 프로그램 에서 Logger Factory 를 사용 하여 ILogger 를 만 듭 니 다.
ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation(" log message");
・실행 출력
제3자 로그 프레임 워 크
log4net,NLog,Serilog 등 3 가지 로그 기록 프레임 워 크 는 거의.NET 공간 에서 주도 적 인 위 치 를 차지 하기 때문에 많이 소개 할 필요 가 없다.최근 6 주간의 다운로드 순 위 를 보면 알 수 있다.그림 과 같다
log4net NET Core 3.0 에서 사용
프로젝트 에 Log4net 참조,NuGet 패키지 설치
Install-Package log4net -Version 2.0.8
프로젝트 에 log4net.config 파일 을 추가 하고 오른쪽 단 추 를 누 르 면 파일 속성 을 변경 합 니 다.-출력 디 렉 터 리 선택 으로 복사 합 니 다.-항상 복사 합 니 다.
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="loglog4net.log" />
<appendToFile value="true" />
<maximumFileSize value="50KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
Startup 파일 에 log4net 설정 파일 추가
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseLog4net();
/// <summary>
/// log4net
/// </summary>
/// <param name="app"></param>
/// <returns></returns>
public static IApplicationBuilder UseLog4net(this IApplicationBuilder app)
{
var logRepository = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.Config.XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
return app;
}
, Controllers
private readonly ILog log;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
this.log = LogManager.GetLogger(typeof(WeatherForecastController));
} [HttpGet]
public IEnumerable<WeatherForecast> Get()
{
//
log.Error("log4net erro msg"); //log4net
보기 로그 파일 실행NLog 는 NET Core 3.0 에서 사용 합 니 다.
프로젝트 에 NRog 를 참조 하여 NuGet 패 키 지 를 설치 합 니 다.
Install-Package NLog.Web.AspNetCore -Version 4.9.0
Install-Package NLog -Version 4.6.7
프로필 추가 nlog.config
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Info"
internalLogFile="internal-nlog.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write logs to file -->
<target xsi:type="File" name="allfile" fileName="nlog-all-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<!-- another file log, only own logs. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="ownFile-web" fileName="nlog-own-${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!--All logs, including from Microsoft-->
<logger name="*" minlevel="Trace" writeTo="allfile" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
<!-- BlackHole without writeTo -->
<logger name="*" minlevel="Trace" writeTo="ownFile-web" />
</rules>
</nlog>
Program.cs 파일 설정 Main 방법 추가
NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
CreateHostBuilder 방법 추가
.UseNLog() //NLog: Setup NLog for Dependency injection
쓰다
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
//
_logger.LogTrace(1000, "log Trace msg"); //
_logger.LogDebug(1001, "log Debug msg"); //
_logger.LogInformation(1002, "log Information msg"); //
_logger.LogWarning(1003, "log Warning msg"); //
_logger.LogError(1004, "log Error msg"); //
_logger.LogCritical(1005, "log Critical msg"); //
Serilog 는 NET Core 3.0 에서 사용 합 니 다.
항목 에 Serilog 를 참조 하여 NuGet 패 키 지 를 설치 합 니 다.
Install-Package Serilog.AspNetCore -Version 3.1.0
Program.cs 파일 에서 Logger 초기 화메 인 방법 추가
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Console()//
.WriteTo.File("logserilog.txt", rollingInterval: RollingInterval.Day) // ,
.CreateLogger();
try
{
Log.Information("Starting up");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Application start-up failed");
}
finally
{
Log.CloseAndFlush();
}
출력 실행:소결:본 고 는 주로 NET Core 3.0 에 내 장 된 로그 제공 프로그램 과 제3자 로그 프레임 워 크(Log4net,Nlog,Serilog)의 사용 을 설명 한다.
.NET Core 3.0 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그 로그
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 SQLite를 사용한 Windows Forms 앱 개발Visual Studio 2017에서 SQLite를 사용하여 Windows Forms 앱을 개발해 보았습니다. 아직 서버 탐색기나 TableAdaptor를 사용한 GUI에서의 개발에는 대응하지 않는 것 같습니다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.