Linux下应用程序日志

Linux下应用程序日志

应用程序(例如 Node)在 Linux 下记录日志的适当方式是什么?Windows 有应用程序可以写入的事件日志。

我们是否应该为每个应用程序创建日志文件var/log

答案1

  1. 类 Unix 系统上的传统 API 是系统日志(3)

    openlog("myapp", 0, LOG_DAEMON);
    ...
    syslog(LOG_INFO, "Thing '%s' happened", thing->name);
    

    使用 syslog() API 将会向当前安装的系统记录器发送消息,然后允许系统管理员过滤消息、应用轮换策略、转发到远程服务器等等。

    相应的 Node 模块似乎是节点系统日志,但你可以通过向Unix套接字发送消息来手动实现它/dev/log

  2. 许多 Linux 发行版也有systemd 日志它有自己的 API,允许附加元数据(例如,有关单个请求的所有消息都可以用元数据字段“MYAPP_REQUEST_ID=[...]”进行标记,然后稍后轻松查找)。

    sd_journal_send("MESSAGE=Thing '%s' happened", thing->name,
                    "PRIORITY=%i", LOG_INFO,
                    NULL);
    

    有一个名为systemd 日志提供对此 API 的访问。

  3. 一个简单的选项是将所有日志消息写入 stderr。理想情况下,它应该使用简单的格式,每行只有一条消息 - 没有颜色、没有时间戳、没有花哨的前缀/标记;服务管理器将添加自己的。在此模式下,您唯一应该添加的是 syslog 样式的优先级编号(例如 3 对应于 LOG_ERR):

    <3>Something bad happened.
    
  4. 对于通用消息,不建议创建自己的文件,尤其是发明自己的日志格式;这会让系统管理员的工作变得更加困难。另一方面,它当您要记录大量消息时,这样做是个好主意,否则系统日志将不堪重负。(例如,Apache 等 Web 服务器默认将每个请求记录到 /var/log/apache/access.log 文件中。)

相关内容