首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库日志与文件日志

数据库日志与文件日志
EN

Stack Overflow用户
提问于 2015-02-08 14:14:07
回答 6查看 5.2K关注 0票数 14

我已经创建了一个PHP+MYSQL网络应用程序,我正在尝试实现一个日志系统来存储和跟踪每个用户的一些操作。

这样做的目的是:通过记录IP+time+action来跟踪每个用户会话的活动,然后查看他稍后通过日志记录time+pagename访问的页面;对于每个用户,将有一个格式的文件:IP+time+action

然后,每个日志将仅由网站所有者通过自定义管理面板查看,并且数据将仅用于安全目的(例如,向用户显示他是否从不同的IP登录或其他人从不同的IP登录,并查看用户在登录会话期间访问的网站的哪些区域)。

目前,我有一个MYSQL MyISAM表,其中存储用户IP、IP、时间、动作和应用程序仍然没有启动,但是我们打算有很多用户(超过100 k),使用数据库来解决这个问题就像自杀一样。

那你有什么建议?如何进行日志记录?使用文件,使用当前数据库中的表,还是使用单独的数据库?是否有任何可用于PHP的文件日志框架?

那么,应该如何读取文件呢?逐行阅读结果?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-02-11 10:32:11

你有很多选择,所以我将根据我的经验,运行一家拥有大约50万用户的初创公司,每个月有10万名活跃用户,这似乎就在你的范围之内。

我们在MySQL数据库中记录了用户操作。

  1. 查询您的数据非常容易和快速(提供了良好的索引)
  2. 我们运行在Azure上,并有一个专用的MySQL (带有奴隶等)来存储所有用户数据,包括日志。空间不是一个问题。
  3. 登录到MySQL可能会很慢,这取决于您要记录的所有内容,所以我们将日志推送到Redis,并让一个Python应用程序从Redis中读取它,并在后台插入到MySQL中。这使得日志记录基本上不影响加载时间。

我们决定登录MySQL进行用户操作,因为:

  1. 我们想在任何时候对任何查询都不费太大力气就可以运行查询。用户操作日志的结构化格式使得这样做变得非常容易。
  2. 它还允许您向用户显示某些日志(如果需要的话)。
  3. 当我们引入徽章时,我们不需要解析文本日志来将徽章授予那些执行特定操作X次的人。我们只是针对用户操作日志编写了一个查询,并授予了徽章。因此,添加基于动作的特性也很容易。

我们确实在一些应用程序日志中使用了文件日志--或者我们每天都不进行查询--比如Python应用程序写入数据库、We服务器访问和错误日志等等。

我们使用洛格斯塔什来处理这些日志。它可以简单地连接到日志文件并将其流到您的Logstash服务器。Logstash还可以查询您的日志,这非常酷。

高级使用

我们使用松懈进行团队通信,并将Python数据库编写应用程序与之集成在一起,这使我们能够将关键错误发送到一个通道(通过他们的API),在该通道中,有人可以立即执行修复操作。

关闭

我的建议是暂时不要想太多,登录到MySQL,查询并查看统计数据。更新,冲洗,重复。您希望保持部署和更新之间的快速循环,因此从快速SQL查询中做出决策很容易。

基本上,您想要避免的是登录到服务器,找到一个日志,然后grep通过它找到一些东西,上面实现了这一点。

这就是我们所做的,它仍然是那样运行的,我们没有计划很快改变它。在我们找不到我们需要的任何东西时,我们没有遇到任何问题。如果有大量的用户,并且我们扩大到每月100万活跃用户,那么我们可能会改变它。

请注意:无论您决定以哪种方式登录,如果您正在保存帖子数据,请确保永远不要这样做,除非您是符合的信用卡信息。或者更确切地说,使用条带的JavaScript库。

票数 26
EN

Stack Overflow用户

发布于 2015-02-11 10:45:52

如果您确信每次读取日志将主要针对一个用户,则应该考虑使用http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html作为分区键对日志表进行分区: user_id。

最大分区数为1024,您将有一个分区存储100 k用户的1/1000,这是合理的。

票数 2
EN

Stack Overflow用户

发布于 2015-02-11 10:54:29

是否有任何可用于PHP的文件日志框架?

有一个在包装商上可用的:https://packagist.org/packages/psr/log

注意,它不是一个文件日志框架,而是一个基于FIG的PSR-3标准的记录器的API。因此,如果您愿意,它是PHP的“标准”记录器接口。您可以构建一个实现此接口的记录器,或者在打包器上搜索实现该接口的其他记录器(无论是基于文件的还是基于MySQL的)。在包装工人(茶杯,林业)上还有其他一些伐木者,但最好是使用符合PSR标准的伐木者。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28394905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档