使用来自 UWP 应用程序的 .NET 标准 1.4 class 库的 Serilog 进行记录

Logging using Serilog from a .NET standard 1.4 class library from a UWP app

我在使用 .NET 标准 1.4 class 库时遇到问题,该库使用 Serilog 写入 json 文件。它运行没有错误,但不生成文件。

它在从 .NET 框架桌面应用程序调用的 .NET 框架 class 库中运行良好。当我将 UWP 应用程序与 UWP class 库一起使用时,我遇到了同样的问题。这是我的 class 库中的代码:

    public class OligoLog
    {
        public void Test()
        {
            Log.Logger = new LoggerConfiguration()
                .WriteTo.RollingFile(new CompactJsonFormatter(), @"C:\Test\log.json")
                .CreateLogger();

            Log.Information("This is a test");

            Log.CloseAndFlush();
        }
    }

建议?

正如@Lex Li 所指出的,UWP 应用程序无权访问设备上的所有文件。默认情况下,应用程序可以访问某些文件系统位置,例如应用程序安装目录或应用程序数据位置。更多信息,请参阅File access permissions

"C:\Test\log.json" 是您的应用无法直接访问的位置。在 UWP 中处理文件或文件夹时,一个重要的规则是 Skip the path: stick to the StorageFile. However, RollingFile method needs a path as the parameter. So you may store your logs into Application data locations. And LocalCacheFolder might be a good choice. Ref Using application folders:

LocalCacheFolderis under control of that app and is persistent across app sessions. LocalCacheFoldershould be used for generated content needed across app sessions, such as cached files, logs, or authentication tokens.

例如:

Log.Logger = new LoggerConfiguration()
     .WriteTo.RollingFile(new CompactJsonFormatter(), Windows.Storage.ApplicationData.Current.LocalCacheFolder.Path + @"\log-{Date}.json")
    .CreateLogger();

Log.Information("This is a test");