Mono MvvmCross Mvx.跟踪使用情况

Mono MvvmCross Mvx.跟踪使用情况,mono,xamarin.ios,xamarin.android,xamarin,mvvmcross,Mono,Xamarin.ios,Xamarin.android,Xamarin,Mvvmcross,我正在使用MvvmCross。 在库中,我看到了Mvx.Trace方法的用法,但没有输出到控制台/输出窗口。 如何使用它 p、 我已经设置了编译器常量Trace=true 谢谢。MvvmCross-DebugTrace都是通过IMvxTrace 每个平台都提供了这方面的不同实现: Windows平台使用Debug跟踪(因为trace本身在所有Windows平台上都不可用) Android使用双重日志,即Debug和Androidlog iOS使用了一个双重日志,即调试和iOS控制台 这在早期

我正在使用MvvmCross。 在库中,我看到了Mvx.Trace方法的用法,但没有输出到控制台/输出窗口。 如何使用它

p、 我已经设置了编译器常量Trace=true


谢谢。

MvvmCross-DebugTrace都是通过
IMvxTrace

每个平台都提供了这方面的不同实现:

  • Windows平台使用
    Debug
    跟踪(因为
    trace
    本身在所有Windows平台上都不可用)
  • Android使用双重日志,即
    Debug
    和Android
    log
  • iOS使用了一个双重日志,即
    调试
    和iOS
    控制台
这在早期版本的MvvmCross中效果很好,尤其是当人们直接链接到MvvmCross源代码,因此可以直接绑定到调试或发布的MvvmCross二进制文件时

然而。。。由于人们现在越来越多地使用Nuget的发行版二进制文件,其中
Debug
当然是编译出来的,因此人们经常会问“如何使用它?”

最简单的方法是覆盖
设置
类中IMvxTrace的初始化

这很容易做到,例如:

   protected override IMvxTrace CreateDebugTrace() { return new MyDebugTrace(); }
其中
MyDebugTrace
类似于:

public class MyDebugTrace : IMvxTrace
{
    public void Trace(MvxTraceLevel level, string tag, Func<string> message)
    {
        Debug.WriteLine(tag + ":" + level + ":" + message());
    }

    public void Trace(MvxTraceLevel level, string tag, string message)
    {
        Debug.WriteLine(tag + ":" + level + ":" + message);
    }

    public void Trace(MvxTraceLevel level, string tag, string message, params object[] args)
    {
        try
        {
            Debug.WriteLine(string.Format(tag + ":" + level + ":" + message, args));
        }
        catch (FormatException)
        {
            Trace(MvxTraceLevel.Error, tag, "Exception during trace of {0} {1} {2}", level, message);
        }
    }
}
公共类MyDebugTrace:IMvxTrace
{
公共无效跟踪(MvxTraceLevel级别、字符串标记、Func消息)
{
Debug.WriteLine(标记+”:“+level+”:“+message());
}
公共无效跟踪(MvxTraceLevel级别、字符串标记、字符串消息)
{
Debug.WriteLine(标记+“:“+级别+”:“+消息);
}
公共无效跟踪(MvxTraceLevel级别、字符串标记、字符串消息、参数对象[]args)
{
尝试
{
Debug.WriteLine(string.Format(tag+“:“+level+”:“+message,args));
}
捕获(格式化异常)
{
跟踪(MvxTraceLevel.Error,标记,{0}{1}{2}跟踪期间异常),级别,消息);
}
}
}

如果您想要包括调试/发布的不同实现;如果您想在运行时打开/关闭此选项;如果您想在
MvxTraceLevel
标记上进行筛选;或者,如果您想使用第三方日志引擎,那么在每个平台上使用简单的C#也应该很容易做到。

Stuart提供的当前解决方案在iOS上遇到了一个问题

使用
debug.WriteLine
在VS中使用MvxTrace运行调试会话可能非常慢,具体取决于应用程序日志记录的详细程度。同样适用于
Trace.writeline
。 改为使用控制台。WriteLine
(如MvvmCross
MvxDebugTrace
所做的那样)不受影响


有关“更多”详细信息,请参阅此Xamarin bug项目:

一如既往:Stuart提供的快速详细答案。谢谢Xamarin Android:不要查看标准VS输出窗口,而是查看\Other Windows\Android设备日志。您可以按mvx进行筛选,以仅查看您的应用程序跟踪。这已经过时了