添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

不能隐含地将字符串类型转换为serilog.formatting.ITextformatter

2 人关注

如何将一个字符串对象转换为Serilog.formatting.ITextformatter。

我正在尝试将Serilog的日志写入Cloudwatch,其中一个步骤是创建一个自定义的文本格式化。现在我需要将我的自定义格式转换为与IText格式相匹配的格式。 我正在使用这个Github repo中的库。 https://github.com/Cimpress-MCP/serilog-sinks-awscloudwatch

public class LogFactory
    public ILoggerFactory ConfigureLogger()
        LoggerFactory factory = new LoggerFactory();
        var logGroupName = "MyLogGroupName";
     var region = Amazon.RegionEndpoint.EUWest1;
        const string outputTemplate = "{Timestamp:HH:mm} [{Level}] {MachineName} {EnvironmentUserName} ({ThreadId}) ({ProcessId}) {SourceContext}  {Message}{NewLine}{Exception}";
        var options = new CloudWatchSinkOptions()
            // the name of the CloudWatch Log group for logging
            LogGroupName = logGroupName,
            TextFormatter = outputTemplate, //I get the error here.
// the main formatter of the log event
// other defaults defaults
            MinimumLogEventLevel = LogEventLevel.Information,
            BatchSizeLimit = 100,
            QueueSizeLimit = 10000,
            Period = TimeSpan.FromSeconds(10),
            CreateLogGroup = true,
            LogStreamNameProvider = new DefaultLogStreamProvider(),
            RetryAttempts = 5
        var client = new AmazonCloudWatchLogsClient(region);
    Log.Logger = new LoggerConfiguration()
          .WriteTo.AmazonCloudWatch(options, client)
          .CreateLogger();
        return factory;

要把Serilog写到Amazon Clouwatch。

c#
.net-core
amazon-cloudwatch
serilog
text-formatting
Salah
Salah
发布于 2019-01-09
2 个回答
Thiago Loureiro
Thiago Loureiro
发布于 2021-06-08
0 人赞同

你不能在输出模板中使用一个字符串,它期望一个 ITextFormatter ,你可以使用这样的东西。

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 outputTemplate = new AWSTextFormatter();