Вход в файл в Blazor WASM

Я новичок в Blazor. Я хочу войти в файл на стороне клиента Blazor WASM. Я пробовал использовать serilog и serilog.sink.file. Но я не вижу никаких журналов, записанных в файл. Ошибок тоже не вижу. Это потому, что Blazor WASM работает в песочнице браузера, которая не может получить доступ к локальной файловой системе. Есть ли способ войти в файл из Blazor WASM.

Код, который я пытался настроить в Main:

      Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Is(logLevel)
            .WriteTo.File(path: @"C:\Users\abc\logs.log",
                          rollingInterval: RollingInterval.Day,
                          rollOnFileSizeLimit: true,
                          fileSizeLimitBytes: 10 * 1024 * 1024)                
            .CreateLogger();
 Log.Information("testing");

3 ответа

Невозможно напрямую записать Blazor WASM в файл. Потому что коды полностью запускаются в браузере. Вы также можете использовать другие приемники serilog, такие как консоль браузера или реле Blazor, которые предоставляют специальные возможности для Blazor.

Это все теоретически, но я не вижу причин, почему бы это не сработало...

Если вы хотите войти в файл, чтобы обеспечить постоянство сообщений журнала (возможно, вы выполняете какие-то действия по устранению неполадок?), тогда вы можете войти в файл . я используюдля этого это очень легко сделать на C#.

Обратите внимание, что каждая запись в localStorage имеет ограничение на длину, но похоже, что во многих современных браузерах это ограничение составляет не менее 5 МБ. Каков максимальный размер значений localStorage?

Итак, сначала вы должны создать своего собственного поставщика журналов, который записывает сообщения в запись. Я бы, вероятно, продолжил объединять сообщения журнала в одно и то жевход, иначе ситуация быстро выйдет из-под контроля. https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/logging?view=aspnetcore-7.0

Затем добавьте свой регистратор (в Program.cs для клиентского Blazor), примерно так:

      builder.Services.AddSingleton<ILoggerProvider, CustomLoggerProvider>(services => 
{ return new CustomLoggerProvider(); });

Затем введите и используйте, как обычно:

      [Inject] ILoggerProvider loggerProvider { get; set; }
. . .
ILogger logger = loggerProvider.CreateLogger( GetType().FullName );
. . .
logger.LogInformation("Your message here");

Если вы хотите записать свой журнал в файл на клиенте, вы можете войти в консоль, а затем запустить Chrome с возможностью перенаправления журналов:

--enable-logging=stderr --v=1 > log.txt 2>&1

Проще войти в консоль и использовать F12 в браузере для просмотра журналов. Я использую Microsoft.Logging.Extensions:

https://www.nuget.org/packages/Microsoft.Extensions.Logging

Затем я настраиваю в Program.cs с помощью:

                  builder.Services.AddLogging(builder => builder
                .SetMinimumLevel(LogLevel.Debug)
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
            );

Затем я ввожу и вызываю регистратор с:

              [Inject] protected ILogger<MyClassIamLoggingFrom> Logger { get; set; }

        Logger?.LogDebug("Fetching install data");
Другие вопросы по тегам