Workerman4 守护进程模式,linux 系统日志输出到 syslog 配置

陌瑶君_1044

陌瑶君_1044

2026-10-05

406人浏览

原创

workerman 4 默认不对接 syslog,日志走 php error_log() 或标准输出;需在 start.php 中用 openlog()/syslog() 主动发送结构化日志,并配置 rsyslog 独立落盘或转发。

workerman4 守护进程模式,linux 系统日志输出到 syslog 配置

Workerman 4 默认不对接 syslog,所有日志(Worker::log()、echo、未捕获异常等)都走 PHP 的 error_log() 或标准输出,而 PHP 的 error_log() 默认由 php.ini 中的 error_log 配置决定——通常指向文件或 syslog,但这是**PHP 全局错误日志通道**,不是 Workerman 自身运行日志的可控出口。

为什么不能直接靠 php.ini 的 error_log = syslog?

因为:

  • Workerman 的 Worker::log() 在守护进程模式(-d)下默认被重定向到 /dev/null,除非你显式设置了 Worker::$logFile;
  • 即使 php.ini 设了 error_log = syslog,它只影响 trigger_error()、error_log() 函数调用及 PHP 解析错误,不自动捕获 Workerman 进程启动、连接建立、定时器触发等框架级事件;
  • syslog 接收的是无结构纯文本,缺乏 facility 和 severity 的合理标记,不利于后续按服务分类采集或安全审计。

正确做法:在 start.php 中主动写入 syslog

Workerman 4 支持通过 openlog() + syslog() 手动发送结构化消息。推荐在 start.php 开头初始化 syslog 句柄,并封装一个安全日志函数:

在 start.php 顶部添加:

// 初始化 syslog,指定 facility 为 local4(可自定义),标识为 'workerman'
openlog('workerman', LOG_PID | LOG_CONS, LOG_LOCAL4);
<p>// 封装日志函数,支持 level 映射
function wlog($message, $level = LOG_INFO) {
$timestamp = date('c');
$pid = getmypid();
$msg = sprintf('[%s][PID:%d] %s', $timestamp, $pid, $message);
syslog($level, $msg);
}</p><p>// 启动前记录
wlog('Workerman starting...', LOG_NOTICE);
</p>

然后在 Worker 回调中使用,例如:

$worker->onWorkerStart = function($worker) {
    wlog("Worker #{$worker->id} started", LOG_INFO);
};
<p>$worker->onConnect = function($connection) {
wlog("New connection from {$connection->getRemoteIp()}", LOG_INFO);
};
</p>

rsyslog 配置:把 workerman 日志单独落盘

编辑 /etc/rsyslog.d/20-workerman.conf:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
# 捕获 facility local4 的所有日志,写入独立文件
local4.* /var/log/workerman/syslog.log
<h1>可选:转发到远程 SIEM(如启用 UDP 转发)</h1><h1>
<em>.</em> @192.168.10.5:514</h1><p></p>

重启 rsyslog:

sudo systemctl restart rsyslog

确保目录存在且权限正确:

sudo mkdir -p /var/log/workerman
sudo chown syslog:adm /var/log/workerman

补充:守护进程模式下必须关闭 stdout/stderr 重定向干扰

若你已在 start.php 中设置了:

Worker::$stdoutFile = '/var/log/workerman/stdout.log';
Worker::$stderrFile = '/var/log/workerman/stderr.log';

请确认这两项不与 syslog 写入冲突——它们用于捕获 PHP 标准输出和错误,而 syslog() 是独立通道。两者可共存,但建议:

  • stdoutFile/stderrFile 保留用于调试(如启动报错、语法错误);
  • syslog() 用于业务运行时结构化日志(连接、广播、心跳等),便于集中采集和告警。

这样既满足 Linux 系统日志规范,又保持 Workerman 运行可观测性。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3830

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3293

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2433

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5830

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5482

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3233

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2745

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2959

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习