NLog类库的使用探索——认识配置+实习小感悟
1 写在前面
1.1 为什么学了软件
1、高考失败,分数不高,不能随心所欲
2、农村孩子,学点技术,将来有口饭吃
3、有科技含量,想玩电脑(那个时候是这么想的,那个时候觉得学计算机就是玩电脑)
1.2 为什么选了C#
1、大一大二学了c,C++,大三分方向NET和JAVA,觉得C,C++,C#看着好看,读者顺,就选了。
2、大多数学习好点的学了JAVA,不想跟风选了C#
1.3 选择决定命运
本科时候winform,asp.net,WindowsPhone各学了半年,学的最好的还算是WP,只能说懂了一点点。有了点C#基础,对项目什么基本没做什么,除了一些管理系统。从此就稀里糊涂走上了NET平台。偶然机会读了个研究生也就没机会找工作,其实我个人觉得读研用处不大,不过研究生遇到了一群好朋友还是挺感恩的。研究生期间打了一年英雄联盟,因为之前没打过游戏,就疯狂玩了一年。然后就是找实习,可是我也就有点NET的经验,所以只能拿这个找实习了。但我总觉得NET不受人欢迎,前途堪忧,至今如此这么认为。其实也有java相关职位,但我底气不足,在学校也就没签。
1.4 说说帝都实习的感悟
2014年7月1日无奈来到帝都找实习,其实我一点也不想来,但想了想为了挣点学费就来了。这里有本科的同学,有几个好朋友正好工作一年,所以我来也没受什么罪。没有被骗,没有因为住处费尽心思。就在朋友那住着,后来走了,不过那是后话。我自己从学校走的时候打了20份简历,想着20份投出去后如果还没有找到就直接做商务或者销售算了。自己简历上都是WP,Silverlight的相关经验。就直接投的是WP职位,感觉自己做什么都无所谓,工资别太寒碜就行。安卓和IOS也投了,虽然没经验没基础,我感觉学会应该也不难。主要投的是WP职位,C#工程师职位这两个职位。面试电话平均每天两个,大部分都是中小公司,甚至还有十个以下的公司。但是只要给我打电话了,无论多远我都去面试和多不想去,觉得这是一份尊重吧。面试过程就不说了,越小的公司越给你搞得想死的感觉,觉得你没经验等等。大点的公司到是对人挺尊重的,给人一种温暖的感觉。都是程序员,相煎何太急!!
找工作期间,挤地铁,挤公交,心里总是沉沉的,觉得帝都一点也没有给我带来兴奋的感觉。这就是幸福感不行吧。扯远了。拿着一点WP的经验和对编程的热情,有时候热情还真能当饭吃。一周面试了八家,一共三个offer。其中两个都是五千以下的,WP职位。工资低的原因告诉我说,因为你没毕业证,不能按照你的理想薪资来。我其实蛮想做移动开发的。但是这工资在北京太寒碜。第三个offer是C#工程师,工资高点,办公环境好点。但是缺点是没人带,就一个C#工程师,主要职责是WPF,WindowsPhone,Windows8。。。。。说白了,只要是与NET相关的都是你的。为了给父母减轻负担,我还是选择了工资好点的,虽然感觉对自己发展有点不好。不知道选择是否正确,各位看官怎么看?这一学估计以后就是NET,毕业想换方向就难了。没人带,遇到问题自己解决,没人讨论,没人说话,这种日子,哎,安静!!!不管怎么说毕竟是第一份工作,毕竟是”初恋“,我也就尽心尽力,生怕对不住公司给发的工资。一个月学了学WPF觉得难点对我来说是界面(呵呵,公司没有会Blend的设计师,没办法,自己有没有艺术细胞)。现在没什么项目任务,索性就研究下公司现有成熟项目的源码,也再温习一下WPF知识。学习过程中遇到没用过的就仔细研究研究,我想这样成长是不是更快点。有什么建议希望看官也能给我提提。有时候一直在徘徊,编程这条路还能走多久?毕业后要不要继续走这条路?这也许真的很难回答。
下面是今天看公司源码涉及到写日志的问题,项目用了一个NLog的类库,以前没用过,就学习了下。没兴趣的跳过得了,没看过的可以了解下。
2 进入正题
2.1 定义
官方定义:NLog is a free logging platform for .NET, Silverlight and Windows Phone with rich log routing and management capabilities. It makes it easy to produce and manage high-quality logs for your application regardless of its size or complexity. 简单的来说NLog就是一个开源的日志管理平台,支持.net,Silverlight,Windows Phone。有着丰富的路由和管理功能。能够很容易的生成和管理你的项目日志。
NLog is an open source project hosted on GitHub and source code is available under the terms of BSD license. //在GitHub可以下到源码,源码是基于BSD License的
Binary packages are available via NuGet. //可以通过NuGet将类库直接导入到项目中去
验的“新生”来说。苦逼的是
2.2 NLog的特性
简单的来说NLog能够导出基于.NET语言的(C#,VB)所有的诊断信息。通过数据上下文(contextual information,包含了发生时间,线程,进程,严重程度等)来格式化你想要导出的信息,打出到哪里呢?Nlog提供了导出目标(targets 文本、数据库、Email、控制台等)
2.3 配置实用
very easy to configure, both through configuration file and programmatically。官方文档中这句算是最重要的了,通过它展示了如何应用到自己的项目中去。提供了两种方式:配置文件和后台编程都可以。
- Files - single file or multiple, with automatic file naming and archival
- Event Log - local or remote
- Database - store your logs in databases supported by .NET
- Network - using TCP, UDP, SOAP, MSMQ protocols
- Command-line console - including color coding of messages
- E-mail - you can receive emails whenever application errors occur
以上相关链接,给出了向文件,远程日志,数据库,邮箱等为目标的日志输出相关例子,用时查阅即可。下面结合项目实例,简单了解下最简单的使用过程。
3、项目实例
3.1 输出目标为控制台的小例子
第一步:通过NetGet导入类库dll。
第二步:打开配置文件NLog.config
第三步:定义导出目标和输出哪些信息
添加目标,并指定输出的布局,也就是说我们想把项目日志输出到哪里,输出的格式是什么?
<target xsi:type="Console" name="Conso"
layout="${longdate} ${uppercase:${level}} ${message}" />
layout是固定格式,${}是语法格式,这里分别输出的信息分别为:时间,级别,信息
第四步:定义输出规则
我们到底要输出哪些信息到日志文件中去,这就涉及到了记录等级的问题。
记录等级(log level)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:
- Trace - 最常见的记录信息,一般用于普通输出
- Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
- Info - 信息类型的消息
- Warn - 警告信息,一般用于比较重要的场合
- Error - 错误信息
- Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
这个小例子,我们把输出等级设为等级等于或高于Debug等级的信息输出至控制台
<logger name="*" minlevel="Debug" writeTo="Conso"></logger> 这句话很明了但需要说明的是write to属性应该是target的名字。意思是写到输出目标里面。
第五步:创建logger对像,若希望生成并输出诊断信息,我们还需要添加一个Logger对象。Logger对象的方法名和记录等级的名称一样(Debug()、Info()、Fatal()……)。Logger对象是通过LogManager对象创建的。建议Logger对象的名称和程序的类名保持一致。调用LogManager的GetCurrentClassLogger()方法即可自动为当前类创建一个Logger对象。后台代码如下:
using NLog; namespace WpfApplication4 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public static Logger mainwindowLogger = LogManager.GetCurrentClassLogger();//该Logger对象代表与当前类相关联的日志消息的来源。 public MainWindow() { InitializeComponent(); mainwindowLogger.Debug("模拟一条Debug级别的信息");//发出一条Debug记录等级的诊断信息。 } } }
通过以上几步,应该基本了解了Nlog的工作流程。配置文件中配置输出目标,要输出哪些诊断信息(layout),并定义输出规则,什么等级的信息输出。应用程序后台代码中使用logger对象定义输出的诊断信息。
3.2 进一步的扩展这个例子
我们新增加一个需求,如果同时输出到一个文件呢?该如何做?这也不难,需要修改配置文件就行。添加一个target即可。
两幅图已经很说明问题,不再详细描述。
4、小结
零零散散写了个简单的例子,只供像我这种入门级别的人看看罢了,下一篇,继续深入探讨NLog。