代码之家  ›  专栏  ›  技术社区  ›  Dan Lew

服务器登录-在数据库或日志文件?

  •  10
  • Dan Lew  · 技术社区  · 16 年前

    我一直在服务器上工作,现在开始实现日志记录。但是,我不确定是应该使用db进行日志记录,还是只使用纯文本文件。

    我计划记录每个请求的一些基本信息(请求的类型、请求的ip地址、会话跟踪)。对于某些请求,将提供扩展信息(关于请求类型的详细信息),如果有任何错误,我也将记录这些错误。

    (如果有区别的话,我在Apache服务器上使用mod_python和MySQL数据库 logging

    11 回复  |  直到 16 年前
        1
  •  10
  •   Jim Ferrans    16 年前

    首先,使用SLF4J/Logback这样的日志库,它允许您动态地做出这个决定。然后,您可以调整配置文件并将部分或所有日志消息路由到几个不同的目的地。

    在登录到应用程序数据库之前要非常小心,如果您记录了大量的内容,并且容量开始变大,那么很容易将其淹没。如果您的应用程序正在接近满负荷运行或处于故障模式,日志消息可能无法访问,您将盲目运行。可能应该发送到应用程序数据库的唯一消息是面向应用程序的高级事件(一种应用程序数据)。

    日志文件可以读入特殊的分析数据库,在那里你可以使用Hadoop对日志数据进行map/reduce分析。

        2
  •  2
  •   tefozi    16 年前

    最好是Mix file.log+db。 并使用file.log存储一些调试信息。

        3
  •  1
  •   lavinio    16 年前

    我们总是将数据记录到 分离

    这使我们能够在不影响应用程序数据库的情况下进行查询。如果我们意识到需要禁用日志记录或更改日志的数量,它还可以简化工作。

    但是大多数现代的日志库都支持将日志嵌入到应用程序中,并通过配置选择目的地——文件、数据库等等。

    Logger 为您提供了许多管理日志的方法,尽管默认包没有数据库记录器,但编写这样的事件处理程序并不困难。

        4
  •  1
  •   mhawke    16 年前

    如果您决定使用可解析的日志文件格式,那么您可以登录到一个文件,然后使用一个外部进程(可能由cron运行)来处理日志文件并将详细信息插入数据库。这可以安排在应用程序和数据库负载较低时发生。

    我总是担心如果数据库变得不可用会发生什么:这会阻止应用程序运行,或者以任何方式降低它的性能吗?记录到文件系统可以避免处理这个问题,但是您仍然需要担心磁盘填充和日志文件旋转。

        5
  •  1
  •   S.Lott    16 年前

    例如,对于一个网站,我们将放置在网站中的所有广告记录到数据库中。它产生了收入。没有理由为如此重要的事情解析日志文件。

    其他所有内容都将进入文件系统。

    登录到文件系统进行调试。通常是私人物品。实施细节。不被分享。

    Apache在文件系统中记录了堆积如山的内容。不要重复这个。

    访问控制日志进入文件系统。您很少想详细了解这些。

    用户活动可能必须汇总到数据库中。这是营销和可用性方面的信息,你需要研究这些信息来改进你的网站。但是,详细的活动信息太多,无法记录在数据库中。将其放在文件系统中,并将其消化到营销/产品改进/可用性分析数据库中。

        6
  •  0
  •   wr.    16 年前

    万一你考虑调整标准的Python记录器登录到数据库,这个菜谱可能给你一个开端: Logging to a Jabber account

        7
  •  0
  •   Community Mohan Dere    9 年前

    我将主要使用文件系统日志记录,正如大多数其他答案所建议的那样。使用Python的日志记录包,您可以通过修改所提出的建议,轻松创建数据库处理程序 here . 您还可以创建自定义筛选器实例并将其附加到数据库处理程序-这将允许您在运行时准确地确定您实际记录到数据库的事件。与其他答案一样,我想说的是,将某些类型的事件记录到数据库中以便以后进行分析才是真正值得的。

    如果您的主要应用程序是高吞吐量的,我同意将日志记录到单独的数据库(在单独的服务器上)的建议。

        8
  •  0
  •   Parthan    16 年前

    日志记录的类型取决于您将如何处理数据以及如何处理数据。如果您打算基于此日志数据库构建报告系统,那么登录到数据库是有利的。否则,您可以使用特定的格式记录事情,如果您想利用数据进行某些分析,您可以稍后对其进行解析。例如,从文件日志中,您可以仅解析所需信息,并在需要时生成CSV。如前所述,如果您计划使用数据库记录器,请将其与应用程序数据库分开。

        9
  •  0
  •   Joe    16 年前

    我们两者都做。

    我们将运营信息/进度等记录到日志文件中。标准日志文件。

    在数据库中,我们记录操作的状态。例如,处理的每个项目,因此我们可以查询吞吐量/运行时间等。当趋势分析和检测可能指示其他问题的异常(系统“太安静”等)时,该数据特别有用。

        10
  •  0
  •   Rabe Rabe    16 年前

    实际上,以后可以在DB/文件日志记录之间切换似乎很重要。数据库日志记录似乎比纯文本文件日志记录慢得多,而纯文本文件日志记录在高日志流量下可能变得很重要。 当我有相同的需求时,我已经创建了一个库(它可以独立运行,也可以作为处理程序)。它登录到数据库和/或文件,并允许存档关键消息(例如,存档可能是一个数据库,而所有内容都进入文本文件) 它可以节省你从编码另一个从头开始。。。 见: The rrlog library

        11
  •  0
  •   Langali    16 年前

    看起来很多人都在将一些事件记录到数据库中。我也在做同样的事情,但这增加了一点延迟。你们中有人通过消息队列登录到数据库吗?如果是这样,您使用什么进行排队,您的日志记录体系结构是什么样的?我正在使用Java/J2EE。