参考资料:
1- 日志的艺术 http://blog.jobbole.com/113413/
2- lazy思想 https://www.cnblogs.com/xybaby/p/6425735.html
3- python logging
Gregory的注解 https://garygregory.wordpress.com/2015/10/08/the-art-of-logging-advanced-message-formatting/
2.7手册注解 https://docs.python.org/2/library/logging.html#
一、搞明白为何要写!
1、流程、状态记录
2、故障查询
二、日志写什么?
按照Event的要素写日志内容
1、时间 对于分布式和异步来说,global time十分重要。
【NTP协议】Network Time Protocal协议,RFC 1305定义的时间同步协议。
2、事件 发生了情况,一般有规定的专业写法
3、发生地 注明情况发生的代码函数名和运行语句方便定位。注明主机,有助于在分布式系统中具体分析。
注明主机,有助于在分布式系统中具体分析。1
4、context 记录故障发生的系统状态,有助于分析原因
三、用什么方式写
日志的分类:DEBUG|INFO|WARN|ERROR|FATAL
业务需求不同,应当事先对可能出现的问题加以归类
四、懒人写日志
开发用DEBUG,测试上线用INFO,所以DEBUG的日志就不应当出现在开发期间,以便于快速查询问题。
【lazy ideas in programming】
concept: delay the task to the necessary time, to avoid repeat calculate.
GoF(Gang of Four:a team created the System design patterns)
23种设计模式种很多模式贯穿了该思想,单例模式和代理模式比较明显:
-1- 单例模式:两种实现模式,第一种调用前创建好单例对象,第二种调用时生成(lazy way)
-2- 代理模式:两种实现模式,第一种远程代理,第二种虚代理(lazy loading)
Web开发中的懒惰加载和懒惰型预加载:
分页、轮播图、瀑布流,都体现了惰性加载的思想。
五、其他问题
1、写日志的代码应当0异常
2、日志输出的消耗如果不能忽略不计,那么值得优化
=> 可以采用异步日志的方式防止线程阻塞
六、Python logging
Gregory使用的是Apache的Log4j,具体使用看文档就好了。