package Parse::Dia::SQL::Logger;

# $Id: Logger.pm,v 1.6 2009/03/13 14:17:23 aff Exp $

=pod

=head1 NAME

Parse::Dia::SQL::Logger - Wrapper for Log::Log4perl

=head1 SYNOPSIS

    use Parse::Dia::SQL::Logger;
    my $logger = Parse::Dia::SQL::Logger::->new();
    my $log = $logger->get_logger(__PACKAGE__);
    $log->error('error');
    $log->info('info');

=head1 DESCRIPTION

This module is a wrapper around Log::Log4perl. 

=head1 SEE ALSO

  Log::Log4perl

Make appender_thresholds_adjust return number of appenders changed:

  https://rt.cpan.org/Ticket/Display.html?id=43426

=cut

use warnings;
use strict;

use Log::Log4perl;
use Log::Dispatch::FileRotate;

use constant APPENDER_THRESHOLDS_ADJUST_LOGOFF =>  7;
use constant APPENDER_THRESHOLDS_ADJUST_LOGON  => -7;

=head2 new

The constructor.

=cut

sub new {
  my ( $class, %param ) = @_;

  my $self = {
    log         => undef,
  };

  bless( $self, $class );

  $self->_init_log();
  return $self;
}

# Initialize the logger.  The commented lines are deliberately left to
# serve as exmples.
sub _init_log {
  my $self = shift;

  # Init logging
  my $conf = q(
    # Main logger for Parse::Dia::SQL
#    log4perl.category.Parse::Dia::SQL        = INFO, file, screen-main
#    log4perl.category.Parse::Dia::SQL        = DEBUG, file, screen-main
#    log4perl.category.Parse::Dia::SQL        = WARN, screen-main
#    log4perl.category.Parse::Dia::SQL        = DEBUG, screen-main
    log4perl.category.Parse::Dia::SQL        = INFO, screen-main
    log4perl.appender.screen-main         = Log::Log4perl::Appender::Screen
    log4perl.appender.screen-main.stderr  = 1
    log4perl.appender.screen-main.layout  = PatternLayout
    log4perl.appender.screen-main.layout.ConversionPattern=[%p] %m%n 

    log4perl.appender.file           = Log::Dispatch::FileRotate
    log4perl.appender.file.filename  = dia-sql.log
    log4perl.appender.file.mode      = append
    log4perl.appender.file.size      = 100000
    log4perl.appender.file.max       = 5
    log4perl.appender.file.layout    = PatternLayout
    log4perl.appender.file.layout.ConversionPattern=[%p] %d %F:%L: %m%n


    # Separate logger for Output::*
#    log4perl.category.Parse::Dia::SQL::Output  = DEBUG, screen-output
    log4perl.category.Parse::Dia::SQL::Output  = INFO, screen-output
    log4perl.appender.screen-output            = Log::Log4perl::Appender::Screen
    log4perl.appender.screen-output.stderr     = 1
    log4perl.appender.screen-output.layout     = PatternLayout
    log4perl.appender.screen-output.layout.ConversionPattern=[%p] %m%n 
    log4perl.additivity.Parse::Dia::SQL::Output  = 0

    # Separate logger for Utils.pm
#    log4perl.category.Parse::Dia::SQL::Utils  = DEBUG, screen-utils
    log4perl.category.Parse::Dia::SQL::Utils  = INFO, screen-utils
    log4perl.appender.screen-utils            = Log::Log4perl::Appender::Screen
    log4perl.appender.screen-utils.stderr     = 1
    log4perl.appender.screen-utils.layout     = PatternLayout
    log4perl.appender.screen-utils.layout.ConversionPattern=[%p] %m%n 
    log4perl.additivity.Parse::Dia::SQL::Utils  = 0

  );
  
  Log::Log4perl::init( \$conf );

  # Adjust call stack for caller class, see man Log::Log4perl
  $Log::Log4perl::caller_depth = 1;
    
  return 1;
}

=head2 get_logger

  Return logger singleton object.

=cut

sub get_logger {
    my ($self, $name) = @_;
    #return $self->{logger};
    return Log::Log4perl::->get_logger($name);
}


=head2 log_off

Decrease log level on all appenders.
1    
=cut

sub log_off {
  my $self = shift;

  # Make sure it works also in case this is
  # called as function before object is blessed.
  _init_log() if ( !Log::Log4perl->initialized() );

  Log::Log4perl->appender_thresholds_adjust(APPENDER_THRESHOLDS_ADJUST_LOGOFF);

  return 1;
}

=head2 log_on

Increase log level on all appenders.
    
=cut

sub log_on {
  my $self = shift;

  # Make sure it works also in case this is
  # called as function before object is blessed.
  _init_log() if ( !Log::Log4perl->initialized() );

  Log::Log4perl->appender_thresholds_adjust(APPENDER_THRESHOLDS_ADJUST_LOGON);

  return 1;
}


1;

__END__

# End of Parse::Dia::SQL::Logger