Dancer2 没有向日志文件写入任何内容或者可能没有读取配置文件
Dancer2 not writing anything to a log file or maybe not reading config file
这是 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配置选项。我已经尝试从它设置端口,但它没有 "catch" 端口设置,所以问题可能是配置文件无提示地失败了吗?我也试过在同一个文件上设置配置:
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'
它启动并且returns两条路由正确,但是没有创建日志文件,显然上面什么也没有写。控制台上也没有错误,也没有记录到它。它只显示启动消息:>> Dancer2 v0.204001 server 16427 listening on http://0.0.0.0:3000
。日志文件对象似乎已正确创建,但它没有响应。有什么想法吗?
1。确保读取配置文件
我这里唯一的建议是
- 确保安装了 YAML 模块。
- 检查配置文件的权限 - 即用户运行脚本具有读取权限。
- 检查配置文件的位置和名称。它应该是以下之一:a)
appdir/config.yml
、b) appdir/environments/development.yml
或 c) appdir/environments/production.yml
(其中 appdir
是您的 Dancer 应用程序所在的位置)。有关详细信息,请参阅 here。
你还提到你
tried to use the JSON configuration option.
我不确定你的意思。 (配置文件是用 YAML 编写的——不是 JSON。)
2。记录配置
你上面写的
I have also tried code from this test and copied it verbatim (set logger after set engines and low-case file were the only differences)
我认为这可能是您的问题之一。如果您以编程方式设置配置(即不在配置文件中),请尝试放置
set logger => 'File';
之后
set engines => { ...`
即,而不是
set logger => 'File';
set engines => {
logger => {
File => {
log_dir => $log_dir,
log_level => $log_level,
file_name => $log_filename,
}
}
};
尝试以下操作。
set engines => {
logger => {
File => {
log_dir => $log_dir,
log_level => $log_level,
file_name => $log_filename,
}
}
};
set logger => 'File';
第二种方法适合我。前者没有。
app.psgi
看起来像这样:
use v5.14;
use Dancer2;
set content_type => 'application/json';
get '/' => sub {
debug "Hello World";
return to_json config;
};
start;
在同一目录中 config.yml
如下所示:
param: Foo
logger : "File"
engines:
logger:
File:
log_level: core
log_dir: "/tmp"
file_name: "p5hitos.log"
我以 plackup app.psgi
身份启动应用程序,然后以 curl http://0:5000/ | jq
从另一个 window 访问它
日志条目按预期保存在 /tmp/p5hitos.log 中,在命令行的输出中我可以看到所有配置值。默认的和我提供的都一样。
这是 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配置选项。我已经尝试从它设置端口,但它没有 "catch" 端口设置,所以问题可能是配置文件无提示地失败了吗?我也试过在同一个文件上设置配置:
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'
它启动并且returns两条路由正确,但是没有创建日志文件,显然上面什么也没有写。控制台上也没有错误,也没有记录到它。它只显示启动消息:>> Dancer2 v0.204001 server 16427 listening on http://0.0.0.0:3000
。日志文件对象似乎已正确创建,但它没有响应。有什么想法吗?
1。确保读取配置文件
我这里唯一的建议是
- 确保安装了 YAML 模块。
- 检查配置文件的权限 - 即用户运行脚本具有读取权限。
- 检查配置文件的位置和名称。它应该是以下之一:a)
appdir/config.yml
、b)appdir/environments/development.yml
或 c)appdir/environments/production.yml
(其中appdir
是您的 Dancer 应用程序所在的位置)。有关详细信息,请参阅 here。
你还提到你
tried to use the JSON configuration option.
我不确定你的意思。 (配置文件是用 YAML 编写的——不是 JSON。)
2。记录配置
你上面写的
I have also tried code from this test and copied it verbatim (set logger after set engines and low-case file were the only differences)
我认为这可能是您的问题之一。如果您以编程方式设置配置(即不在配置文件中),请尝试放置
set logger => 'File';
之后
set engines => { ...`
即,而不是
set logger => 'File';
set engines => {
logger => {
File => {
log_dir => $log_dir,
log_level => $log_level,
file_name => $log_filename,
}
}
};
尝试以下操作。
set engines => {
logger => {
File => {
log_dir => $log_dir,
log_level => $log_level,
file_name => $log_filename,
}
}
};
set logger => 'File';
第二种方法适合我。前者没有。
app.psgi
看起来像这样:
use v5.14;
use Dancer2;
set content_type => 'application/json';
get '/' => sub {
debug "Hello World";
return to_json config;
};
start;
在同一目录中 config.yml
如下所示:
param: Foo
logger : "File"
engines:
logger:
File:
log_level: core
log_dir: "/tmp"
file_name: "p5hitos.log"
我以 plackup app.psgi
身份启动应用程序,然后以 curl http://0:5000/ | jq
日志条目按预期保存在 /tmp/p5hitos.log 中,在命令行的输出中我可以看到所有配置值。默认的和我提供的都一样。