我在 TopShelf 服务中使用 Serilog,记录到控制台和滚动文件。在控制台中运行服务时,我的消息被写入日志文件,但是当我安装服务并运行它时,不会发生日志记录。我需要配置什么特别的东西吗?该文件将写入“.\logs\log-{date}.txt”下的二进制文件夹。
最好的问候戈佩
我在 TopShelf 服务中使用 Serilog,记录到控制台和滚动文件。在控制台中运行服务时,我的消息被写入日志文件,但是当我安装服务并运行它时,不会发生日志记录。我需要配置什么特别的东西吗?该文件将写入“.\logs\log-{date}.txt”下的二进制文件夹。
最好的问候戈佩
我有一个非常相似的问题。就我而言,问题在于相对路径。我只需要指定绝对路径。现在它就像一个魅力。
WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory + "\\logs\\log-{Date}.log")
希望能帮助到你!
我们遇到了同样的问题,这就是我们发现的:
症状 - 没有创建日志文件 - 没有写入 Seq 的日志。
根据@gdoten 的评论,我们的日志文件被写入\windows\syswow64(服务作为本地服务运行)。
我们认为这些文件的权限可能不允许读取持久假脱机文件,导致没有日志写入 Seq。
修复是硬编码滚动日志文件和缓冲区的路径。
loggerFactory.AddFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log-{Date}.txt"));
试试这个,它在我的 ASP.NET core 2 应用程序中作为 Windows 服务运行
运行服务的帐户很可能没有写入日志文件位置的权限。尝试将日志文件位置更改为系统的临时文件夹,看看是否是这种情况。
如果这仍然失败,使用 SerilogSelfLog
获取异常信息是您最好的选择。
我有一个类似的问题,它最终是因为下面的代码,
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
代码指定 appsettings.json 文件,在该文件中它具有 serilog 的配置设置,但是在服务中运行时,当前文件夹不指向可执行文件文件夹。所以它找不到文件 appsettings.json,然后当然 serilog 不会按预期工作。
只需更改以下代码即可使其正常工作
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(AppDomain.CurrentDomain.BaseDirectory + "\\appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
我作为 Windows 服务运行,这是我的 JSON 文件。
{
"Serilog": {
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"pathFormat": "C:\\Program Files\\mycomp\\myapp\\logs\\log-{Date}.txt"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId", "WithEnvironmentUserName", "WithProcessId" ],
"Properties": {
"Application": "MyApp",
"Environment": "Development"
}
}
}
你也可以使用这样的东西(当你想创建一个 Windows 服务和 Serilog 时):
var builder = new ConfigurationBuilder()
.AddJsonFile($@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();