3

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

最好将此类日志存储在文件或数据库中吗?我完全不知道优点和缺点是什么,除了它是另一个要设置的表。

是否有第三个(或第四个等)选项我不知道我应该研究和学习?

4

5 回答 5

9

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

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

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

于 2008-08-30T14:39:30.363 回答
5

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

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

于 2008-08-30T13:49:27.973 回答
3

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

于 2008-09-03T17:36:24.367 回答
1

我只是为了可维护性而使用数据库 - 对文件的多次编辑也可能导致一些被遗漏。

于 2008-08-30T13:25:09.980 回答
1

我将支持上述两个建议,并补充说,当有很多用户时,平面文件日志上的文件锁定可能会导致问题。

于 2008-08-30T14:08:39.940 回答