将日志文件 nginx 的部分内容插入数据库(mysql)

将日志文件 nginx 的部分内容插入数据库(mysql)

我想将日志文件的某些部分插入到 mysql 中。
这是我的日志文件:

195.xx.x.x - - [25/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&a=form&...
192.xx.x.x - - [25/Apr/2017:09:45:xx +0200] "POST /usery/index.php?m=customer&doajax=request&action=getContacts...
197.xx.x.x - - [25/Apr/2017:09:20:xx +0200] "GET /userx/index.php?m=meeting&doajax=date&id=3

在我的数据库中我有列[idLog] [date] [user] [module] [action] [doAjax] [ajaxAction]

其中:
25/Apr/2017-->日期
userx-->用户
m=xxx-->模块
a=xxx-->action
doajax=xxx-->doAjax
action=xxx-->ajaxAction
idLog是自动递增的

所以我需要在日志文件中插入该信息:

INSERT INTO logs VALUES('null',25/04/2017,usery,contacts,form,null,null)
INSERT INTO logs VALUES('null',25/04/2017,usery,customer,null,request,getContacts)
INSERT INTO logs VALUES('null',25/04/2017,userz,meeting,null,date,null)

我想插入第 4 列上的日期以及/userx/index.php?m=meeting&doajax=date&id=3我的日期库中第 7 列 ( ) 的请求的某些部分。
一些想法?...

awk我尝试使用和for创建一个脚本 bashsed来剪切日志文件的某些部分并插入到我的数据库中

答案1

如果字段位置恒定,例如:如果日期始终位于第二个字段中。然后您可以使用 for 循环处理文件行并使用 awk 获取所需字段并分配给变量。在循环内将带有日期等变量值的插入查询回显到文件中。最后一次执行所有插入查询。

相关内容