Не удается неявно преобразовать строку типа в serilog.formatting.ITextformatter - PullRequest
0 голосов
/ 09 января 2019

Как преобразовать строковый объект в Serilog.formatting.ITextformatter.

Я пытаюсь записать логи Serilog в Cloudwatch, и одним из шагов является создание пользовательского средства форматирования текста. Теперь мне нужно преобразовать мой пользовательский формат в формат IText. Я использую библиотеку в этом репозитории Github: 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.

1 Ответ

0 голосов
/ 11 июля 2019

Вы не можете использовать строку в шаблоне вывода, она ожидает 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();
...