MojoX::Log::Any - Use the current Log::Any adapter from Mojolicious


  use Mojolicious::Lite;

  # Use Mojo::Log by default when importing
  use MojoX::Log::Any;

  # Or you can specify a different default adapter
  use MojoX::Log::Any default_adapter => 'Stderr';

  get '/' => sub {
    my $c = shift;

    app->log->debug('Using Log::Any::Adapter::MojoLog');

    # They can be redefined
    use Log::Any::Adapter;
    app->log->warning('Using Log::Any::Adapter::Stderr')
      if app->log->is_warning;

    # Or use whatever adapter you've set
    use Log::Log4perl qw(:easy);

    app->log->fatalf('Formatting with %s', 'Log::Any::Adapter::Log4perl');

    $c->render(text => 'OK!');



MojoX::Log::Any makes it easy to use a Log::Any::Adapter from within Mojolicious without getting in the way of the user.

When imported from within a Mojolicious application (of from within a package into which Mojolicious' app function has been exported), it sets that application's log attribute to a Log::Any::Proxy connected to whatever adapter is currently available.

When imported, the logger defaults to using Log::Any::Adapter::MojoLog, which seems to be the currently maintained adapter for Mojo::Log. Any parameters passed to the module's import function are passed as is to the get_logger function from Log::Any, to allow for user customisation and to maintain a coherent interface with that package.


There are numerous packages in the "MojoX::Log" namespace providing an interface with the various different logging mechanisms on CPAN; except Log::Any.

There is also a Log::Any adapter for Mojo::Log, which makes it possible to use that logger from any application using Log::Any; but not Mojolicious apps.

This package attempts to fill that void by offering Mojolicious applications an easy way to plug into the current Log::Any::Adapter (whatever it may be).


This module does a fair amount of meddling in the namespace of the caller and that of the currently available Log::Any::Adapter, so use at your own risk.

The module detects Mojolicious apps by checking the inheritance tree of the caller; while Mojolicious::Lite apps are detected by checking whether that module is loaded.

With Mojolicious::Lite apps, the application's log attribute is simply set to the current adapter. With Mojolicious apps, this overrides the log function in that module to set or get a reference to the Log::Any::Proxy object.

In order to more closely mimic the behaviour of Mojo::Log, this module also installs the Format and History plugins from Log::Any::Plugin, which will make the adapter usable with the default Mojolicious HTML templates.

Since the message formatting in most adapters is hard coded (or configured through external configuration files), the starting set by this module is a no-op. This means that the formatting won't perfectly mimic that of Mojo::Log, but avoids clashes with other logging mechanisms.


The main repository for this distribution is on GitLab, which is where patches and bug reports are mainly tracked. Bug reports can also be sent through the CPAN RT system, or by mail directly to the developers at the address below, although these will not be as closely tracked.



  • José Joaquín Atria <>


This software is copyright (c) 2016-2017 by José Joaquín Atria.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.