主要是为了对登录的用户,记录他对数据库所做的操作。 要记录用户名,执行的 sql 语句,时间等信息。保存的位置的话,数据库或者是文件都可以。 试了 log4j 把日志存到数据库,但是 debug 的话记录实在太多了,对数据库是个负担,info 又精确不到用户的操作。 项目框架是 spring MVC。
1
a7a2 2018-06-14 10:00:19 +08:00 1
可使用时序数据库存放日志,很高效,不怕多。
执行 sql 放到 mq 中,消费的时候记录即可,日志 sql 并不与一般 sql 竞争,闲时执行 |
3
letitbesqzr 2018-06-14 11:26:06 +08:00
orm 框架呢,如果使用了 hibernate 可以试试 Hibernate Envers https://docs.jboss.org/envers/docs/ 。我们用的 hibernate-jpa 实现,也是使用了 Hibernate Envers 做了增删改记录。
日志数据存在 InfluxDB |
4
Aliencn 2018-06-14 11:46:23 +08:00 1
给你个骚操作。
把你要记录的信息用恒等式的写法写到 sql 语句的 where 条件里,例如 where user_a = user_a and 20180614=20180614 然后让数据库把所有查询记录到日志里,需要查的时候过滤一下就行了。 |
5
onion83 2018-06-14 11:59:51 +08:00 3
比 4 楼更骚的操作,是用注释符嵌入水印信息? 然后统一查
Mysql_query log? SELECT xx from oo where ff=bb; /* TIME IP USER for WAHT */ https://dev.mysql.com/doc/refman/8.0/en/comments.html |
6
jeffcott 2018-06-14 13:09:32 +08:00
我现在也在写这个功能,不过我是写 php 的...
|
7
noNOno 2018-06-14 13:44:09 +08:00
mysql 的话可以解析 binlog
|
8
naix1573 OP V 站果然大佬多,骚操作玩起来一个比一个溜。
|
12
naix1573 OP @Aliencn 哦~ 我想我明白这个你的意思了,这个功能确实很棒。
不过可能是我的表述有问题,其实我的意思是把用户在前台页面涉及到数据库的操作记录下来,比如用户在前台点击查询,或者对数据进行编辑之类的 |
13
onion83 2018-06-14 16:35:28 +08:00
@naix1573 我没用过 sql-server,刚才查了一下 应该是用 -- 符号
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/comment-transact-sql?view=sql-server-2017 另外搜了一下 这是它们的 Profile 工具,看着是能满足查询需求的 另外,我这种方案需要对数据库操作的类进行侵入性改造,要求项目做得比较规范。对数据库查询性能倒是无损,且可以记录更多业务上的东西。 |
14
whisperer 2018-06-14 18:13:58 +08:00
就是数据库审计
[数据库审计 - 阿里云]( https://www.aliyun.com/product/dbaudit) |
15
wps353 2018-06-14 21:09:02 +08:00 via Android
消费 binlog
|