Solstice::Logger::Database - Dispatches a log message to a database


Solstice documentation Contained in the Solstice distribution.

Index


Code Index:

NAME

Top

Solstice::Logger::Database - Dispatches a log message to a database

SYNOPSIS

Top

DESCRIPTION

Top

Export

No symbols exported.

Methods

writeLog($message)

Modules Used

Solstice::Logger.

AUTHOR

Top

Catalyst Group, <catalyst@u.washington.edu>

VERSION

Top

Version $Revision: 3177 $

COPYRIGHT

Top


Solstice documentation Contained in the Solstice distribution.
package Solstice::Logger::Database;

# $Id: Database.pm 2393 2005-07-18 17:12:40Z jlaney $

use strict;
use warnings;
use 5.006_000;

use base qw(Solstice::Logger);

use Solstice::Database;
use Solstice::Model::LogMessage;

use constant TRUE  => 1;
use constant FALSE => 0;

our ($VERSION) = ('$Revision: 1 $' =~ /^\$Revision:\s*([\d.]*)/);

sub writeLog {
    my $self   = shift;
    my $message = shift;
    
    return FALSE unless (defined $message && defined $message->getContent());
    
    my $service = $self->getLogService('Solstice');

    if($service->get('logger_db_already_logging')){
        warn "Recursive writeLog() call detected! I think we died while logging.";
        return FALSE;
    }
    $service->set('logger_db_already_logging', TRUE);
    
    my $config  = $self->getConfigService();
    my $db_name = $config->getDBName();
    my $log_db_name = $config->get('log_db_name');

    unless ($log_db_name) {
        warn "Config variable 'log_db_name' not defined!";
        return FALSE;
    }

    my $db = Solstice::Database->new();
    $db->writeQuery("INSERT INTO $log_db_name.Log
                        (timestamp, user, acting_user, namespace, type, model_id, model, content)
                VALUES (?,?,?,?,?,?,?,?)", 
        $message->getDateTime() ? $message->getDateTime->toSQL() : undef,
        $message->getUsername(),
        $message->getActingUsername(),
        $message->getNamespace(),
        $message->getLogName(),
        $message->getModelID(),
        $message->getModel(),
        $message->getContent()
    );
    
    $service->set('logger_db_already_logging', FALSE);

    return TRUE;
}


1;
__END__