博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【框架学习与探究之日志组件--Log4Net与NLog】
阅读量:5123 次
发布时间:2019-06-13

本文共 4146 字,大约阅读时间需要 13 分钟。

前言

本文欢迎转载,作者原创地址:


近日,天气渐冷,懒惰的脑虫又开始作祟了,导致近日内功修炼迟迟未能进步,依然徘徊在XXX框架学习当中,当然了并不是说这种学习不好,只是感觉收益不高,但是今天博主依然还是老酒新装,把在单体应用架构当中对于Log这块使用最平凡的两款日志组件拿来说道一二,也是对后面框架集成做好铺垫的准备....其实也算是对框架学习系列的一个凑数行为,捂脸.....


抛出问题和思考

按照国际惯例,这里还是给出各自的官方地址,Log4net: , Nlog :,这里博主可能就不会去一一解释各种组件当中的重要元素、关键类以及使用API和关于Provider的配置了,这里着重还是博主自己工作或者项目当中常规使用到的一些东西备份记录,所以想看详细解读的同学,可以移步去官方链接或者搜索园中其他相关文,所以老司机就可能需要绕道儿了....其实就目前项目使用log组件程度而言,多半是用来记录应用程序日志的,且大多数是以文本的方式(也就是txt、log)来记录日志,方便在程序上线之后免于远程调试以及不好跟踪的问题,那么问题来了,应用程序大家也知道日积月累的产生的日志量,肯定是很多的,那么为了方便我们好去跟踪问题,应该怎么样去分类存储日志文件方便开发者追溯问题!!!多说一句,当我们的API服务成百上千,我们的应用程序或者系统几十上百,那么这个时候我们的日志还处于单体应用体系的话,一条完整的服务调用连的日志跟踪就是一个大麻烦,亦或者需要统筹各自应用的异常行为和错误数据等等,所以当我们的形态达到一定规模之后,我们需要的就是分布式日志处理分析的平台,关键词:ELK 请自行搜索,感叹社区轮子的威力,不过那都是后话了.....


Log4net处理方案

这里我们按照上面的需求和限定范围得知,log4net 日志框架组件历史由来已久且在使用性和或灵活性上面都颇为好评,众所周知我们的日志等级分为: DEBUG、INFO、WARN、ERROR、FATAL,日志等级由低到高的一个过程,所以这个等级分类也是我们需要参考的一个点,其次就是需要按照年份、月份来划分文件夹,最后才是以日期作为文件名,log作为文件后缀名(txt一样),按照如上所说需要配置的 log4net.config 配置如下:

上面的配置楼主已经亲测可以是使用了,且已经按照我们的需求按照日志等级(这里是通过logger对应的filter来控制的)、年份、月份、日期这个要点分类存储了日志文件,且不同等级的日志文件存储在对应等级的文件夹下面,配置文件当中有较为详细的说明可以参考自己的需求自定义配置,例如修改为自己的layout展示效果等等,文件存储效果如下图:

791374-20171108204228169-491764565.png
791374-20171108204317075-113872770.png
从上图就可以看出基本满足了我们日常单体应用开发的需求了......这里贴出文件配置也是博主借此备份一下,日后好找....至于说怎么使用、异步还是同步那就看各位同学自己把握和封装了....,如果哪位老铁有更好的方式可以告知一二!!!


NLog处理方案

需求还是同上逻辑,且我们使用NLog依然还是以file作为基础实现配置,话不多说Nlog.config 完整配置如下:

注意这里的 nlog.config 配置想比较与log4net.config就简单许多,且通过wapper的方式就可以支持异步写入文件,注意这里需要自定义 variable 来达到以年份、月份建立对应文件夹存储日期命名的日志文件,因为这里 nlog 本身木有提供 ${year} 这种类似参数,所以需要自定义配置使用,还好 nlog 考虑到了这方面的灵活性,效果图参考如下:和log4net效果一致.....且对应日志等级的文件写入对应的等级文件夹中,至于更多的配置参考官方或者github wiki 吧

791374-20171108215605294-349959560.png


小总结

虽然这两个日志框架,我相信大多人都在使用且也知道一些组织结构或者调用API等等,所以博主这里算是“翻旧账”的行为了,主要是还是对常规日志文件存储的一个备份配置的小文章,途中也查询了相关资料,其实还有很多例如 layout 以及 header + footer 的消息美化,亦或者实现数据库,nosql存储日志等等,都看各自的需求,当然我们在使用日志组件的时候肯定是集成在系统中去使用的,那么何时我们用静态工具类LogHelper的方式还是ILog接口注入的方式呐,相信大家都有各自的理解视情况而定的吧......

转载于:https://www.cnblogs.com/DjlNet/p/7604340.html

你可能感兴趣的文章
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>
移动开发平台-应用之星app制作教程
查看>>
leetcode 459. 重复的子字符串(Repeated Substring Pattern)
查看>>
永远的动漫,梦想在,就有远方
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
【BZOJ1565】 植物大战僵尸
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>