Security Advisories (10)
CPANSA-Mojolicious-2022-03 (2022-12-10)

Mojo::DOM did not correctly parse <script> tags.

CPANSA-Mojolicious-2021-02 (2021-06-01)

Small sessions could be used as part of a brute-force attack to decode the session secret.

CVE-2021-47208 (2021-03-16)

A bug in format detection can potentially be exploited for a DoS attack.

CVE-2018-25100 (2018-02-13)

Mojo::UserAgent::CookieJar leaks old cookies because of the missing host_only flag on empty domain.

CPANSA-Mojolicious-2015-01 (2015-02-02)

Directory traversal on Windows

CPANSA-Mojolicious-2018-03 (2018-05-19)

Mojo::UserAgent was not checking peer SSL certificates by default.

CVE-2020-36829 (2020-11-10)

Mojo::Util secure_compare can leak the string length. By immediately returning when the two strings are not the same length, the function allows an attacker to guess the length of the secret string using timing attacks.

CPANSA-Mojolicious-2018-02 (2018-05-11)

GET requests with embedded backslashes can be used to access local files on Windows hosts

CPANSA-Mojolicious-2014-01 (2014-10-07)

Context sensitivity of method param could lead to parameter injection attacks.

CVE-2024-58134 (2025-05-03)

Mojolicious versions from 0.999922 for Perl uses a hard coded string, or the application's class name, as a HMAC session secret by default. These predictable default secrets can be exploited to forge session cookies. An attacker who knows or guesses the secret could compute valid HMAC signatures for the session cookie, allowing them to tamper with or hijack another user's session.

NAME

Mojo::Log - Simple logger

SYNOPSIS

use Mojo::Log;

# Log to STDERR
my $log = Mojo::Log->new;

# Customize log file location and minimum log level
my $log = Mojo::Log->new(path => '/var/log/mojo.log', level => 'warn');

# Log messages
$log->debug('Why is this not working?');
$log->info('FYI: it happened again.');
$log->warn('This might be a problem.');
$log->error('Garden variety error.');
$log->fatal('Boom!');

DESCRIPTION

Mojo::Log is a simple logger for Mojo projects.

EVENTS

Mojo::Log inherits all events from Mojo::EventEmitter and can emit the following new ones.

message

$log->on(message => sub {
  my ($log, $level, @lines) = @_;
  ...
});

Emitted when a new message gets logged.

$log->unsubscribe('message');
$log->on(message => sub {
  my ($log, $level, @lines) = @_;
  say "$level: ", @lines;
});

ATTRIBUTES

Mojo::Log implements the following attributes.

format

my $cb = $log->format;
$log   = $log->format(sub {...});

A callback for formatting log messages.

$log->format(sub {
  my ($time, $level, @lines) = @_;
  return "[Thu May 15 17:47:04 2014] [info] I ♥ Mojolicious.\n";
});

handle

my $handle = $log->handle;
$log       = $log->handle(IO::Handle->new);

Log filehandle used by default "message" event, defaults to opening "path" or STDERR.

history

my $history = $log->history;
$log        = $log->history([[time, 'debug', 'That went wrong.']]);

The last few logged messages.

level

my $level = $log->level;
$log      = $log->level('debug');

Active log level, defaults to debug. Available log levels are debug, info, warn, error and fatal, in that order. Note that the MOJO_LOG_LEVEL environment variable can override this value.

max_history_size

my $size = $log->max_history_size;
$log     = $log->max_history_size(5);

Maximum number of logged messages to store in "history", defaults to 10.

path

my $path = $log->path
$log     = $log->path('/var/log/mojo.log');

Log file path used by "handle".

METHODS

Mojo::Log inherits all methods from Mojo::EventEmitter and implements the following new ones.

append

$log->append("[Thu May 15 17:47:04 2014] [info] I ♥ Mojolicious.\n");

Append message to "handle".

debug

$log = $log->debug('You screwed up, but that is ok.');
$log = $log->debug('All', 'cool!');

Log debug message.

error

$log = $log->error('You really screwed up this time.');
$log = $log->error('Wow', 'seriously!');

Log error message.

fatal

$log = $log->fatal('Its over...');
$log = $log->fatal('Bye', 'bye!');

Log fatal message.

info

$log = $log->info('You are bad, but you prolly know already.');
$log = $log->info('Ok', 'then!');

Log info message.

is_level

my $bool = $log->is_level('debug');

Check log level.

is_debug

my $bool = $log->is_debug;

Check for debug log level.

is_error

my $bool = $log->is_error;

Check for error log level.

is_fatal

my $bool = $log->is_fatal;

Check for fatal log level.

is_info

my $bool = $log->is_info;

Check for info log level.

is_warn

my $bool = $log->is_warn;

Check for warn log level.

log

$log = $log->log(debug => 'This should work.');
$log = $log->log(debug => 'This', 'too!');

Emit "message" event.

new

my $log = Mojo::Log->new;

Construct a new Mojo::Log object and subscribe to "message" event with default logger.

warn

$log = $log->warn('Dont do that Dave...');
$log = $log->warn('No', 'really!');

Log warn message.

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicio.us.