如何在测试厨房中获取日志输出?
How do I get log output in test kitchen?
我的食谱里有这个:
log mylog1 do
level :info
message 'WHY I NO SEE THIS?'
end
log mylog2 do
level :info
message 'WHY I NO SEE THIS?'
end
这是我做的时候看到的 kitchen converge -l debug
:
...
Converging 3 resources
Recipe: mybook::myrecipe
* log[mylog1] action write
* log[mylog1] action write
...
这个问题有两部分:
首先,通过“-l debug”传递给 kitchen 的日志级别是针对 kitchen 可执行文件,而不是针对 provisioner,在这种情况下,“chef-solo”。因此,如果你 运行 带有调试选项的厨房,你会看到,provisioner 是 运行 log_level 如下“auto”,即使厨房处于调试模式:
[SSH] vagrant@127.0.0.1<{:user_known_hosts_file=>"/dev/null",
:paranoid=>false, :port=>"2222", :compression=>false, :compression_level=>0,
:keepalive=>true, :keepalive_interval=>60, :timeout=>15, :keys_only=>true,
:keys=>["/Users/mpriyada/myWorks/.kitchen/kitchen-vagrant/kitchen-default-centos/.vagrant/machines/default/virtualbox/private_key"],
:auth_methods=>["publickey"], :user=>"vagrant"}> (sh -c 'sudo -E /opt/chef/bin/chef-solo
--config /tmp/kitchen/solo.rb --log_level auto --force-formatter --no-color
--json-attributes /tmp/kitchen/dna.json')
这意味着,在 chef-solo 日志记录优先级中,“auto”与“警告”级别。 因此,如果在 "log" 资源中将日志级别设置为信息,则不会记录任何输出。 尝试下面的代码,您会发现其中的区别:
log "mylog1" do
level :warn
message 'WHY I NO SEE THIS?'
end
log "mylog2" do
level :info
message 'WHY I NO SEE THIS?'
end
输出:
Recipe: test3::default
* log[mylog1] action write[2016-08-17T03:55:16+00:00] WARN: WHY I NO SEE THIS?
* log[mylog2] action write
Running handlers:
Running handlers complete
现在,第二部分,如果你不想运行你的厨房在“auto”log_level,可以去“/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.10.0/lib/kitchen/provisioner/chef_base .rb" 并将 硬编码日志级别 从 auto 到任何 chef-solo 日志记录许可 https://docs.chef.io/config_rb_solo.html.
从 Kitchen 1.7.0 开始,您可以在 kitchen.yml 中进行配置:
provisioner:
name: chef_zero
log_level: info
请参阅 this page(在 Kitchen 文档中似乎没有链接)
使用较新的厨房,您还可以 kitchen test -D
触发厨房和 chef-client
运行.
的调试输出
我的食谱里有这个:
log mylog1 do
level :info
message 'WHY I NO SEE THIS?'
end
log mylog2 do
level :info
message 'WHY I NO SEE THIS?'
end
这是我做的时候看到的 kitchen converge -l debug
:
...
Converging 3 resources
Recipe: mybook::myrecipe
* log[mylog1] action write
* log[mylog1] action write
...
这个问题有两部分:
首先,通过“-l debug”传递给 kitchen 的日志级别是针对 kitchen 可执行文件,而不是针对 provisioner,在这种情况下,“chef-solo”。因此,如果你 运行 带有调试选项的厨房,你会看到,provisioner 是 运行 log_level 如下“auto”,即使厨房处于调试模式:
[SSH] vagrant@127.0.0.1<{:user_known_hosts_file=>"/dev/null",
:paranoid=>false, :port=>"2222", :compression=>false, :compression_level=>0,
:keepalive=>true, :keepalive_interval=>60, :timeout=>15, :keys_only=>true,
:keys=>["/Users/mpriyada/myWorks/.kitchen/kitchen-vagrant/kitchen-default-centos/.vagrant/machines/default/virtualbox/private_key"],
:auth_methods=>["publickey"], :user=>"vagrant"}> (sh -c 'sudo -E /opt/chef/bin/chef-solo
--config /tmp/kitchen/solo.rb --log_level auto --force-formatter --no-color
--json-attributes /tmp/kitchen/dna.json')
这意味着,在 chef-solo 日志记录优先级中,“auto”与“警告”级别。 因此,如果在 "log" 资源中将日志级别设置为信息,则不会记录任何输出。 尝试下面的代码,您会发现其中的区别:
log "mylog1" do
level :warn
message 'WHY I NO SEE THIS?'
end
log "mylog2" do
level :info
message 'WHY I NO SEE THIS?'
end
输出:
Recipe: test3::default
* log[mylog1] action write[2016-08-17T03:55:16+00:00] WARN: WHY I NO SEE THIS?
* log[mylog2] action write
Running handlers:
Running handlers complete
现在,第二部分,如果你不想运行你的厨房在“auto”log_level,可以去“/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/test-kitchen-1.10.0/lib/kitchen/provisioner/chef_base .rb" 并将 硬编码日志级别 从 auto 到任何 chef-solo 日志记录许可 https://docs.chef.io/config_rb_solo.html.
从 Kitchen 1.7.0 开始,您可以在 kitchen.yml 中进行配置:
provisioner:
name: chef_zero
log_level: info
请参阅 this page(在 Kitchen 文档中似乎没有链接)
使用较新的厨房,您还可以 kitchen test -D
触发厨房和 chef-client
运行.