对于一个应用程序而言,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));
}
}
}

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

为了能够更方便的看清楚记录的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窗口下看到内容了。

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

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

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

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

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

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

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

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

除了在代码中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>

输出如下:

最新文章

  1. PHP运行及语句
  2. yum安装rz和sz
  3. the OS maintains a number of queues
  4. JAVA之多线程的创建
  5. nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache
  6. 分享一个安装PE到硬盘的软件
  7. Linux 文件权限总结
  8. MVC---Case 1
  9. 包子IT面试培训
  10. UI 响应者链
  11. Mac实用操作技巧(一)
  12. JAVA中String = null 与 String = &quot;&quot; 的区别
  13. 【Parallel】.Net 并行执行程序的使用心得
  14. CSS vertical-align属性详解
  15. The Little Prince-12/13
  16. linux报错jar包时出现“Exception in thread &quot;main&quot; java.lang.SecurityException: Invalid signature file digest for Manifest main attributes”
  17. HTML5 Canvas 小例子 简易画板
  18. Intel微处理器学习笔记(二) 三种模式
  19. 【BZOJ1915】[Usaco2010 Open]奶牛的跳格子游戏 DP+单调队列
  20. 洛谷 P1233 木棍加工 解题报告

热门文章

  1. 【Java EE 学习 54】【OA项目第一天】【SSH事务管理不能回滚问题解决】【struts2流程回顾】
  2. dbca建库sys用户被锁
  3. Linux deepin 下sublimes配置g++ openGL
  4. js 倒计时
  5. WM_COPYDATA实现的不同进程间通信
  6. Linux学习笔记(7)-进程
  7. 【MongoDB初识】-条件操作符
  8. 【转】CentOS上部署PPTP和L2TP over IPSec简要笔记
  9. 2016-2-1 Servlet细节
  10. XmlRpc.net 入参结构体嵌套的转义操作