Я использую веб-сервер ASP.NET Core в качестве службы Windows и использую Serilog для входа в файл в% PROGRAMDATA%.Когда я запускаю службу как локальная система, ничего не регистрируется.
Я использую .Net Core 2.2 в Windows 10. Я тестирую, вызывая в своем сервисе ошибку, которая записывает событие журнала на уровне ошибки.Я попытался запустить службу в качестве моей собственной учетной записи администратора, и запись в журнал работает нормально;проблема возникает только при работе в качестве локальной системы.
У меня есть другие службы Windows, использующие .Net Framework, которые работают как локальная система и у меня нет проблем с записью в% PROGRAMDATA% с Serilog, но я впервыепопробовал на .Net Core.Я могу вручную создать и записать в файл журнала внутри службы с помощью Directory.CreateDirectory и File.AppendText, который работает при работе в качестве локальной системы, но запись в журнал Serilog не выполняется.
Вот мой Program.Main:
public static async Task Main(string[] args)
{
var isService = !(Debugger.IsAttached || args.Contains("--console"));
if (isService)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
Directory.SetCurrentDirectory(pathToContentRoot);
}
var host = WebHost.CreateDefaultBuilder(args.Where(arg => arg != "--console").ToArray())
.UseStartup<Startup>()
.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration)
.Enrich.FromLogContext())
.Build();
// additional async initialization omitted
if (isService)
{
host.RunAsService();
}
else
{
host.Run();
}
}
А вот раздел Serilog моего appsettings.json:
"Serilog": {
"MinimumLevel": {
"Default": "Verbose",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "%PROGRAMDATA%/foo/bar baz/logs/qux.log",
"fileSizeLimitBytes": 1048576,
"rollOnFileSizeLimit": "true",
"retainedFileCountLimit": 99,
"flushToDiskInterval": "00:00:01",
"outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff} {Level:u3}] {Message:lj} [{SourceContext}]{NewLine}{Exception}"
}
},
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss.fff} {Level:u3}] {Message:lj} [{SourceContext}]{NewLine}{Exception}"
}
}
]
}
Я ожидал, что запись в журнал будет записана в файл в% PROGRAMDATA%, когда служба работает как локальнаяСистема, но ничего не происходит.Ведение журнала ведется без проблем, когда служба запускается как любая другая административная учетная запись.