我正在尝试将WriteTo.RollingFile与Serilog一起使用,如下所示:
WP.clear();
我的理解是日志文件将根据日期创建和命名,并且它每天都会写入一个新文件,但是我在同一天为每个日志条目获取一个新的日志文件! 如何配置Serilog每天写入一个新文件,理想情况下我每天只有一个日志文件?
是否有任何存档过程可以删除超过7天的文件?
答案 0 :(得分:22)
尝试以下:
var log = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile(@"f:\log\log.txt", retainedFileCountLimit:7)
.CreateLogger();
日志文件名将自动为log-20150819.txt等。您无需指定日期。
答案 1 :(得分:3)
现在,在2018年,标准的Serilog.Sinks.File
NuGet软件包支持滚动:
.WriteTo.File(@"e:\logs\skilliam.log", rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true, fileSizeLimitBytes: 123456);
答案 2 :(得分:2)
作为后续操作,请确保您使用全局范围" Log"实例
示例:
Log.Information("Hello world");
答案 3 :(得分:1)
要使用同一文件,您必须添加$Path = 'c:\test2'
$delim = '-'
# table for extensions & associated email addresses
$extensions = @{
'bob@test.com' = '23';
'jack@test.com' = '1000';
'blah@test.com' = '765'
}
Get-ChildItem $Path -Name | foreach {
$nameArray = $_.Split($delim)
$newName = $nameArray[2] + " " + ($nameArray[0].Substring(0, 8))
$ext = $nameArray[3]
$emailAddress = $extensions[$ext]
Write-Output $newName
Write-Output $emailAddress
}
.WriteTo.RollingFile(“ log- {Date} .txt”,共享:true)
答案 4 :(得分:0)
这是一种在asp.net MVC 4/5应用程序中使用Serilog和web.config的方法。
在您的web.config中添加以下内容:
<add key="serilog:minimum-level" value="Information" />
<add key="serilog:minimum-level:override:Microsoft" value="Information" />
<add key="serilog:minimum-level:override:System" value="Information" />
<add key="serilog:using:RollingFile" value="Serilog.Sinks.RollingFile" />
<add key="serilog:write-to:RollingFile.pathFormat" value="./Logs/log-{Date}.txt" />
<add key="serilog:write-to:RollingFile.outputTemplate" value="{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] {Message}{NewLine}{Exception}" />
<add key="serilog:write-to:RollingFile.retainedFileCountLimit" value="10" />
然后在global.asax的Application_Start
中添加以下内容:
// Get application base directory
string basedir = AppDomain.CurrentDomain.BaseDirectory;
// Setup Serilog for logging
Log.Logger = new LoggerConfiguration()
.ReadFrom.AppSettings()
.WriteTo.RollingFile(basedir + "/Logs/log-{Date}.txt")
.CreateLogger();
答案 5 :(得分:0)
要启用多进程共享日志文件,请将共享设置为true:
用代码
.WriteTo.RollingFile("log-{Date}.txt", shared: true)
或在web.config中
<add key="serilog:write-to:RollingFile.shared" value="true" />
答案 6 :(得分:0)
如果使用文本格式器 ITextFormatter
,请注意 path
的变量位置在使用 File
时已切换到第二位。
因此,请将此格式与格式化程序一起使用:
var filepath = @"C:\Logs";
ITextFormatter jsonFormatter = new Serilog.Formatting.Json.JsonFormatter(renderMessage: true);
...
Log.Logger = new LoggerConfiguration()
... // Enrichers etc...
.WriteTo.File(formatter: jsonFormatter,
path: filepath,
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true,
fileSizeLimitBytes: 123456,
shared: true)
.CreateLogger();
答案 7 :(得分:-2)
这是我的方法:
private readonly Serilog.ILogger _logger; //= Log.ForContext( "Name", "Weather" );
public WeatherForecastController() {
string subPath = Path.Combine( DateTime.Now.ToString( "yyyy" ), DateTime.Now.ToString( "MM" ) ) + $"/{DateTime.Now.ToString("dd")}_Weather";
_logger = Log.ForContext( "Name", subPath );
}
.UseSerilog( ( hostingContext, loggerConfiguration ) => loggerConfiguration
.ReadFrom.Configuration( hostingContext.Configuration )
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.Map(
"Name",
"Request",
( name, wt ) => {
if (name == "Request")
wt.RollingFile( Path.Combine( $"{hostingContext.Configuration["LogPath"]}/{{Date}}-{name}.txt" ) );
else
wt.File( $"{hostingContext.Configuration["LogPath"]}/{name}.txt" );
} )
);