2013-06-21 32 views
7

我正在使用MvvmCross。 在庫中我看到使用Mvx.Trace方法,但沒有輸出到控制檯/輸出窗口。 如何使用它?MvvmCross Mvx.Trace用法

p.s.我已經設置了編譯器常量Trace = true

謝謝。

回答

21

MvvmCross debugTrace的是通過一個單獨的實施IMvxTrace

所有路由每個平臺提供的這種不同的實現:

  • 在Windows平臺上使用Debug跟蹤(因爲Trace本身並不適用於所有在Windows平臺)
  • Android使用Debug和Android的雙重日誌log
  • iOS版採用了雙日誌都Debug和iOS版的Console

這在早期版本的MvvmCross的,尤其是當人們直接鏈接到MvvmCross源代碼,所以可以直接綁定到任何調試或釋放MvvmCross運作良好二進制文件。

但是......因爲人們現在越來越多地使用Nuget的發行版二進制文件 - 其中Debug當然是編譯出來的,那麼這經常會讓人們問「如何使用它?」

最簡單的方法是在Setup類中覆蓋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); 
     } 
    } 
} 

如果你想包括調試/釋放不同的實現;如果你想在運行時打開/關閉這個功能;如果您想過濾MvxTraceLeveltag;或者如果你想使用一些第三方日誌記錄引擎,那麼在每個平臺上使用簡單的C#應該也很容易。

+0

像往常一樣。謝謝! –

+4

Xamarin Android:而不是看標準的VS輸出窗口 轉到查看\其他Windows \ Android設備日誌記錄。 您可以通過mvx進行過濾,以僅查看您的應用跟蹤。 http://docs.xamarin。COM /引導/安卓/部署,_testing,_and_metrics/android_debug_log –

4

只需用Stuart提供的當前解決方案解決iOS問題。

使用Debug.WriteLine在VS中使用MvxTrace運行調試會話可能會非常緩慢,具體取決於應用程序日誌記錄的詳細程度。 Trace.WriteLinte。 改爲使用Console.WriteLine(如MvvmCross MvxDebugTrace一樣),這不會影響。

參見「更多」細節此Xamarin錯誤項:從斯圖爾特快速,詳細的解答:https://bugzilla.xamarin.com/show_bug.cgi?id=13538#c4