程序员无戒学堂:365天极限挑战日更营

Web应用的日志及其使用场景

2017-12-30  本文已影响0人  一进制
日志就是数据

日志是数据,数据却不一定是日志。日志主要用于记录发生过的事件,写入和查询是常用操作,不推荐对其进行修改操作,日志过量或者过期的时候,需要清理。

日志是应用不可分割的一部分,没有日志的应用是残缺的。依赖日志,我们可以追溯故障、找出BUG、统计数据和分析用户行为。适当的日志可以提供帮助,日志太少和太多都会造成不良影响。

本文讨论了Web应用的HTTP日志、应用日志和用户日志。

HTTP日志

正规部署的Web应用,都会使用类似Nginx, Apache这样的Web服务器来做反向代理以及负载均衡。这样一来,就由这一层服务来搜集HTTP日志。即便是开发模式下,使用开发Web服务器,也会产生HTTP日志。一般的HTTP日志,至少会包含这些字段:日志产生时间、HTTP method、url path、HTTP协议版本、响应状态码、响应字节大小、访问者ip、代理服务器ip、请求处理耗时、Referrer、User Agent。

应用日志

应用日志是Web应用直接产生的。应用日志可以接入到操作系统的日志系统中,例如syslog,也可以自行输出到标准输出中。Web应用产生的异常错误,会输出到标准错误输出中。由于Web应用在生产环境都是以daemon方式运行(后台运行),所以负责监控和管理Web应用进程的守护进程(例如supervisor),就要搜集这些应用日志,以便查询和分析。

分析应用日志时,一般需要结合日志上下文进行分析,因为一旦抛出异常错误,日志一般不是一行就能记录完的。异常日志一般会以代码调用追溯的方式来展现。例如:

RuntimeError                              Traceback (most recent call last)
<ipython-input-5-e3097d5bf3e6> in <module>()
----> 1 test1()

<ipython-input-2-ee75a0b1ab43> in test1()
      1 def test1():
      2     print('test1 start')
----> 3     test2()
      4     print('test1 end')
      5 

<ipython-input-4-a2967c4ec095> in test2()
      1 def test2():
      2     print('test2 start')
----> 3     raise RuntimeError('runtime error')
      4     print('test2 end')
      5 

RuntimeError: runtime error

根据错误提示可以知道,在运行test1这个无参数的函数时,发生的异常,追溯到test1定义内部的第三行,调用test2这个无参数的函数时,再次追溯到test2定义内部的第三行,源头上,正是这里发生了异常,去掉这一行,修复异常,再次运行函数test1时,就能成功了。

用户日志

用户日志的产生,需要在Web应用代码中实现,常规做法,是将用户日志存储到数据库中,如果将用户日志存入到文件中,则可以归纳到应用日志中了,当然,这是一种不严谨的划分。

我们知道,HTTP是无状态的协议,开发者利用cookie技术识别不同用户,这样一来,我们就可以区分相同客户端ip和相同电脑下的不同用户。有了更加细致的用户日志,我们可以做更加精细的统计分析。

总结

本文详细讨论了HTTP日志的分析使用,并对应用日志和用户日志的常规使用做出了说明,通过阅读本文,可以对Web应用下的日志和其使用案例有了初步的了解,更多的详情,可以参考更加详细的资料。

无戒365训练营 第八篇

上一篇下一篇

猜你喜欢

热点阅读