Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器
一、介绍
TracerX logger是一个易于上手,且拥有众多高级特性的.NET日志框架.
它能够发送输出结果到多目的地(循环文件、事件日志等....).它也能生成文本和二进制文件.
它拥有一个强大的查看器,该查看器支持过滤、着色、多线程、目录结构、跟踪级别.....
同时它也能够折叠及扩展输出格式,可以显示绝对或者先对的时间戳.可以查看任意一行的输出调用栈.这些特性可以更加容易地帮助我们诊断程序问题.
该文主要介绍如何使用该框架,其中包含了许多代码示例.同时告诉大家,该框架用于了诸多商业软件中.
二、日志查看器
如下诸多特性可以通过菜单查看(有些需要通过双击查看),不要忘记试试在每行或者列头使用一下右键.
1.可以通过线程名、线程ID、跟踪级别、文本通配符、以及方法名来过滤或者着色;
2.消息的文本会通过其调用深度缩进;
3.你可以通过双击每行的+-折叠或者展开方法调用;
4. 你可以通过使用面包屑栏或者鼠标右键浏览和查看堆栈.
5.你可以单击在面包屑上的箭头来查看给定级别的方法调用.
6.你能够查看绝对或者相对的时间戳.
7.你可以折叠或者展开每行(其中包含了嵌入式换行符)
8.你可以给每行加一个书签(可能改行航油特殊的搜索字符串,也可能选中的线程或日志级别)
9.你可以查看调用堆栈(这些堆栈指向选中的行)
10.你可以从同一个线程或不同线程跳到下一个区域
11.你可以选中数据行或者复制列文本到粘贴板;
12.可以自定义列的显示
其他的大家子去发现吧.
三、咱们来一个helloworld
using TracerX; namespace HelloWorld
{
class Program
{
// 这个大家应该懂的.
static Logger Log = Logger.GetLogger("Program"); static void Main(string[] args)
{
// 采用默认配置
Logger.DefaultBinaryFile.Open(); // 日志输出一个字符串
Log.Info("Hello, World!");
}
}
}
看看日志查看器的效果

