Mac系统中Ruby STDERR/STDOUT日志文件默认存储位置查询
关于Mac系统中Ruby STDOUT/STDERR日志的那些事儿
嘿,这个问题问得挺精准的,我来给你掰扯清楚~
首先:用Logger.new(STDOUT)时,日志存在哪?
说白了,它并没有默认的“存储文件”——STDOUT本身是「标准输出流」,在Mac的终端环境下,它默认就是直接输出到你的终端窗口里的。比如你运行这段代码:
l = Logger.new(STDOUT) l.info 'my log'
执行后你会立刻在终端看到类似这样的输出:
I, [2024-05-20T14:30:00.123456 #1234] INFO -- : my log
那如果你的Ruby程序不是在终端前台运行呢?分两种情况:
- 要是用
nohup命令后台启动(比如nohup ruby your_script.rb &),STDOUT的内容会默认写到当前目录下的nohup.out文件里 - 要是通过系统服务(比如launchd)运行,STDOUT的输出一般会被重定向到系统日志,你可以用
log show命令查询,比如:log show --predicate 'process == "ruby"' --info
再说说Ruby的STDERR和STDOUT的区别
STDOUT和STDERR是两个完全独立的输出流,各司其职:
- STDOUT(标准输出):负责输出程序的正常运行信息、结果,就像你示例里的普通日志,属于「常规输出」
- STDERR(标准错误):专门用来输出错误提示、警告信息,它默认也是输出到终端,但可以单独被重定向到文件,方便和正常日志分开管理
举个实际的例子,如果你想把错误日志单独存起来,可以这么写代码:
error_logger = Logger.new(STDERR) error_logger.error 'Oops, something went wrong!'
然后运行程序时,把STDERR重定向到文件:
ruby your_script.rb 2> error.log
这样一来,正常的STDOUT日志还是会显示在终端,而错误日志会乖乖跑到error.log里。
另外补充一点:如果你的Ruby程序是在GUI环境下运行(比如没有打开终端的情况),STDOUT和STDERR的内容可能会被系统丢弃,或者写入到系统的控制台日志里——你可以通过Mac自带的「控制台」应用去查看这些日志。
内容的提问来源于stack exchange,提问作者user1883793
相关产品推荐
相关产品推荐

