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。官方文档中这句算是最重要的了,通过它展示了如何应用到自己的项目中去。提供了两种方式:配置文件和后台编程都可以。

以上相关链接,给出了向文件,远程日志,数据库,邮箱等为目标的日志输出相关例子,用时查阅即可。下面结合项目实例,简单了解下最简单的使用过程。

3、项目实例

3.1 输出目标为控制台的小例子

   第一步:通过NetGet导入类库dll。

  第二步:打开配置文件NLog.config

第三步:定义导出目标和输出哪些信息

添加目标,并指定输出的布局,也就是说我们想把项目日志输出到哪里,输出的格式是什么?

<target xsi:type="Console" name="Conso"  
                        layout="${longdate} ${uppercase:${level}} ${message}" />

layout是固定格式,${}是语法格式,这里分别输出的信息分别为:时间,级别,信息

  第四步:定义输出规则

我们到底要输出哪些信息到日志文件中去,这就涉及到了记录等级的问题。

记录等级(log level)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:

  1. Trace - 最常见的记录信息,一般用于普通输出
  2. Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
  3. Info - 信息类型的消息
  4. Warn - 警告信息,一般用于比较重要的场合
  5. Error - 错误信息
  6. 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。

时间: 2024-11-03 22:43:08

NLog类库的使用探索(一)+实习小感悟的相关文章

NLog类库使用探索&mdash;&mdash;详解配置

1 配置文件的位置(Configuration file locations) 通过在启动的时候对一些常用目录的扫描,NLog会尝试使用找到的配置信息进行自动的自我配置. 1.1 单独的*.exe客户端 单独的客户端,NLog将在以下目录搜索配置信息: 标准的程序配置文件(通常为 程序名.exe.config) 程序目录下的程序名.exe.nlog文件 程序目录下的NLog.config文件 NLog.dll所在目录下的NLog.dll.nlog文件 (在Nlog没有导入GAC情况下) 1.2

加班的小感悟

今天趁着加班,上传文件上会外网. 不敢说什么涉密的东西,只是小小的感慨一下. 今天加班,说起来的原因,有三: 1 上周做的镜像,在没有确认的情况下,发给客户,导致客户在现在无法使用.这种错误,对于一个新人来说也是无法原谅的. 2 以前的旧功能替换,实属业务需求,恰逢尴尬时期. 3 BOSS分配的任务没有做完,卡在小问题上,无法解决.Eclipse插件透视图无法通信. 总结起来,有以下原因: 1 自己的技术,不到位,还需要锻炼. 2 不够细心,没有把做好东西,仔细检查. 3 考虑问题不够全面,总是

高校某项目上线小感悟

高校某项目上线第一天到今天正式告一段落,项目取得了成功,得到了学校的认可,各种小感悟集中记录一下吧. 1.小问题不要留到最后解决,留着留着就忘了,一旦发生问题就是很麻烦的事情. 2.项目应该预留充足的测试时间,数据测试不是简单的输入校验,还有业务逻辑校验. 3.数据库字段的长度不能随意设定,最好适当,宁要大,不要小. 4.如果你能事先预料到会发生的问题,那么请立即着手解决,因为它真的就会发生. 5.如果你能预感到客户遗漏的业务需求,你有义务告知客户,这种需求迟早是需要满足的,隐瞒客户不会给自己省

第一天实习的感悟

人生总是希望有不断地精彩和挑战,但是相对应的,作为人生旅途上的旅客,也要有应对不同挑战的勇气和能力. 交通工具的飞速发展使我们人与人之间,地区与地区之间的距离不断拉近.今天早上一觉醒来还是躺在自己躺了二十多年的床上,可下午一觉醒来,却站在一个陌生的地方,杭州. 曾经对自己说,有朝一日一定要踏上浪潮之巅,指点江山,激扬文字,学学老毛年轻时的气概.可当我踏上杭州这篇陌生的土地时,我心中的迷茫,彷徨,担心,甚至害怕,有谁能够体会.我也不知道能和谁说. 回到自己一个星期前就租好的房子,放下一身农民工似得

一些小感悟

这儿用来记录平时的想到或看到的一些小感悟 1.大丈夫行于天地之间,当能屈能伸,学会隐藏实力 这个是在职场中的感想.有时候工作环境并不那么顺心,但你有无法改变着环境,那么你只能委屈忍受,慢慢积攒实力,等待有一天需要你的时候,展现你的实力. 另外,也要学会隐藏实力,尤其在进入新环境不熟悉的情况下,否则可能招来嫉妒. 2.其实人要长大很简单 但要保持一颗享受万事万物的童心却很难. 3.成熟的尽头,是真实. 4.我就是你的大海. 4.只工作不玩耍,聪明的孩子也变傻.  这是4月6日晚上看<头号玩家>里

一点小感悟关于df lsblk fdisk命令关于三种存储

物理块与文件系统之间的关系图: 映射关系:扇区→物理块→逻辑块→文件系统 dfisk:物理块  lsblk:逻辑块  df:文件系统 分布式存储的应用场景根据其存储接口,即提供的访问接口,现在流行分为三种: tip:所谓数据存储的接口,就是数据传到哪里你就得接走去存,接走后,剩下的工作就是你做,由你落盘,至于从谁手里接,得看你打交道的对象的支撑.对象存储: 也就是通常意义的键值存储,其接口就是简单的GET.PUT.DEL和其他扩展,如七牛.又拍.Swift.S3.我认为是从应用层把数据接走,数据

NLog类库使用探索——编程配置

以编程的方式配置,这是我项目中的,我都不知道为什么使用编程.直接配置不很好吗,估计他也没有研究.直接上步骤和代码: 创建一个LoggingConfiguration对象,用来保存配置信息 至少创建一个输出目标对象 设置该输出目标对象的属性 设置LoggingRule对象,并将其添加到LoggingConfiguration对象的LoggingRules集合中 启用该LoggingConfiguration对象(将LogManager.Configuration设定为该LoggingConfigu

个人andriod实习小作品,个人联网笔记本

个人联网笔记本 个人信息:就读于燕大本科软件project专业 眼下大四; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:java ; 编程坏境:Windows 7 专业版 x64; 编程工具:jdk,eclipse,AVD; 制图工具:office 2010 powerpoint; 硬件信息:7G-3 笔记本; 引言 个人第一部联网andriod作品诞生,andriod生涯里程碑的出现. 主

2016-4-25 完美世界-实习--小萌的包裹

一开始看到这题就认为应该用dp做,先想到用二维,(表示处理到第i个物品时,前m个背包所能装的最大物品数)dp[m][i]=dp[m-1][i]+最后一个背包用来装第i个到n个物品所能获得的最大物品数,后面由于对0,1 背包不熟,加上这个dp方程思路都不怎么清晰,然后没写了. 后面自己又想用三维dp来做,写了个dp[i][m][v] 表示处理到第i个数时,前m个背包,最后一个容量为v时,所能装入的最大物品数.又因为最后一维只表示最后一个背包的状态,而前面一些背包的状态没考虑,所以又感觉不行.后面,