面试题答案
一键面试设置合适的日志级别
- 在配置文件中设置:
在
appsettings.json
(假设使用此配置文件)中,配置Serilog的日志级别。例如:
这里将默认日志级别设置为{ "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "System": "Warning" } } } }
Information
,并将Microsoft
和System
命名空间下的日志级别覆盖为Warning
。这样可以减少不必要的日志记录,提升性能。 - 在代码中动态设置:
可以在代码中通过
Log.Logger
来动态更改日志级别。例如:var loggerConfiguration = new LoggerConfiguration() .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) .MinimumLevel.Override("System", LogEventLevel.Warning) .MinimumLevel.Information(); Log.Logger = loggerConfiguration.CreateLogger();
异步日志记录
- 使用
WriteTo.Async
方法: 在配置Serilog时,使用WriteTo.Async
方法来实现异步日志记录。例如:
这样日志写入文件的操作将在后台线程执行,不会阻塞主线程,提升高并发场景下的性能。var loggerConfiguration = new LoggerConfiguration() .WriteTo.Async(c => c.File("log.txt")); Log.Logger = loggerConfiguration.CreateLogger();
- 配置缓冲区大小:
可以设置异步日志记录的缓冲区大小。例如:
var loggerConfiguration = new LoggerConfiguration() .WriteTo.Async(c => c.File("log.txt"), bufferSize: 1024); Log.Logger = loggerConfiguration.CreateLogger();
bufferSize
设置为1024,表示缓冲区可以容纳1024条日志记录,当缓冲区满时才会将日志写入文件。
防止日志文件过大
- 按时间滚动日志文件:
使用
RollingFile
配置按时间滚动日志文件。例如:
这样每天会生成一个新的日志文件,文件名格式为var loggerConfiguration = new LoggerConfiguration() .WriteTo.RollingFile("logs\\log-{Date}.txt"); Log.Logger = loggerConfiguration.CreateLogger();
log-YYYY - MM - DD.txt
,防止单个日志文件过大。 - 限制日志文件大小:
可以设置日志文件的最大大小,当达到最大大小时进行滚动。例如:
这里设置日志文件最大为10MB,当文件大小达到10MB时,会滚动生成新的日志文件。var loggerConfiguration = new LoggerConfiguration() .WriteTo.RollingFile( pathFormat: "logs\\log-{Date}.txt", fileSizeLimitBytes: 10 * 1024 * 1024); Log.Logger = loggerConfiguration.CreateLogger();