通过 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
所以我试图写一个 TextWriterTraceListener
到 Console.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();
}
我只想在我的 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
所以我试图写一个 TextWriterTraceListener
到 Console.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();
}