.NET을 AWS CloudWatch에 로깅: NLog 사용

이 시리즈의 첫 번째 게시물에서는 낮은 수준의 첫 번째 원칙 접근 방식을 사용하여 AWS CloudWatch에 메시지를 기록했습니다. 이제 내부에서 로깅이 작동하는 방식을 이해했으므로 AWS CloudWatch에 로깅하도록 NLog를 구성하는 방법을 살펴보겠습니다. NLog가 적절하게 테스트되었고 AWS CloudWatch에 쓸 때 오류 처리가 있으므로 자체 로거를 작성하려고 시도하는 것보다 권장됩니다.

동영상





전제 조건



AWS 계정



.NET 애플리케이션에서 AWS CloudWatch로 로그를 푸시하는 데 사용할 수 있는 활성 AWS 계정이 필요합니다. 볼륨이 최소이므로 AWS CloudWatch의 프리 티어를 초과해서는 안 됩니다.

아직 AWS 계정이 없다면 여기에서 가입할 수 있습니다.

AWS 프로필



이 기사는 AWS CloudWatch에만 초점을 맞추고 있으므로 .NET 애플리케이션에서 AWS 자격 증명을 구성하지 않습니다. 대신 AWS SDK가 AWS CLI를 실행할 때 설정된 AWS 프로필을 자동으로 사용하도록 할 것입니다. 이렇게 하면 권한과 자격 증명을 뒤적일 필요가 없으므로 데모가 간단해집니다.

그러나 AWS 모범 사례에 따라 최소한의 권한으로 프로덕션 환경에서 애플리케이션에 고유한 IAM 역할/사용자를 항상 부여해야 합니다.

갑시다!



이제 시작하겠습니다!

1. 새 콘솔 애플리케이션 생성



.NET 6 콘솔 애플리케이션에서 이 데모를 실행합니다. Visual Studio 2022 또는 .NET 6 CLI를 사용하여 만들 수 있습니다. Visual Studio 2022를 사용할 예정입니다.

2. NLog 패키지 추가 및 로거 설정



먼저 NLog Nuget 패키지를 추가하고 기본 로거를 설정해 보겠습니다. 그런 다음 AWS CloudWatch에도 기록하도록 이 로거를 구성합니다.

NLog Nuget 패키지를 설치합니다(작성 ​​당시 4.7.13).

이제 NLog를 구성하고 일부 메시지를 콘솔에 기록하여 구성을 테스트할 수 있습니다.

Program.cs

using NLog;
using NLog.Config;
using NLog.Targets;

// Setup the NLog configuration
var config = new LoggingConfiguration();
config.AddRule(LogLevel.Trace, LogLevel.Fatal, new ConsoleTarget());

LogManager.Configuration = config;

// Create a new logger and test it
var log = LogManager.GetCurrentClassLogger();

log.Trace("Writing introduction message...");

log.Info("Hi there! How are you?");

log.Trace("Wrote introduction message!");


다음 출력이 표시되어야 합니다.



3. AWS.Logger.NLog 설치



AWS는 NLog가 AWS CloudWatch에 직접 로그인할 수 있는 매우 훌륭한 NLog Target 라이브러리를 제공합니다. 지금 설치합시다(글을 쓰는 시점에 3.0.0을 설치하고 있습니다).

4. 로거에서 AWS CloudWatch 대상 설정



이제 AWS CloudWatch용 NLog 대상을 생성할 수 있으며 로거도 여기에서 로그인을 시작해야 합니다!

Program.cs

using NLog;
using NLog.AWS.Logger;
using NLog.Config;
using NLog.Targets;

// Setup the NLog configuration
var config = new LoggingConfiguration();
config.AddRule(LogLevel.Trace, LogLevel.Fatal, new ConsoleTarget());

// Add the AWS Target with minimal configuration
config.AddRule(LogLevel.Trace, LogLevel.Fatal, new AWSTarget()
{
    LogGroup = "/dotnet/logging-demo/nlog"
});

LogManager.Configuration = config;

// Create a new logger and test it
var log = LogManager.GetCurrentClassLogger();

log.Trace("Writing introduction message...");

log.Info("Hi there! How are you?");

log.Trace("Wrote introduction message!");


프로그램을 실행하면 AWS CloudWatch에 다음 로그가 표시됩니다.



5. (선택 사항) AWS CloudWatch 대상 사용자 지정



NLog용 AWS Target에 대한 구성을 사용자 지정할 수 있습니다. 사용할 수 있는 몇 가지 구성 옵션을 살펴보겠습니다.

Program.cs

using Amazon.Runtime;
using NLog;
using NLog.AWS.Logger;
using NLog.Config;
using NLog.Layouts;
using NLog.Targets;

// Setup the NLog configuration
var config = new LoggingConfiguration();
config.AddRule(LogLevel.Trace, LogLevel.Fatal, new ConsoleTarget());

// Add the AWS Target with minimal configuration
config.AddRule(LogLevel.Trace, LogLevel.Fatal, new AWSTarget()
{
    LogGroup = "/dotnet/logging-demo/nlog",
    // (Optional) How often batches of log messages should be pushed to AWS CloudWatch
    BatchPushInterval = TimeSpan.FromSeconds(3),
    // (Optional) Whether NLog should try create the log group if it does not exist or not
    DisableLogGroupCreation = false,
    // (Optional) The maximum number of log events that are kept in memory before being pushed to
    // AWS CloudWatch
    MaxQueuedMessages = 10000,
    // (Optional) A string to prefix log stream names with
    LogStreamNamePrefix = "Prefix",
    // (Optional) A string to suffix log stream names with
    LogStreamNameSuffix = "Suffix",
    // (Optional) AWS credentials that should be used to log into AWS and access AWS CloudWatch
    // Credentials = new BasicAWSCredentials(accessKey, secretKey), (Optional) The region that AWS
    // CloudWatch logs should be logged in. In this case it defaults to the AWS Profile's region
    Region = "af-south-1",
    // (Optional) Custom layout that should be used when formatting log messages
    Layout = new SimpleLayout("[${date} ${level:uppercase=true:truncate=3}] ${message} ${exception}")
});

LogManager.Configuration = config;

// Create a new logger and test it
var log = LogManager.GetCurrentClassLogger();

log.Trace("Writing introduction message...");

log.Info("Hi there! How are you?");

log.Trace("Wrote introduction message!");


폐쇄



보시다시피 기존 .NET 로깅 라이브러리를 사용하여 AWS CloudWatch에 로깅하는 것은 매우 간단합니다. 이 기사에서는 AWS CloudWatch를 NLog와 통합하는 것이 얼마나 쉬운지 시연했습니다. 이는 이미 NLog를 사용하는 애플리케이션이 있을 때 특히 유용합니다.

NLog에 대해 자세히 알아보려면 해당 설명서here를 볼 수 있습니다. 또한 NLog용 AWS Targethere에 대해 자세히 알아볼 수 있습니다.

좋은 웹페이지 즐겨찾기