通过 Xamarin (UWP) 中的 TraceSource 进行日志记录

Logging via TraceSource in Xamarin (UWP)

我只想在我的 Xamarin 应用程序中使用标准 TraceSource 登录到控制台和日志文件,它将 运行 在 UWP 上,Mac OS X,iOS 和 Android。我在 UWP developing/debugging。

TraceSource、TraceListener 和 TextWriterTraceListener 确实在 .Net 标准库中都可用,所以也许我设置不正确?互联网上的大多数地方都坚持在 app.config 文件中设置跟踪侦听器,但这对 Xamarin 应用程序不适用也不可能。所以这是我的日志记录初始化代码,主要基于 Microsoft 文档中的示例:

        private void SetupLogging()
        {
            Trace.Listeners.Add(new TextWriterTraceListener(Console.Out, "consoleTraceListener"));
            string logFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Application.log");
            if (!File.Exists(logFilePath)) File.Create(logFilePath);

            var logFileTraceListener = new TextWriterTraceListener(logFilePath, "logFileTraceListener");
            Trace.Listeners.Add(logFileTraceListener);

            Trace.Write("Test");
            Trace.TraceInformation("Logging Initialized. Log file location: " + logFilePath);
            Trace.Flush();
        }

当我 运行 在 Xamarin UWP 应用程序中执行此操作时,创建了一个文件但未向其中写入任何内容,我也无法在程序的输出中找到任何内容(没有 ConsoleTraceListener所以我试图写一个 TextWriterTraceListenerConsole.Out)。有人可以为 Xamarin 提供一个工作示例吗? (我还没有尝试过 Android 或 iOS 应用程序;希望先在本地计算机上运行 UWP。)

问题是您向 TextWriterTraceListener 方法传递了错误的字符串参数。请尝试传递 Stream 参数。您可以直接使用以下代码。顺便说一句,你最好使用可以在uwp中成功访问的LocalApplicationData SpecialFolder。

private void SetupLogging()
{
    Trace.Listeners.Add(new TextWriterTraceListener(Console.Out, "consoleTraceListener"));
    string logFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Application.log");
    if (!File.Exists(logFilePath))
    {
        File.Create(logFilePath);
    }
    var logFileTraceListener = new TextWriterTraceListener(File.Open(logFilePath,FileMode.Open), "logFileTraceListener");
    Trace.Listeners.Add(logFileTraceListener);

    Trace.Write("Test");
    Trace.TraceInformation("Logging Initialized. Log file location: " + logFilePath);
    Trace.Flush();
}