在初始化启动时配置了stdoutFile的日志输出文件,配置成功后,启动workerman后,也是有正常在对应的目录下生成这个日志文件,但是一但在运行中删除掉这个日志文件,那么不会再重新生成这个日志文件了,就算手工增加了相同文件名的日志文件,也是一样没有再将日志写入到这个日志文件里。必需要停止服务然后再启动服务才会又生成文件。
有啥方法可以让在运行中时,删除掉这日志文件后当有日志信息时又会自动生成这个文件呢?
而workerman本身的日志文件(workerman目录下的workerman.log)就行。删除了,会自动生成新的。
class Server{
public function __construct(){
Autoloader::setRootPath(__DIR__);
// 获取插件配置
$config = Config::get('config');
//所有的打印输出全部保存在tmp/stdout.log文件中
Worker::$stdoutFile = './stdout.log';
// register 必须是text协议
$register = new Register('text://0.0.0.0:' . $config['register_port']);
// bussinessWorker 进程
$worker = new BusinessWorker();
// worker名称
$worker->name = 'SysMsgBusinessWorker';
TP5+workerman4.0.19+gatewayworker
修改框架代码,每次写入前检测文件是否存在,不存在就创建
这是我按workerman文档里设置stdoutFile这个文件名的,这个必需是在Worker::runAll();前执行,总不能去修改Workerman框架吧。
是的,修改框架源代码
如果只是想清空日志文件,大可不必删掉它,可以采用一个取巧的方式:
echo '' > xxx.log
标准输出重定向都是这样的,其他语言程序也以一样,删除后不会重新建立文件。
需要程序触发重新重定向逻辑,代码类似
这样每次要删除stdoutFile 的时候执行
php start.php reload
即可。你也可以在onWorkerStart时弄个定时器,每天凌晨重置
$worker::$stdoutFile = '/var/log/workerman.' . date('Y-m-d') . '.log';
以日期分割文件,手动或自动删除之前多少天的文件。受教了,谢谢了