当前位置:  开发笔记 > 后端 > 正文

将"puts"命令输出重定向到日志文件

如何解决《将"puts"命令输出重定向到日志文件》经验,为你挑选了3个好方法。

我正在使用daemons gem在Ruby中创建一个守护进程.我想将守护进程的输出添加到日志文件中.我想知道puts从控制台重定向到日志文件的最简单方法是什么.



1> Eric Walker..:

如果您需要同时捕获STDERR和STDOUT并且不想求助于记录,则以下是一个改编自此帖子的简单解决方案:

$stdout.reopen("my.log", "w")
$stdout.sync = true
$stderr.reopen($stdout)


如果你想要put仍然去终端,以及日志文件怎么办?例如`ruby myscript.rb |的行为 tee my.log`

2> 小智..:

我应该建议使用ruby logger,它比puts更好,你可以有多个日志级别,你可以打开/关闭:调试,警告,信息,错误等.

 logger = Logger.new(STDOUT)
 logger = Logger.new("/var/log/my-daemon.log")

我使用runit包来管理ruby服务,它有svlogd比重定向守护进程输出到日志文件,这里是logger进程的运行脚本:

#!/bin/sh
set -e

LOG=/var/log/my-daemon

test -d "$LOG" || mkdir -p -m2750 "$LOG" && chown nobody:adm "$LOG"
exec chpst -unobody svlogd -tt "$LOG"


这并没有真正回答这个问题.如果您无法控制谁正在执行_puts_并且您想要捕获通常写入STDOUT并将其写入文件的内容,该怎么办?

3> Pistos..:

尝试

$stdout = File.new( '/tmp/output', 'w' )

恢复:

$stdout = STDOUT


没有`$ stdout.sync = true`,它对我不起作用.
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有