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。
NLog类库的使用探索——认识配置+实习小感悟的更多相关文章
- NLog类库使用探索——详解配置
1 配置文件的位置(Configuration file locations) 通过在启动的时候对一些常用目录的扫描,NLog会尝试使用找到的配置信息进行自动的自我配置. 1.1 单独的*.exe客户 ...
- NLog系列之NLong.config变量配置篇
$ {cached} - 将缓存应用于另一个布局输出. $ {db-null} - 为数据库渲染DbNull $ {exception} - 通过调用Logger方法之一提供的异常信息 $ {lev ...
- 实现AOP功能的封装与配置的小框架
内容 java基础巩固笔记 - 实现AOP功能的封装与配置的小框架 设计(目录): XXX = java.util.ArrayList中 代码 Advice接口 MyAdvice类 BeanFacto ...
- SpringBoot的浅浅配置和小整合
SpringBoot的浅浅配置和小整合 本文如题,就是浅浅记录一下学习的过程中一些过程,比较简单,并没有多少深度.谢谢! SpringBoot创建 从IDEA中新建项目或者模块.注意jdk版本,一般不 ...
- NLog类库使用探索——编程配置
以编程的方式配置,这是我项目中的,我都不知道为什么使用编程.直接配置不很好吗,估计他也没有研究.直接上步骤和代码: 创建一个LoggingConfiguration对象,用来保存配置信息 至少创建一个 ...
- ZK框架笔记2、ZK框架安装、相关类库、web及zk配置
1.先去ZK官网注册一个账号 2.在MyEclipse菜单栏中Help----Eclipse Marketplace中搜索ZK Studio,点击install安装即可 3.相关类库 ...
- Spring Boot源码探索——自动配置的内部实现
前面写了两篇文章 <Spring Boot自动配置的魔法是怎么实现的>和 <Spring Boot起步依赖:定制starter>,分别分析了Spring Boot的自动配置和起 ...
- 【大数据】Linux下Storm(0.9版本以上)的环境配置和小Demo
一.引言: 在storm发布到0.9.x以后,配置storm将会变得简单很多,也就是只需要配置zookeeper和storm即可,而不再需要配置zeromq和jzmq,由于网上面的storm配置绝大部 ...
- Putty 工具 保存配置的 小技巧
用Putty 已经很长时间了,但一直被一个问题困扰,有时候是懒得去弄,反正也不怎么碍事,今天小研究了下,把这个问题解决了,心里也舒服了. Putty是一个免费小巧的Win32平台下的telnet,rl ...
随机推荐
- Java多线程:AQS
在Java多线程:线程间通信之Lock中我们提到了ReentrantLock是API级别的实现,但是没有说明其具体实现原理.实际上,ReentrantLock的底层实现使用了AQS(AbstractQ ...
- aps.net手写验证模型的方法
/// <summary> /// 基础验证类 /// </summary> public class BaseValidator { /// <summary> ...
- 吴伯凡:VUCA时代的自我迭代
吴伯凡:VUCA时代的自我迭代 https://mp.weixin.qq.com/s?src=3×tamp=1506588223&ver=1&signature=nv ...
- dataGridView使用指南系列一、回车换行或换列完美解决方案
在使用datagridview控件时,默认按回车是跳转到下一行的当前列的,要想让按回车跳转到同一行的下一列该怎么做呢? 百度搜索了一下,大都是使用该控件的key_down事件和CellEndEdit进 ...
- autorelease' is unavailable
ARC forbids explicit message send of'release' 'release' is unavailable: not available inautomatic re ...
- 浅谈常用的几种web攻击方式
一.Dos攻击(Denial of Service attack) 是一种针对服务器的能够让服务器呈现静止状态的攻击方式.有时候也加服务停止攻击或拒绝服务攻击.其原理就是发送大量的合法请求到服务器,服 ...
- PEM文件
原文链接: http://blog.sina.com.cn/s/blog_489f88710100a59w.html OpenSSL 使用 PEM 文件格式存储证书和密钥.PEM 实质上是 Base6 ...
- 配置Windows Server 2008/2012/2016允许2个用户同时远程桌面
Windows Server 系列服务器默认情况下只能支持一个用户远程,如果第二个人远程上去之后会直接把前面一个登录用户踢掉.在日常工作中如果有多个人需要同时远程过去工作,会很不方面. 网上很多教程讲 ...
- [svc]rsync简单部署
安装rsync服务端-backup服务器 yum install rsync -y useradd rsync -s /sbin/nologin -M chown -R rsync.rsync /da ...
- Socket网络编程--简单Web服务器(4)
上一小节已经实现了对图片的传输,接下来就是判断文件是否为js,css,png等格式.我们增加一个函数用于判断格式 int WebServer::get_filetype(char *type,char ...