A Midsummer Night's Dream

package Catalyst::Logger; # no need for Base
use base qw( Class::Factory );

__PACKAGE__->register_factory_type(
        stream   => 'Catalyst::Logger::Stream' );
__PACKAGE__->register_factory_type(
        apache   => 'Catalyst::Logger::Apache' );
...

my $logger = Catalyst::Logger(
        'file',
        { filename     => '/var/log/my_place/app.log',
          log_priority => 'INFO', 
          show_source  => 1,
          show_time    => 1,
        } );