#asp.net-core #ubuntu #serilog
Вопрос:
Я развернул веб-сайт на компьютере с ubuntu, но не смог получить serilog для записи в файл
Вот что у меня есть:
В Program.cs (опущены ненужные части):
public static void Main(string[] args)
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true)
.AddEnvironmentVariables()
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
Также:
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseUrls($"http://localhost:{port}")
.UseStartup<Startup>();
})
.UseSerilog();
в моем приложении.Подготовка к выпуску.json:
"Serilog": {
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "/var/log/myapp/",
"rollingInterval": "Day"
}
}
]
},
Это работает на моей локальной машине Windows
{
"Name": "File",
"Args": {
"path": "c:\myapp\log.txt",
"rollingInterval": "Day"
}
},
Нужно ли мне делать что-либо с дополнительным разрешением?
Комментарии:
1.
"path": "/var/log/myapp/",
это кажется неправильным. Вам нужно указать полный путь к файлу, например/var/log/myapp/myapp.log
2. @абдуско тоже пытался это сделать, но безуспешно
3. Вы пробовали включить самостоятельный журнал serilog? github.com/serilog/serilog/wiki/Debugging-and-Diagnostics
4. Я добавил эту строку после CreateLogger, но не уверен, что делать или как продолжить оттуда
5. Переместите его до того места, где вы настроили Serilog, затем проверьте вывод консоли на наличие ошибок. Вы должны увидеть некоторые записи, если Serilog не может выполнить запись в приемник
Ответ №1:
Мне пришлось перезапустить службу:
sudo systemctl restart myapp.service
также нужно было установить разрешения:
mkdir /var/log/myapp/
chown apiuser:apiuser /var/log/myapp/
chmod 740 /var/log/myapp
Я продолжал перезапускать nginx, но не знал, что мне тоже нужно перезапустить службу