我想保留人们在我的应用程序中所做的一些事情的日志,在某些情况下,以便在需要时可以撤消它。

最好将此类日志存储在文件中还是数据库中?除了需要设置另一张桌子之外,我完全不知道其优点和缺点是什么。

是否有我不知道的第三(或第四等)选项我应该研究和了解?

有帮助吗?

解决方案

您几乎肯定会希望使用数据库进行灵活的、基于记录的访问,并利用数据库处理并发数据访问的能力。如果您需要跟踪可能需要撤消的信息,那么将其采用结构化格式是一个好处,因为能够更新指示给定事务何时以及由谁撤消的行。

您可能只想在非常高性能的情况下写入文件,或者如果每条记录有非常非结构化或大量数据,而这些数据可能不适合存储在数据库中。请注意,除非您的应用程序有大量事务,否则数据库速度不太可能成为问题。另请注意,如果您正在处理文件,则需要非常小心地处理并发访问(读/写/锁定),这可能不是您想要处理的事情。

其他提示

至少有一个明确的理由要存储在数据库中。您可以在 MySQL 中使用 INSERT DELAYED(或其他数据库中的类似构造),它会立即返回。通过这些类型的查询,您不会从数据库获得任何返回数据,并且不保证它们会被应用。

通过使用 INSERT DELAYED,您的应用程序不会因为日志记录而减慢太多。数据库可以随时将 INSERT 写入磁盘,因此它可以将一堆插入捆绑在一起。

您需要注意使用 MySQL 的内置时间戳函数(如 CURRENT_TIMESTAMP 或 CUR_DATE()),因为每当查询实际执行时它们都会被调用。因此,您应该确保任何时候数据都是用您的编程语言生成的,而不是由数据库生成的。(本段可能是 MySQL 特定的)

我是以下的忠实粉丝 日志4php. 。它为您提供了一个用于记录操作的标准接口。它基于 log4j。该库加载一个中央配置文件,因此您无需更改代码即可更改日志记录。它还提供了多个日志目标,如文件、系统日志、数据库等。

我只是为了可维护性而使用数据库 - 而且对文件进行多次编辑可能会导致某些内容被遗漏。

我将赞同上述两条建议,并补充说,当有大量用户时,平面文件日志上的文件锁定可能会导致问题。

看一下我之前的帖子 为数据库应用程序留下审计跟踪/更改历史记录的好策略? 它似乎涵盖了同一主题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top