无法将类型字符串隐式转换为 serilog.formatting.ITextformatter
Posted
技术标签:
【中文标题】无法将类型字符串隐式转换为 serilog.formatting.ITextformatter【英文标题】:Cannot implicitly convert type string to serilog.formatting.ITextformatter 【发布时间】:2019-01-09 13:37:05 【问题描述】:如何将字符串对象转换为 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 MessageNewLineException";
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。
【问题讨论】:
github.com/serilog/serilog/wiki/Formatting-Output 我回答你的另一个问题Creating Custom ITextFormatter 【参考方案1】:你不能在输出模板中使用字符串,它需要一个 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();
【讨论】:
【参考方案2】:您可以使用Serilog.Formatting.Display.MessageTemplateTextFormatter
并在构造函数中传入您的正常输出模板字符串。
var textFormatter = new MessageTemplateTextFormatter(outputTemplate, null);
【讨论】:
以上是关于无法将类型字符串隐式转换为 serilog.formatting.ITextformatter的主要内容,如果未能解决你的问题,请参考以下文章
匿名托管的 DynamicMethods 程序集:无法将类型“字符串”隐式转换为“整数”
向启用文本框 (C#) 的 Web 部件添加按钮,出现错误:无法将类型“bool”隐式转换为“字符串”
无法将类型“System.DateTime”隐式转换为“string”是啥意思?怎么改正?
无法将类型 ('string', 'string') 隐式转换为 System.Net.ICredentialsByHost