服务器日志记录 - 存入数据库还是日志文件?
我最近在做一个服务器的工作,开始实现日志记录功能。不过,我不太确定是应该把日志放在数据库里,还是直接用一个纯文本文件。
我打算记录每个请求的一些基本信息,比如请求的类型、请求的IP地址和会话跟踪。对于某些请求,还会有更详细的信息(比如具体请求了什么),如果出现错误,我也会记录下来。
一方面,把日志放进数据库里可以让我对记录的数据进行查询。另一方面,我又担心这样会给数据库带来不必要的压力。当然,我也可以同时使用数据库和日志文件来记录信息。大家对合适的日志记录方式有什么看法呢?
(如果有影响的话,我是在一个使用mod_python的Apache服务器上,数据库是MySQL。所以我可能会用logging库,或者直接在数据库里创建一些日志表。)
11 个回答
如果你决定使用一种可以解析的日志文件格式,那么你就可以把日志记录到文件里,然后可以有一个外部程序(可能是通过定时任务cron来运行)来处理这些日志文件,并把里面的细节插入到你的数据库中。你可以安排这个处理在你的应用和数据库负载较低的时候进行。
我总是担心如果数据库不可用会发生什么:这会不会导致你的应用无法运行,或者让它变得不稳定?把日志记录到文件系统可以避免这个问题,但你仍然需要担心磁盘空间不足和日志文件的轮换问题。
把 file.log 和数据库结合起来使用是最好的选择。 把你可能需要分析的信息记录到数据库里,比如每天的平均用户数量等等。 而 file.log 则用来存储一些调试信息。
首先,使用像SLF4J/Logback这样的日志库,这样你可以动态地决定日志的处理方式。这样,你就可以调整配置文件,把一些或所有的日志信息发送到不同的地方。
在把日志记录到你的应用数据库之前要非常小心,如果你记录的内容太多,可能会让数据库承受不住,尤其是当日志量变得很大的时候。如果你的应用快要满负荷运行或者出现故障,日志信息可能会无法访问,那时候你就像在黑暗中摸索一样。通常,只有一些高层次的、与应用相关的事件(这是一种应用数据)应该记录到应用数据库。
把日志记录到“文件系统”会更好一些(在大型生产环境中,这通常包括把日志记录到一个多播地址,由多个冗余的日志聚合服务器读取)。
日志文件可以被导入到专门的分析数据库中,你可以使用比如Hadoop这样的工具对日志数据进行分析。