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));
}
}
}
这种方式的有点是简单,快捷,很容易的就可以输出你所感兴趣的内容,可是缺点也很明显,就是当内容多的时候,看不清:
为了能够更方便的看清楚记录的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>
输出如下:
Logging with Debug And Trace (一)的更多相关文章
- java.lang.Exception: DEBUG STACK TRACE for PoolBackedDataSource.close().
java.lang.Exception: DEBUG STACK TRACE for PoolBackedDataSource.close(). java.lang.Exception: DEBUG ...
- 8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF.FATAL.ERROR.WARN.INFO.DEBUG.TRACE. ALL. ALL 最低等 ...
- C# Debug和Trace:输出调试信息
在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息.所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解 ...
- Debug与Trace工具类的应用
在写Console程序的时候,能够使用Console.WriteLine()来时时的输出程序的执行状态和各种參数此刻的信息.可是假设是Windows Form程序,我们要怎样实时的观測程序的执行状况呢 ...
- DEBUG STACK TRACE for PoolBackedDataSource.close().
我使用generator生成的代码,xml里面的内容没有覆盖重写,而是在下面直接追加,所以需要把以前的全部删除,然后在用generator生成.如果这个不能解决问题,就查查别人的问题.
- debug,trace,release项目配置区别
Debug模式是用来调试用的,它生成的执行文件中含有大量调试信息,所以很大: Release模式生成的执行文件消除了这些调试信息,可用来作为成品发布 Debug只在debug状态下会输出,Trace在 ...
- Trace、Debug和TraceSource的使用以及日志设计 .
[-] Trace 和 Debug区别 什么是Listeners 跟踪开关 使用BooleanSwitch开关 使用TraceSwitch开关 使用TraceSource代替Trace和Debug 设 ...
- C#学习笔记14——TRACE、DEBUG和TRACESOURCE的使用以及日志设计
Trace.Debug和TraceSource的使用以及日志设计 .NET Framework 命名空间 System.Diagnostics 包含用于跟踪执行流程的 Trace.Debug 和 ...
- C# 调试之 Debug.WriteLine()、Trace.WriteLine()
Trace 类 和 Debug 类的区别在于,Trace 类会同时在 Debug.Release 模式下起作用,而 Debug 只作用在 Debug 模式下. 区别: 1. 输出跟踪信息 Trace. ...
随机推荐
- Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its de
页面加载时出现这个错误: Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Cul ...
- ng1.3+表单验证<AngularJs>
前一篇文章说过,ng1.3+以后对于表单验证有了优化,它不再需要一个详细的表达式状态创建元素显示或隐藏. 例如:我们在ng1.3之前的版本都需要如下写法: <div class="er ...
- git 用不同的邮箱配置不同的ssh
首先,介绍一下配置背景: 1.有两个邮箱A@mail.com , B@mail.com 2.两个git账号,一个公司gitlab上的A@mail ,另一个github上的B@mail 3. 目标:提 ...
- FMDB 排它锁
-------------------------------------基本操作------------------------------------- #import "ViewCon ...
- PHP unset()函数销毁变量 但没有实现释放内存
<?PHP $a = "hello";$b = &$a;unset( $b );echo $a; // 输出 helloecho $b; // 报错$b = &quo ...
- 闲来无事,写个基于UDP协议的Socket通讯Demo
项目一期已经做完,二期需求还没定稿,所以最近比较闲. 上一篇写的是TCP协议,今天写一下UDP协议.TCP是有连接协议,所以发送和接收消息前客户端和服务端需要建立连接:UDP是无连接协议,所以发送消息 ...
- echo.js 延迟加载图片控件
echo.js的github地址:https://github.com/toddmotto/echo echo是一个独立的JavaScript.轻量级的.延迟图片加载插件,echo压缩后体积不到1 ...
- 【UISegmentedControl】- 分段控件
一.初始化 二.常见的属性 1.segmentedControlStyle属性:设置基本的样式 2.momentary属性:设置在点击后是否恢复原样 . 3.numberOfSegments属性:只读 ...
- [Android] Shape背景制作半圆或半边框
实现原理使用layer-list对shape进行叠加显示. 直接上代码: <layer-list xmlns:android="http://schemas.android.com/a ...
- 转载——CSS3 Object-fit和Object-position
在响应式设计(RWD)中,令大家最头痛的问题的是图片的自适应处理问题.往往我采取的处理方式是给图片的容器设置一个尺寸,然后给图片设置下面的代码: img { max-width: 100%; heig ...