在初始化啟動(dòng)時(shí)配置了stdoutFile的日志輸出文件,配置成功后,啟動(dòng)workerman后,也是有正常在對應(yīng)的目錄下生成這個(gè)日志文件,但是一但在運(yùn)行中刪除掉這個(gè)日志文件,那么不會(huì)再重新生成這個(gè)日志文件了,就算手工增加了相同文件名的日志文件,也是一樣沒有再將日志寫入到這個(gè)日志文件里。必需要停止服務(wù)然后再啟動(dòng)服務(wù)才會(huì)又生成文件。
有啥方法可以讓在運(yùn)行中時(shí),刪除掉這日志文件后當(dāng)有日志信息時(shí)又會(huì)自動(dòng)生成這個(gè)文件呢?
而workerman本身的日志文件(workerman目錄下的workerman.log)就行。刪除了,會(huì)自動(dòng)生成新的。
class Server{
public function __construct(){
Autoloader::setRootPath(__DIR__);
// 獲取插件配置
$config = Config::get('config');
//所有的打印輸出全部保存在tmp/stdout.log文件中
Worker::$stdoutFile = './stdout.log';
// register 必須是text協(xié)議
$register = new Register('text://0.0.0.0:' . $config['register_port']);
// bussinessWorker 進(jìn)程
$worker = new BusinessWorker();
// worker名稱
$worker->name = 'SysMsgBusinessWorker';
TP5+workerman4.0.19+gatewayworker
標(biāo)準(zhǔn)輸出重定向都是這樣的,其他語言程序也以一樣,刪除后不會(huì)重新建立文件。
需要程序觸發(fā)重新重定向邏輯,代碼類似
$worker->onWorkerReload = function($worker) {
unlink(Worker::$stdoutFile);
Worker::resetStd();
}
這樣每次要?jiǎng)h除stdoutFile 的時(shí)候執(zhí)行 php start.php reload
即可。
你也可以在onWorkerStart時(shí)弄個(gè)定時(shí)器,每天凌晨重置$worker::$stdoutFile = '/var/log/workerman.' . date('Y-m-d') . '.log';
以日期分割文件,手動(dòng)或自動(dòng)刪除之前多少天的文件。