如何在前端web服务器中,打印出用户操作网页痕迹的操作日志

一、背景

由于前端项目是静态文件,是在浏览器端运行,如果要打日志到服务器,无法直接通过某些工具完成。只有那些运行在服务器端的程序,如后台程序,才能直接的在服务器端打印日志。但是我们必须要记录下前端页面的操作轨迹,就必须另辟蹊径了。

二、探索结果

1.从apache的日志入手

通过查阅资料,发现apache服务器或者nginx服务器都能够记录前端发送到服务器的请求。并能记录请求的url连接,请求时间,客户端浏览器等信息。

2.通过请求的URL记录日志

所以,我们可以通过前端请求的url来记录日志。将日志写在url中,对这种无效的日志url前端进行特殊处理,异步调用,不会影响前端页面的使用。后台apache接受到请求后,将对应的日志url按照自己的规范进行解析,提取日志信息。我们可以对特定url的连接进行日志过滤,将日志请求单独存放

优点:原理简单,只需要配置普通的apache 日志配置即可。

缺点

  1. 记录的日志如果包含敏感信息,发送的请求在前端浏览器能被随意查看,可能存在安全问题
  2. 由于传递的最终也是个字符串,对url的书写规范要求严格,定义复杂,解析繁琐,且容易出错

3.进一步探索能否通过获取POST请求的参数,来传递日志

上面的传统日志记录方式,虽然能获取到get post请求,但是缺获取不到请求体中的内容。如果需要获取请求体body中的内容,则需要使用apache的另一个模块mod_dumpio

(1) 配置mod_dumpio

首先校验dumpio模块是否存在

# httpd -M | grep 'dumpio'
dumpio_module (shared)

出现结果表示存在该模块

​ 其次配置dumpio。

httpd.conf配置文件中找到如下行:

# LoadModule dumpio_module modules/mod_dumpio.so

去掉前面的#

然后在该文件中添加如下配置:

LogLevel dumpio:trace7

    DumpIOInput On

(2) 配置完成,重启apache
(3)日志打印结果

访问服务器:

curl -X POST -d '{"key": "value"}' 'http://10.221.157.129:8480/xxx'

在error.log里查看打印的日志如下:

[Wed Sep 02 10:18:49.075317 2020] [dumpio:trace7] [pid 50622:tid 139724777260800] mod_dumpio.c(103): [client 172.26.3.88:41748] mod_dumpio:  dumpio_in (data-HEAP): {"key": "value"}

这样就可通过json格式获取日志

**优点:**定义规范方便,不容易出错,格式简洁明了。

缺点:日志量较大,且日志较混乱,且都在error_log中可能会干扰,影响查找。同样存在日志敏感信息安全问题

你可能感兴趣的:(前端技术相关,部署相关,nginx,apache)