Azure Functions v4配置Serilog彩色日志及移除时间戳
解决方案
1. 实现不同数据类型的颜色区分
要达到ASP.NET Core中结构化日志属性按数据类型着色的效果,需调整Serilog控制台Sink的主题和格式化器:
步骤1:添加必要的NuGet包
新增Serilog.Formatting.Compact包,它提供的RenderedCompactJsonFormatter能更好地渲染结构化日志并支持数据类型着色:
<PackageReference Include="Serilog.Formatting.Compact" Version="7.0.0" />
步骤2:修改Serilog配置
将控制台Sink的主题替换为AnsiConsoleTheme.Code(该主题对字符串、数字、日期等不同数据类型有明确的颜色区分),同时使用RenderedCompactJsonFormatter渲染结构化日志:
var logger = new LoggerConfiguration() .Enrich.FromLogContext() .WriteTo.ApplicationInsights( TelemetryConfiguration.CreateDefault(), TelemetryConverter.Events, LogEventLevel.Information) .MinimumLevel.Debug() .WriteTo.Console( theme: AnsiConsoleTheme.Code, formatter: new RenderedCompactJsonFormatter(), outputTemplate: "[{Level:u3}] {Message:lj}{NewLine}{Exception}") .CreateLogger(); services.AddLogging(configure => configure.AddSerilog(logger, true));
2. 移除灰色长时间戳
日志中的灰色时间戳来自Serilog控制台Sink的默认输出模板,只需自定义outputTemplate并去掉{Timestamp}部分即可。上面的配置中已经移除了Timestamp,你也可以根据需求调整模板,比如保留日志级别、消息、结构化属性和异常:
outputTemplate: "[{Level:u3}] {Message:lj}{Properties:j}{NewLine}{Exception}"
验证效果
在Azure Function中使用ILogger输出结构化日志时,不同数据类型的属性值会自动区分颜色:
_logger.LogInformation("用户 {UserName} 于 {LoginTime} 登录,年龄 {UserAge}", "张三", DateTime.Now, 28);
- 字符串类型(
UserName):绿色 - 日期类型(
LoginTime):青色 - 数字类型(
UserAge):蓝色
内容的提问来源于stack exchange,提问作者user3079834
相关产品推荐
相关产品推荐

