Я работаю над приложением ASP. NET Core 3.1. Я хочу записывать события в файл и иметь возможность читать их во время выполнения приложения. Для этого я пытаюсь использовать Serilog.Extensions.Logging.File пакет NuGet и затем указать путь к файлу журнала следующим образом:
Startup.cs
public void Configure(IApplicationBuilder app, ILoggerFactory logFactory)
{
logFactory.AddFile("Log");
}
Любая попытка чтения или записи в файл подобным образом
string ReadLog(string logPath)
{
return System.IO.File.ReadAllText(logPath);
}
заканчивается System.IO.IOException: 'The process cannot access the file {log-path} because it is being used by another process.'
исключением.
РЕДАКТИРОВАТЬ : я установил Serilog.AspNetCore и внес изменения, показанные ниже, а также удалил logFactory из функции Configure. Но исключение продолжает возникать.
Program.cs
public static int Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File(
"Logs/log-.txt",
shared: true,
flushToDiskInterval: TimeSpan.FromSeconds(5),
rollingInterval: RollingInterval.Day)
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateHostBuilder(args).Build().Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseSerilog();
РЕДАКТИРОВАТЬ 2 : по запросу julealgon Я делюсь своей точной логикой чтения c. Я пытаюсь читать с помощью контроллера, который я объявил следующим образом:
[Controller]
[Route("[controller]")]
public class LogController : Controller
{
[Route("Read")]
public IActionResult ReadLog(string logPath)
{
if (System.IO.File.Exists(logPath))
{
string logContent = System.IO.File.ReadAllText(logPath);//exception appears here.
return Content(logContent);
}
else return NotFound();
}
}
Затем с помощью приведенного ниже примера запроса прочитайте журнал, записанный к пятнице, 13 марта 2020 года.
https://localhost:44323/Log/Read?logPath=Logs\log-20200313.txt