Я использую Microsoft.Extensions.Hosting
и NLog.Web.AspNetCore
в WPF. Приложение работает правильно в режимах Debug
и Release
, но когда я публикую sh приложение как один файл, я обнаружил, что File
target не работает, если fileName
использует относительный путь.
Версия NLog : 4.6.8
Платформа :. NET Core 3
Конфигурация NLog
<nlog>
<targets>
<default-wrapper xsi:type="BufferingWrapper" bufferSize="100"/>
<target xsi:type="File" name="file" fileName="logs/${level}-${shortdate}.log" encoding="utf-8"
layout="${longdate}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="file" final="true"/>
</rules>
</nlog>
Я использую AddNLog
для примените эту конфигурацию:
public App()
{
_host = new HostBuilder()
.ConfigureLogging(logBuilder =>
{
logBuilder.ClearProviders()
.SetMinimumLevel(LogLevel.Debug)
.AddNLog("NLog.config");
})
.ConfigureServices((hostContext, services) =>
{
//...
}).Build();
}
Показывать MainWindow при запуске приложения:
private void Application_Startup(object sender, StartupEventArgs e)
{
using var serviceScope = _host.Services.CreateScope();
var serviceProvider = serviceScope.ServiceProvider;
_logger = serviceProvider.GetRequiredService<ILogger<App>>();
SetupExceptionHandling();
MainWindow mainWindow = serviceProvider.GetRequiredService<MainWindow>();
mainWindow.Show();
_logger.LogInformation($"Application startup at {DateTime.Now} successfully");
}
Публикация в виде одного файла и его запуск, журнал успешного запуска в файл не записывается, Но когда я меняю fileName
на абсолютный путь, например /logs/${level}-${shortdate}.log
или ${level}-${shortdate}.log
, журнал может быть записан.
Я пытаюсь настроить его в коде:
var config = new LoggingConfiguration();
var file = new FileTarget("file")
{
FileName = "logs/${shortdate}-${level}.log",
Layout = "${longdate}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}"
};
config.AddRule(LogLevel.Info, LogLevel.Fatal, new BufferingTargetWrapper(file));
return config;
Но результат все тот же.
Я что-то не так пишу? спасибо за помощь.