将 Serilog 与 MvvmCross 结合使用
Using Serilog with MvvmCross
我在 Setup.cs 文件中有这段代码
protected override MvxLogProviderType GetDefaultLogProviderType() =>
MvxLogProviderType.Serilog;
protected override IMvxLogProvider CreateLogProvider()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(config => config
.MinimumLevel.Verbose()
.WriteTo.File("C:\log.txt"))
.CreateLogger();
return base.CreateLogProvider();
}
在我的 ViewModel 中:private readonly IMvxLog _log 通过 IoC 初始化。
当我调用 _log.Error("Some error") 时,log.txt 文件中没有任何内容。
问题是记录器在您正在测试的 device/emulator/simulator 的上下文中写入。所以 C:\log.txt
意味着它正在尝试写入设备上的那个目录。
Android - 文件记录
对于 Android,您可以使用外部文件目录,因为它不需要运行时权限,并且可以通过文件浏览器或 adb 轻松访问。该位置类似于 <storage_root>\Android\data\<App_Name>\files
。
protected override IMvxLogProvider CreateLogProvider()
{
var externalFolder = Application.Context.GetExternalFilesDir(null).AbsolutePath;
var path = Path.Combine(externalFolder, "log.txt");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(config => config
.MinimumLevel.Verbose()
.WriteTo.File(path))
.CreateLogger();
return base.CreateLogProvider();
}
iOS - 文件记录
对于 iOS,您可以使用应用程序的 MyDocument 目录。然后,您可以通过模拟器访问 Mac 上的 log.txt
。该位置类似于 Library/Developer/CoreSimulator/Devices/<device_id>/data/Containers/Data/Application/<app_id>/Documents
。
protected override IMvxLogProvider CreateLogProvider()
{
var docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var path = Path.Combine(docFolder, "log.txt");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(config => config
.MinimumLevel.Verbose()
.WriteTo.File(path))
.CreateLogger();
return base.CreateLogProvider();
}
我在 Setup.cs 文件中有这段代码
protected override MvxLogProviderType GetDefaultLogProviderType() =>
MvxLogProviderType.Serilog;
protected override IMvxLogProvider CreateLogProvider()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(config => config
.MinimumLevel.Verbose()
.WriteTo.File("C:\log.txt"))
.CreateLogger();
return base.CreateLogProvider();
}
在我的 ViewModel 中:private readonly IMvxLog _log 通过 IoC 初始化。
当我调用 _log.Error("Some error") 时,log.txt 文件中没有任何内容。
问题是记录器在您正在测试的 device/emulator/simulator 的上下文中写入。所以 C:\log.txt
意味着它正在尝试写入设备上的那个目录。
Android - 文件记录
对于 Android,您可以使用外部文件目录,因为它不需要运行时权限,并且可以通过文件浏览器或 adb 轻松访问。该位置类似于 <storage_root>\Android\data\<App_Name>\files
。
protected override IMvxLogProvider CreateLogProvider()
{
var externalFolder = Application.Context.GetExternalFilesDir(null).AbsolutePath;
var path = Path.Combine(externalFolder, "log.txt");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(config => config
.MinimumLevel.Verbose()
.WriteTo.File(path))
.CreateLogger();
return base.CreateLogProvider();
}
iOS - 文件记录
对于 iOS,您可以使用应用程序的 MyDocument 目录。然后,您可以通过模拟器访问 Mac 上的 log.txt
。该位置类似于 Library/Developer/CoreSimulator/Devices/<device_id>/data/Containers/Data/Application/<app_id>/Documents
。
protected override IMvxLogProvider CreateLogProvider()
{
var docFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var path = Path.Combine(docFolder, "log.txt");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(config => config
.MinimumLevel.Verbose()
.WriteTo.File(path))
.CreateLogger();
return base.CreateLogProvider();
}