在Xamarin.Android+;Visual Studio

在Xamarin.Android+;Visual Studio,android,xamarin.android,xamarin,visual-studio-debugging,Android,Xamarin.android,Xamarin,Visual Studio Debugging,对不起,我提出了一个蹩脚而简单的问题,但我没能找到答案。 每次我将内容打印到System.Diagnostics.Debug.WriteLine时,我的消息都会增加三倍: System.Diagnostics.Debug.WriteLine("test"); 输出: [0:] test [0:] test 10-22 19:57:13.981 I/mono-stdout( 1026): test 我坚持使用System.Diagnostic.Debug,因为我编写来自UI部分(monod

对不起,我提出了一个蹩脚而简单的问题,但我没能找到答案。 每次我将内容打印到System.Diagnostics.Debug.WriteLine时,我的消息都会增加三倍:

System.Diagnostics.Debug.WriteLine("test");
输出:

[0:]
test
[0:] test 
10-22 19:57:13.981 I/mono-stdout( 1026): test 
我坚持使用System.Diagnostic.Debug,因为我编写来自UI部分(monodroid)和业务逻辑(PCL)的消息

有没有办法降低Xamarin.Android的调试噪音水平


谢谢您的建议。

您可以改用
Android.Util.Log
,这会大大减少它的使用。它还有不同级别的日志记录,您可以在logcat中进行过滤

  • 信息:
    Log.Info()
  • 调试:
    Log.Debug()
  • 警告:
    Log.Warn()
  • 错误:
    Log.Error()
  • 详细:
    Log.Verbose()
另外还有一个
WriteLine
,它执行上述所有操作:

Log.WriteLine()

做你自己的小抽象。我们的项目中也存在同样的问题,这个小界面有助于:

public interface ILogger
{
    void Write(LogLevel level, String tag, String message);
}
然后,您有每个平台的记录器,例如:

public class AndroidLogger: ILogger
{
    public void Write(LogLevel level, string tag, string message)
    {
        Android.Util.Log.WriteLine(ConvertLogLevel(level), tag, message);
    }
}
您将记录器注入iOS/Android项目,甚至可以创建奇特的记录器,例如iOS的漂亮文件记录器:

#if DEBUG
LOG.AddLogger(new TouchFileLogger());
LOG.AddLogger(new ConsoleLogger());
#endif
LOG类是静态的,不需要知道实现,这就是为什么它可以在共享PCL库中轻松使用的原因


希望这会有所帮助,尽管您的问题现在可能已经解决;-)

如果我试图调试PCL库呢。没有Log&Anroid类,但它是monodroid执行上下文。在这种情况下,我将使用IoC进行一些构造函数注入。TinyIoC可以在这里工作,或者如果您使用的是MvvmCross,那么它是内置的。iOS记录器的外观如何
System.Console.WriteLine()
?简单的控制台记录器如下所示:Debug.WriteLine(级别+“”+消息);对于iOS中的持久日志记录,我们将日志保存到一个文件中。看看这个: