sub
logdir {
my
$altpath
= setting(
'log_path'
);
return
$altpath
if
(
$altpath
);
my
$logroot
= setting(
'appdir'
);
if
(
$logroot
) {
if
(!-d
$logroot
&& not
mkdir
$logroot
) {
carp
"log directory $logroot doesn't exist, am unable to create it"
;
return
;
}
}
else
{
unless
(
$logroot
= tempdir(
CLEANUP
=> 1,
TMPDIR
=> 1)) {
carp
"cannot create temp log directory"
;
return
;
}
}
unless
(-w
$logroot
and -x
$logroot
) {
my
$perm
= (
stat
$logroot
)[2] & 07777;
chmod
(
$perm
| 0700,
$logroot
);
unless
(-w
$logroot
and -x
$logroot
) {
carp
"log directory $logroot isn't writable/executable and can't chmod it"
;
return
;
}
}
return
Dancer::FileUtils::path_no_verify(
$logroot
,
'logs'
);
}
sub
init {
my
$self
=
shift
;
$self
->SUPER::init(
@_
);
my
$logdir
= logdir();
return
unless
(
$logdir
);
my
$logfile
= setting(
'environment'
);
mkdir
(
$logdir
)
unless
(-d
$logdir
);
$logfile
= File::Spec->catfile(
$logdir
,
"$logfile.log"
);
my
$fh
;
unless
(
$fh
= open_file(
'>>'
,
$logfile
)) {
carp
"unable to create or append to $logfile"
;
return
;
}
$fh
->autoflush;
$self
->{logfile} =
$logfile
;
$self
->{fh} =
$fh
;
}
sub
_log {
my
(
$self
,
$level
,
$message
) =
@_
;
my
$fh
=
$self
->{fh};
return
unless
(
ref
$fh
&&
$fh
->opened);
$fh
->
print
(
$self
->format_message(
$level
=>
$message
))
or carp
"writing to logfile $self->{logfile} failed"
;
}
1;