The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;

use Getopt::Long;
use Log::Log4perl;
use Gearman::Worker;
use Log::Log4perl;

my @job_servers;
my ($job_name, $log_conf, $verbose) = ('gearman-logger');

GetOptions("job_server=s@" => \@job_servers,
           "logconf=s"     => \$log_conf,
           "jobname=s"     => \$job_name,
           "verbose"       => \$verbose) or die;

@job_servers = ('127.0.0.1') unless @job_servers;
die 'must have logconf file with --logconf' unless $log_conf;
Log::Log4perl->init_and_watch($log_conf);

my $worker = Gearman::Worker->new;
$worker->job_servers(@job_servers);
$worker->register_function($job_name => \&log_me);
$worker->work while 1;

sub log_me {
    my $job = shift;
    my ($level, $category, $message) = split('\|',$job->arg, 3);
    $level = lc($level);
    Log::Log4perl->get_logger($category)->$level($message);
    return 0;
}