【发布时间】:2018-06-24 11:19:03
【问题描述】:
这是 Dancer2 迷你应用:
#!/usr/bin/env perl
use v5.14;
use Dancer2;
use File::Slurper qw(read_text);
set content_type => 'application/json';
my $path;
for my $p ( qw( hitos.json /data/hitos.json ./data/hitos.json ../data/hitos.json) ) {
if ( -r $p ) {
$path = $p;
}
}
my $hitos = from_json read_text($path);
get '/status' => sub {
return to_json { status => 'OK' };
};
get '/all' => sub {
return to_json $hitos;
};
start;
使用这个配置文件:
logger : "File"
engines:
logger:
File:
log_level: core
log_dir: "/tmp"
file_name: "p5hitos.log"
我已将其命名为 config.yml 和 config.yaml,并且还尝试使用 JSON 配置选项。我试图从中设置端口,但它没有“捕获”端口设置,所以问题可能是配置文件静默失败吗?我也尝试在同一个文件上设置配置:
set content_type => 'application/json';
set logger => "File";
set port => 31415;
set engines => { logger => { File => { log_level => "core",
log_dir => ".",
file_name => "p5hitos.log" }}};
在这种情况下,端口和内容类型设置正确,但仍然无法使用此 log_dir 或 /tmp。我还尝试了来自this test 的代码并逐字复制它(在设置引擎和小写file 之后设置记录器是唯一的区别)。它不会改变。 config 还是一样的:
0 HASH(0x2a3d070)
'appdir' => '/home/jmerelo/'
'apphandler' => 'Standalone'
'behind_proxy' => 0
'charset' => ''
'content_type' => 'application/json'
'engines' => HASH(0x2947a58)
'logger' => HASH(0x2947008)
'File' => HASH(0xa438b0)
'file_name' => 'p5hitos.log'
'log_dir' => '/tmp'
'environment' => 'development'
'host' => '0.0.0.0'
'logger' => Dancer2::Logger::File=HASH(0x2a7ef58)
'app_name' => 'main'
'config' => HASH(0x2a7f1b0)
empty hash
'environment' => 'development'
'file_name' => 'p5hitos.log'
'location' => '/home/jmerelo/'
'log_dir' => '/tmp'
'log_format' => '[%a:%P] %L @%T> %m in %f l. %l'
'log_level' => 'debug'
'no_server_tokens' => 0
'port' => 31415
'public_dir' => '/home/jmerelo/public'
'route_handlers' => ARRAY(0x2779490)
0 ARRAY(0x27791d8)
0 'AutoPage'
1 1
'startup_info' => 1
'static_handler' => undef
'template' => 'Tiny'
'traces' => 0
'views' => '/home/jmerelo/views'
它启动并正确返回了两条路由,但没有创建日志文件,显然上面没有写任何内容。控制台上也没有错误,也没有登录。它只显示启动消息:>> Dancer2 v0.204001 server 16427 listening on http://0.0.0.0:3000。日志文件对象似乎已正确创建,但它没有响应。有什么想法吗?
【问题讨论】:
-
关于您的第一个问题(确保实际上正在读取“config.yml”),可能值得检查一下配置文件上的权限设置是否正确(即,在哪个用户下使用 plackup / Starman正在运行实际上具有读取它的权限)。而且 - 以防万一 - 它位于正确的目录中(PSGI 应用程序的根目录)?
-
这个项目的目录结构是什么?
-
这就是你所看到的,那个简单的文件和配置文件,都在同一个目录,同一个权限,并以用户身份运行。
标签: perl web-services logging dancer