对于初始化
public static Logger GetLogger(string name)
public static Logger GetLogger(Type type)
public static Logger GetLogger(string name, AppDomain appDomain)
四、来一个复杂点的例子
using System;
using System.Threading;
using System.IO;
using TracerX; namespace Sample
{
class Program
{
private static readonly Logger Log = Logger.GetLogger("Program"); // Just one way to initialize TracerX early.
private static bool LogFileOpened = InitLogging(); // Initialize the TracerX logging system.
private static bool InitLogging()
{
// It's best to name most threads.
Thread.CurrentThread.Name = "MainThread"; // Load TracerX configuration from an XML file.
Logger.Xml.Configure("TracerX.xml"); // Open the log file.
return Logger.DefaultBinaryFile.Open();
} static void Main(string[] args)
{
using (Log.InfoCall())
{
Helper.Bar();
Helper.Foo();
}
}
} class Helper {
private static readonly Logger Log = Logger.GetLogger("Helper"); public static void Foo()
{
using (Log.DebugCall())
{
Log.Debug(DateTime.Now, " is the current time.");
Bar();
}
} public static void Bar()
{
using (Log.DebugCall())
{
Log.Debug("This object's type is ", typeof(Helper));
}
}
}
}
五、输出格式
| 格式 | Logger 属性 | 初始化的值 | 其他继承类的初始化值 |
| Binary file | BinaryFileTraceLevel |
TraceLevel.Info |
TraceLevel.Inherited |
| Text file | TextFileTraceLevel |
TraceLevel.Off |
TraceLevel.Inherited |
| Console (i.e., command window) | ConsoleTraceLevel |
TraceLevel.Off |
TraceLevel.Inherited |
| Trace.WriteLine() | DebugTraceLevel |
TraceLevel.Off |
TraceLevel.Inherited |
| Event log | EventLogTraceLevel |
TraceLevel.Off |
TraceLevel.Inherited |
| Event handler | EventHandlerTraceLevel |
TraceLevel.Off |
TraceLevel.Inherited |
六、更多
http://tracerx.codeplex.com/releases/view/55264
七、下载demo及源代码
Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器的更多相关文章
- SLF4J其实只是一个门面服务而已,他并不是真正的日志框架,真正的日志的输出相关的实现还是要依赖Log4j、logback等日志框架的。
小结: 1.加层: 每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性. 为了解决这个问题,就是在日志框架和应用程序之间架设一个 ...
- 使用FormatMessage函数编写一个内核错误码查看器
在编写驱动程序的时候,常用的一个结构是NTSTATUS,它来表示操作是否成功,但是对于失败的情况它的返回码过多,不可能记住所有的情况,应用层有一个GetLastError函数,根据这个函数的返回值可以 ...
- 什么?让每一个开源项目更安全?啊?还有IDE工具?难道是它?
背景 入编程界6年来,大大小小的安全漏洞是真滴听了不少,xxx通过日志入侵了,xxxx通过请求入侵了,等等等等. 近期fastJson又报安全漏洞,敢巧自己又"被"跳槽到了新公司, ...
- 推荐一个比HtmlWebpackPlugin更灵活的插件
插件:html-res-webpack-plugin https://github.com/lcxfs1991/html-res-webpack-plugin/blob/v3/README_ZH.md ...
- [.Net MVC] 使用 log4net 日志框架
项目:后台管理平台 意义:项目开发中提出增加日志功能,对关键的操作.程序运行中的错误信息进行记录,这对程序部署后的调试有很大意义. 注:本文只是对网上搜集的信息进行了整合,以备今后查询. 关键字:.N ...
- 一个简单好用的日志框架NLog
之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog. 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4n ...
- 收藏收藏:时隔一年,你关注的打造一个实用的TXT文本操作及日志框架,我们开源了,不再为程序写日志发愁(也支持.net core哦)
记得做这个框架是在2018年刚接触.net core的时候,那个时候为了能够专心的研究我开始不写博客了,但是学有所成并在公司运用了近一年的时间了,决定回来和各位分享我们所掌握的那星星点点的知识,希望可 ...
- 如何创建一个简单的C++同步锁框架(译)
翻译自codeproject上面的一篇文章,题目是:如何创建一个简单的c++同步锁框架 目录 介绍 背景 临界区 & 互斥 & 信号 临界区 互斥 信号 更多信息 建立锁框架的目的 B ...
- 基于jQuery的一个简单的图片查看器
项目中自己diy了一个图片查看器.因为初始代码不是自己的,只是在上面改了一下也没有弄的很漂亮.等以后有时间了在重写一下样式和封装,作为备用的只是积累吧.如果有童鞋有用到,完全可以在此基础上改,比较容易 ...
随机推荐
- monodb C#接口封装
mongodb的C#封装,驱动是samus/mongodb-csharp 1.连接类 using MongoDB; using MongoDB.Linq; namespace DBModel { pu ...
- XHEditor(MVC4+DWZ) 部分问题的解决
百度上下载了xheditor1.2.1 一.使用方法: 1.把解压的目录copy到VS中; 2.在需要用的View页面中引用js <script src="~/xheditor/xhe ...
- 关于"是否需要有代码规范"的个人看法
这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规范和原则. 规范不能强求一律,应该允许很多例外. 我擅长制定编码规范,你们听我的 ...
- web前端职业规划(转)
关于一个WEB前端的职业规划,其实是有各种的答案,没有哪种答案是完全正确的,全凭自己的选择,只要是自己选定了, 坚持去认真走,就好.在这里,我只是简要说一下自己对于这块儿内容的理解.有一个观点想要分享 ...
- 那些VisualStudio隐藏的调试功能
VisualStudio是一个强大的调试工具,里面很多隐藏功能少有人问津,但是在特定场景可以节省你很多时间,本文主要介绍一些VisualStudio调试相关的隐藏功能,欢迎大家补充. 运行到指针(Ru ...
- Java提高篇(二八)------TreeSet
与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap>中LZ详细讲解了TreeMap实现机制,如果 ...
- js模版引擎handlebars.js实用教程——with-终极this应用
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
- WAMPServer 默认安装启动后,图标显示橙黄色
说明:我是在家的电脑上面学习的WAMPServer的,而家的电脑很干净.这次来学校以后,实验室的电脑被我经常的折磨,今天在安装以后,启动后,发现图标有红色到黄色,就停止了.其实,问题的根源很简单,某个 ...
- Vuejs注意点
1.多级联动的时候,前一级变的时候,首先要把后面级的内容清空,要不然用户可能把前一次后面级的选择和新的前一级的选择提交(即后边级的列表渲染出来了,单但用户没有选择,此时vue绑定的是上一次的数据). ...
- AutoMapper的简单使用
接触AutoMapper已经有两年多的时间了,在ORM框架中,它使持久层对象与DTO对象之间的转换变得相当简单. 随着负责的项目的增多,使用的技术框架一多起来,很多具体的技术点难免记不清, 加上同时兼 ...