如何为 Cloudwatch 创建自定义文本格式化程序? [英] How to create a Custom text formatter for Cloudwatch?

查看:18
本文介绍了如何为 Cloudwatch 创建自定义文本格式化程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如上所述,我不明白如何为 Amazon Cloudwatch 创建自定义文本格式化程序:

I don't understand how to create a custom text formatter for Amazon Cloudwatch as mentioned:

var formatter = new MyCustomTextFormatter();

我正在尝试将 Serilog 日志写入 Amazon CloudWatch 而不是本地硬盘.为此,我正在关注此存储库:

I am trying to write Serilog logs to Amazon CloudWatch instead of the local hard disk. To do that I am following this repo:

https://github.com/Cimpress-MCP/serilog-sinks-awscloudwatch

private readonly ITextFormatter textFormatter;

public ILoggerFactory ConfigureLogger()
{
    LoggerFactory factory = new LoggerFactory();

    var logGroupName = "myLoggrouName";
    var region = Amazon.RegionEndpoint.EUWest1;
    var client = new AmazonCloudWatchLogsClient(region);
   //var formatter = new MyCustomTextFormatter();

    var options = new CloudWatchSinkOptions()
    {
        LogGroupName = logGroupName,
        //TextFormatter = formatter,
     
        MinimumLogEventLevel = LogEventLevel.Information,
        BatchSizeLimit = 100,
        QueueSizeLimit = 10000,
        Period = TimeSpan.FromSeconds(10),
        CreateLogGroup = true,
        LogStreamNameProvider = new DefaultLogStreamProvider(),
        RetryAttempts = 5
    };

      Log.Logger = new LoggerConfiguration()
            .WriteTo.AmazonCloudWatch(options, client)
            .CreateLogger();

    return factory;
}

能够将 Serilog 写入 Cloudwatch.

To be able to write the Serilogs to Cloudwatch.

推荐答案

我今天通过了同样的情况,我发现自定义格式化程序 - 默认情况下没有人设置 - 它设置日志的方式写入,因此它将出现在 AWS 日志中.

I passed for the same situation today and what I figure out is that custom formatter - which no one is set by default - its to set how the log will be write and consequently it will appear in the AWS Logs.

您可以使用 Serilog 提供的界面开始创建一个简单的格式化程序,并根据您的情况进行调整.

You can start creating a simple formatter using the interface that Serilog provides and adapt to the best fit in your situation.

public class AWSTextFormatter : ITextFormatter
{
    public void Format(LogEvent logEvent, TextWriter output)
    {
        output.Write("Timestamp - {0} | Level - {1} | Message {2} {3}", logEvent.Timestamp, logEvent.Level, logEvent.MessageTemplate, output.NewLine);
        if (logEvent.Exception != null)
        {
            output.Write("Exception - {0}", logEvent.Exception);
        }
    }
}

使用它

var customFormatter = new AWSTextFormatter();

 var options = new CloudWatchSinkOptions
{
  // the name of the CloudWatch Log group for logging
  LogGroupName = logGroupName,

  // the main formatter of the log event
  TextFormatter = customFormatter,

  // other defaults defaults
  MinimumLogEventLevel = LogEventLevel.Information,
  BatchSizeLimit = 100,
  QueueSizeLimit = 10000,
  Period = TimeSpan.FromSeconds(10),
  CreateLogGroup = true,
  LogStreamNameProvider = new DefaultLogStreamProvider(),
  RetryAttempts = 5
};

在该方法中,您可以访问 LogEvent 并获取您需要的所有信息.这个和他们在lib中使用的类似,写事件、异常和一些细节.

In the method you can acces the LogEvent and get all information you need. This one is similar to what they use in the lib, writing the event, exception and some detail.

建议在本地测试自定义格式化程序,将日志写入某个文件

A suggestion is to test the custom formatter locally writing the log in some file

Log.Logger = new LoggerConfiguration()
     .MinimumLevel.Debug()
     .WriteTo.RollingFile(customFormatter, Path.Combine(env.ContentRootPath, "Logs", "Log-{Date}.txt"))
     .WriteTo.AmazonCloudWatch(options, client)
     .CreateLogger();

日志显示的内容:

Timestamp - 1/9/2019 11:52:11 AM -02:00 | Level - Fatal | Message PROBLEM STARTING 
 APPLICATION 
 Exception - Couchbase.Configuration.Server.Serialization.BootstrapException: Could not 
 bootstrap - check inner exceptions for details.

这篇关于如何为 Cloudwatch 创建自定义文本格式化程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