有没有办法创建文件名中不包含日期戳的 Serilog 非滚动文件接收器?
Is there a way to create a Serilog non rolling File Sink that doesn't include the date stamp in the filename?
我是 C# 的新手...
我们使用 Serilog 来记录 ILogger 日志记录。对于我的测试用例,我想将一个日志文件名传递给 Serilog File sink,并且不让它在文件名中插入 YYYYMMDD。到目前为止,我还没有找到让 Serilog 不将日期插入日志文件名的方法。以下是用于证明这一点的简短代码片段:
public static class Log
{
private static readonly ConcurrentDictionary<string, Lazy<ILogger>> fileLogs = new ConcurrentDictionary<string, Lazy<ILogger>>();
public static ILogger File(string path)
{
var filePath = string.IsNullOrEmpty(path)
? $"{Assembly.GetEntryAssembly().GetName().Name}_{UnixEpoch.MillisecondsNow}.log"
: path;
var fileInfo = new FileInfo(filePath);
return fileLogs.GetOrAdd(fileInfo.FullName, name => new Lazy<ILogger>(() =>
{
fileInfo.Directory.Create();
return LoggerFactory
.Create(builder => builder.AddFile(filePath))
.CreateLogger("File");
})).Value;
}
}
public void CreateFileLog()
{
var log = Log.File("./test.log");
log.LogInformation("Sample log record.");
}
输出文件名将是:./test20220517.log
如何设置 Serilog 文件接收器,使其不将日期插入日志文件名?
文件接收器支持滚动间隔,这也会影响它写入的文件的命名约定。您可以设置 无限 的滚动间隔,这将无限期地使用同一个文件并且不会显示更改文件名。
To configure the sink in C# code, call WriteTo.File() during logger
configuration:
var log = new LoggerConfiguration()
.WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger(); This will append the time period to the filename, creating a file set like:
log20180631.txt
log20180701.txt
log20180702.txt
https://github.com/serilog/serilog-sinks-file#rolling-policies
请注意,文件接收器将文件大小限制为 1 GB,并且会停止写入日志,直到达到下一个滚动周期以防止磁盘使用问题,因此如果您确实达到该限制,您的无限日志可能会停止更新。
我是 C# 的新手... 我们使用 Serilog 来记录 ILogger 日志记录。对于我的测试用例,我想将一个日志文件名传递给 Serilog File sink,并且不让它在文件名中插入 YYYYMMDD。到目前为止,我还没有找到让 Serilog 不将日期插入日志文件名的方法。以下是用于证明这一点的简短代码片段:
public static class Log
{
private static readonly ConcurrentDictionary<string, Lazy<ILogger>> fileLogs = new ConcurrentDictionary<string, Lazy<ILogger>>();
public static ILogger File(string path)
{
var filePath = string.IsNullOrEmpty(path)
? $"{Assembly.GetEntryAssembly().GetName().Name}_{UnixEpoch.MillisecondsNow}.log"
: path;
var fileInfo = new FileInfo(filePath);
return fileLogs.GetOrAdd(fileInfo.FullName, name => new Lazy<ILogger>(() =>
{
fileInfo.Directory.Create();
return LoggerFactory
.Create(builder => builder.AddFile(filePath))
.CreateLogger("File");
})).Value;
}
}
public void CreateFileLog()
{
var log = Log.File("./test.log");
log.LogInformation("Sample log record.");
}
输出文件名将是:./test20220517.log
如何设置 Serilog 文件接收器,使其不将日期插入日志文件名?
文件接收器支持滚动间隔,这也会影响它写入的文件的命名约定。您可以设置 无限 的滚动间隔,这将无限期地使用同一个文件并且不会显示更改文件名。
To configure the sink in C# code, call WriteTo.File() during logger configuration:
var log = new LoggerConfiguration() .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); This will append the time period to the filename, creating a file set like:
log20180631.txt
log20180701.txt
log20180702.txt
https://github.com/serilog/serilog-sinks-file#rolling-policies
请注意,文件接收器将文件大小限制为 1 GB,并且会停止写入日志,直到达到下一个滚动周期以防止磁盘使用问题,因此如果您确实达到该限制,您的无限日志可能会停止更新。