gpt4 book ai didi

c# - 如何为 Cloudwatch 创建自定义文本格式化程序?

转载 作者:行者123 更新时间:2023-11-30 15:52:36 26 4
gpt4 key购买 nike

我不明白如何为提到的 Amazon Cloudwatch 创建自定义文本格式化程序:

var formatter = new MyCustomTextFormatter();

我正在尝试将 Serilog 日志写入 Amazon CloudWatch 而不是本地硬盘。为此,我正在关注此 repo 协议(protocol):

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。

最佳答案

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

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

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中使用的类似,写了事件、异常和一些细节。

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

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.

关于c# - 如何为 Cloudwatch 创建自定义文本格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com