• Logging with Debug And Trace (一)


    对于一个应用程序而言,Log 必不可少.

    在.net 里面,最简单的方式就是用Console 来输出 信息了,例如下面的例子:

        public class Program
        {
            public static void Main(string[] args)
            {
                One();
                Two();
                RecursiveTest(0, 5);
                Console.ReadLine();
            }
            private static void One()
            {
                Console.WriteLine("One");
            }
            private static int Two()
            {
                Console.WriteLine("Return 2");
                return 2;
            }
            private static void RecursiveTest(int from, int to)
            {
                if (from < to)
                {
                    Console.WriteLine(string.Format("{0} Enter Recursive Test:{1}", string.Join("", Enumerable.Repeat(" ", from)), from));
                    RecursiveTest(from + 1, to);
                    Console.WriteLine(string.Format("{0} Exit  Recursive Test:{1}", string.Join("", Enumerable.Repeat(" ", from)), from));
                }
            }
        }

    clipboard

    这种方式的有点是简单,快捷,很容易的就可以输出你所感兴趣的内容,可是缺点也很明显,就是当内容多的时候,看不清:

    clipboard[1]

    为了能够更方便的看清楚记录的Log 内容,有一种简单的方式: 把Console 替换成 Debug。

    public class Program
    {
    
      public static void Main(string[] args)
      {
       One();
       Two();
       RecursiveTest(0, 500);
       Console.ReadLine();
      }
      private static void One()
      {
       Debug.WriteLine("One");
      }
      private static int Two()
      {
       Debug.WriteLine("Return 2");
       return 2;
      }
      private static void RecursiveTest(int from,int to)
      {
       if (from < to)
       {
        Debug.WriteLine(string.Format("{0} Enter Recursive Test:{1}", string.Join("", Enumerable.Repeat(" ", from)), from));
        RecursiveTest(from + 1, to);
        Debug.WriteLine(string.Format("{0} Exit  Recursive Test:{1}", string.Join("", Enumerable.Repeat(" ", from)), from));
       }
      }
    }

    然后就可以在Output窗口下看到内容了。

    clipboard[2]

    Debug 的代码在release 模式下并不会真正的执行,这得益于条件编译,如果要在release 模式下也记录日志的话,那么可以使用Trace。

    Trace 还提供了多种方法,可以记录Information,Error 等。

    可能你已经注意到了把 Console 切换到Debug 后,控制台反而没有输出消息了。

    clipboard[3]

    这是因为Debug 的默认输出是Output 窗口,如果想要在控制台上显示的话,应该把 控制台添加到Debug 的输出中去,例如:

     public static void Main(string[] args)
      {
       Debug.Listeners.Add(new ConsoleTraceListener(true));
       One();
       Two();
       RecursiveTest(0, 5);
       Console.ReadLine();
      }

    clipboard[4]

    事实上,你除了添加ConsoleTraceListener,你还可以添加下面几种Listener。

    clipboard[5]

    clipboard[6]

    例如,我想要把日志输出到EventLog 里面去:

    Debug.Listeners.Add(new EventLogTraceListener("DebugAndTrace"));

    clipboard[7]

    除了在代码中Hard code 代码之外,还可以使用Config 文件。

    <?xml version="1.0" encoding="utf-8" ?>
    
    <configuration>
        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
      <system.diagnostics>
        <trace autoflush="true" indentsize="4">
    
         <listeners>
          <add name="console" type="System.Diagnostics.ConsoleTraceListener" />
          <add name="fileListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextWriterOutput.log" />
         </listeners>
        </trace>
      </system.diagnostics>
    </configuration>

    输出如下:

    clipboard[8]

  • 相关阅读:
    Netty之ProtoBuf(六)
    Netty对WebSocket的支持(五)
    Netty之心跳检测技术(四)
    Netty之多用户的聊天室(三)
    Docker Compose 笔记
    vue.js学习笔记
    powerdesigner 生成C#code 实体 模板设备
    .net 接收post 的参数 加载xml
    powerdesigner 生成实体代码 附加生成xml
    PostgreSql 获取所有的表、视图、字段、 主键
  • 原文地址:https://www.cnblogs.com/LoveJenny/p/LoggingWithDebugAndTrace.html
Copyright © 2020-2023  润新知