博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

logging日志从开始到放弃

Posted on 2020-05-01 15:06  老鼠蟒蛇  阅读(278)  评论(0编辑  收藏  举报

logging日志从开始到放弃

以下内容为个人理解所得,如要转载,请标明出处:

 

之前写过一个python的日志,写的不是很完美,当时花了一两天的时间就写完了,没有太多的去优化,就去做其他事情了,现在回过头打算优化一下,就从网上看了看资料。先吐槽一下现在网上的技术文章,鱼龙混杂,千篇一律,最恐怖的是我看了10篇根据logging等级分开存储日志的技术文章,6篇都一模一样,一个字都懒的改的。我就特别好奇,他们是不是莫得凯撒的弟弟莫得感情。

 

下面我会给大家仔细讲解以下关于logging的各种问题(我所遇到的),如果你是第一次接触日志,以前只是听过,我建议你可以花一到两个小时看一下这篇文档:https://wenku.baidu.com/view/9c07c86682d049649b6648d7c1c708a1284a0aa8.html

 

一,为什么去写日志?

人的眼睛是用来看东西的,你在写代码的时候,什么是你的眼睛呢?

调试工具与日志,如果你的眼睛不好使,肯定会掉到坑里。如果瞎了,那么花点时间治一治也是划的来到。

 

二,日志中应该存储哪些信息?

你在平时生活中看到一些比较重要的信息,你都会记在脑子里,比如你看到前台姑娘大冬天穿裙子,那么你肯定会**(手动滑稽)。

就好像你在项目中有个地方你想把这个地方记下来,除了print就是log,print昙花一现,但是log却能永存于世。

如果一不小心报错了(手动滑稽),肯定要把错误记录下来,看看是不是别人的锅。

日志中必须记录的有:日期,版本号,日志等级,端口号,ip,文件名,错误,运行时间。(这里的端口号与ip是别人的,千万不要傻乎乎的记成了自己的)

其他的可以根据自己的需求进行记录。

 

三,如何按照等级存储日志信息?

一般比较出名的项目中(如Django)他们的日志记录一般都是分成两部分,error和debug。

这样记录的话会比分成四个等级来记录要精简一些。(我并不喜欢那种分成四个等级来记录,那样感觉太繁琐。)

总的来说还是具体场景具体分析吧!你需要馒头,我却给你西红柿,那也是不行的!

 

四,如何优雅的记录。
千万不要记录太多的debug,这样的话会显的很累赘。

写入日志的内容应该是循循渐进的,在看日志的时候知道大概是在哪一步出了问题,比如:起床 -> 穿衣 -> 刷牙 -> 吃饭,你穿的什么鞋,用的什么牙膏,这些就不用去详细的记录了。
error消息一定要记录仔细,一定要记录仔细,一定要记录仔细。(重要的话说三遍)。
记录error时可以用 traceback 模块,它可以把输出到控制台的错误打印出来,是一个比较给力的模块。

 

五, 怎么去解决多进程造成的进程间互相挣钱资源,日志记录 混乱的问题

你首先要搞清楚进程,线程的关系,如果只是单纯为了一个日志,而去大费周章的搞个进程间的通信,还要牵扯到锁,线程,协程,绝对够你喝一壶。
如果你还想用进程间的通信去解决这个问题,我只能送你一张图:

我用的方法也是比较简单滴。

在每个进程进来时都去创建一个  进程号.log文件来记录,每个进程都要单独的文件来记录,互不干扰。

文件名最好是带着进程号,这样在程序中进行文件判读的时候比较好处理,当这次进程运行时,我会遍历日志目录下的日志文件。

除了这次进程号的日志文件,还有正在进行io操作的文件,其他的日志文件全部写到 今天日期.log文件中。

大概思路就是这样的,可能中间还会有一些不完美的地方,如果有需要的话,可以留言反馈,一起讨论一下。

 

六,提醒(特别重要)

一定要熟悉logging模块,知道他的每一个方法,一定要!!!

一定要想清楚你为什么去记录,记录什么!!!

牛比的技术不代表适合你,最适合的才是最好的!!!

 

七,记得点赞关注