会发生什么:
$logger.info("progname"){"msg_line1\nmsg_line2"}
I, [2017-03-16T14:14:01.426134 #846807] INFO -- progname: msg_line1
msg_line2
我想要实现的目标:
$logger.info("progname"){"msg_line1\nmsg_line2"}
I, [2017-03-16T14:14:01.426134 #846807] INFO -- progname: msg_line1
I, [2017-03-16T14:14:01.426134 #846807] INFO -- progname: msg_line2
我已经尝试过了:
$logger = Logger.new(STDOUT)
original_formatter = Logger::Formatter.new
$logger.formatter = proc { |severity, datetime, progname, msg|
msg.each_line do |line|
original_formatter.call(severity, datetime, progname, line)
end
}
发生了什么:
$logger.info("progname"){"msg_line1\nmsg_line2"}
msg_line1
msg_line2=> true
有人可以帮帮我吗?我不知道为什么我的代码不起作用。
答案 0 :(得分:1)
formatter proc
应该返回一个字符串,而不仅仅是将方法调用委托给另一个格式化程序。
目前,您的msg.each_line
会返回msg_line1
msg_line2
的内容:
p
您可以通过在original_formatter.call(...
之前添加require 'logger'
$logger = Logger.new(STDOUT)
original_formatter = Logger::Formatter.new
$logger.formatter = proc { |severity, datetime, progname, msg|
msg.split("\n").map do |line|
original_formatter.call(severity, datetime, progname, line)
end.join
}
$logger.info('progname') { "msg_line1\nmsg_line2" }
# I, [2017-03-16T15:08:40.688193 #5372] INFO -- progname: msg_line1
# I, [2017-03-16T15:08:40.688193 #5372] INFO -- progname: msg_line2
来检查格式化程序是否正确完成了这项工作。只是你没有使用结果。
以下是您的代码的修改版本:
{{1}}