F.H. Asked: 2019-05-07 08:34:38 +0800 CST2019-05-07 08:34:38 +0800 CST 2019-05-07 08:34:38 +0800 CST Linux下的应用日志 772 应用程序(例如 Node)在 Linux 下登录的合适方式是什么?对于 Windows,有应用程序可以写入的事件日志。 var/log我们应该只为每个应用程序创建日志文件吗? linux logging 1 个回答 Voted Best Answer user1686 2019-05-07T09:12:06+08:002019-05-07T09:12:06+08:00 类 Unix 系统上的传统 API 是syslog(3)。 openlog("myapp", 0, LOG_DAEMON); ... syslog(LOG_INFO, "Thing '%s' happened", thing->name); 使用 syslog() API 会将消息发送到当前安装的系统记录器,然后允许系统管理员过滤消息、应用轮换策略、转发到远程服务器等。 相应的 Node 模块似乎是node-syslog/dev/log ,但您可以通过向Unix 套接字发送消息来手动实现它。 许多 Linux 发行版也有带有自己 API 的systemd-journal,它允许附加元数据(例如,关于单个请求的所有消息都可以用元数据字段“MYAPP_REQUEST_ID=[...]”标记,然后轻松查找之后)。 sd_journal_send("MESSAGE=Thing '%s' happened", thing->name, "PRIORITY=%i", LOG_INFO, NULL); 有一个名为systemd-journald的 Node 模块提供对此 API 的访问。 一个简单的选择是将所有日志消息写入 stderr。理想情况下,它应该使用一种简单的格式,每行只有一条消息——没有颜色、没有时间戳、没有花哨的前缀/标记;服务管理器将添加自己的。在这种模式下,您唯一应该添加的是系统日志样式的优先级编号(例如,3 对应于 LOG_ERR): <3>Something bad happened. 对于通用消息,不建议创建自己的文件,尤其是发明自己的日志格式;这将使系统管理员的生活更加艰难。另一方面,当您要记录大量消息时这样做是个好主意,否则这些消息会使系统日志不堪重负。(例如,像 Apache 这样的网络服务器默认会将每个请求记录到 /var/log/apache/access.log 文件。)
类 Unix 系统上的传统 API 是syslog(3)。
使用 syslog() API 会将消息发送到当前安装的系统记录器,然后允许系统管理员过滤消息、应用轮换策略、转发到远程服务器等。
相应的 Node 模块似乎是node-syslog
/dev/log
,但您可以通过向Unix 套接字发送消息来手动实现它。许多 Linux 发行版也有带有自己 API 的systemd-journal,它允许附加元数据(例如,关于单个请求的所有消息都可以用元数据字段“MYAPP_REQUEST_ID=[...]”标记,然后轻松查找之后)。
有一个名为systemd-journald的 Node 模块提供对此 API 的访问。
一个简单的选择是将所有日志消息写入 stderr。理想情况下,它应该使用一种简单的格式,每行只有一条消息——没有颜色、没有时间戳、没有花哨的前缀/标记;服务管理器将添加自己的。在这种模式下,您唯一应该添加的是系统日志样式的优先级编号(例如,3 对应于 LOG_ERR):
对于通用消息,不建议创建自己的文件,尤其是发明自己的日志格式;这将使系统管理员的生活更加艰难。另一方面,当您要记录大量消息时这样做是个好主意,否则这些消息会使系统日志不堪重负。(例如,像 Apache 这样的网络服务器默认会将每个请求记录到 /var/log/apache/access.log 文件。)