diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2017-12-12 09:26:02 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2017-12-12 09:26:02 +0200 |
commit | 1a0640483dbf546f335e85fb7cca9a8d7bac7fe3 (patch) | |
tree | 6179f1abc34af338c065d75b85f76a49e0ad4dc9 | |
download | mojosyslog-1a0640483dbf546f335e85fb7cca9a8d7bac7fe3.tar.gz mojosyslog-1a0640483dbf546f335e85fb7cca9a8d7bac7fe3.tar.bz2 |
Initial commit
-rw-r--r-- | .gitignore | 14 | ||||
-rw-r--r-- | LICENSE | 201 | ||||
-rw-r--r-- | MANIFEST.SKIP | 63 | ||||
-rw-r--r-- | Makefile.PL | 27 | ||||
-rw-r--r-- | lib/Mojo/Log/Syslog.pm | 146 |
5 files changed, 451 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8666cce --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +*~ +\#*# +.#* +*.bak +*.tar* +.emacs.* +/tmp/ +/debug.sh +core +/MANIFEST +/MYMETA.* +/Makefile +/blib +/pm_to_blib @@ -0,0 +1,201 @@ + The Artistic License 2.0 + + Copyright (c) 2000-2006, The Perl Foundation. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + +This license establishes the terms under which a given free software +Package may be copied, modified, distributed, and/or redistributed. +The intent is that the Copyright Holder maintains some artistic +control over the development of that Package while still keeping the +Package available as open source and free software. + +You are always permitted to make arrangements wholly outside of this +license directly with the Copyright Holder of a given Package. If the +terms of this license do not permit the full use that you propose to +make of the Package, you should contact the Copyright Holder and seek +a different licensing arrangement. + +Definitions + + "Copyright Holder" means the individual(s) or organization(s) + named in the copyright notice for the entire Package. + + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + + "You" and "your" means any person who would like to copy, + distribute, or modify the Package. + + "Package" means the collection of files distributed by the + Copyright Holder, and derivatives of that collection and/or of + those files. A given Package may consist of either the Standard + Version, or a Modified Version. + + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + + "Distributor Fee" means any fee that you charge for Distributing + this Package or providing support for this Package to another + party. It does not mean licensing fees. + + "Standard Version" refers to the Package if it has not been + modified, or has been modified only in ways explicitly requested + by the Copyright Holder. + + "Modified Version" means the Package, if it has been changed, and + such changes were not explicitly requested by the Copyright + Holder. + + "Original License" means this Artistic License as Distributed with + the Standard Version of the Package, in its current version or as + it may be modified by The Perl Foundation in the future. + + "Source" form means the source code, documentation source, and + configuration files for the Package. + + "Compiled" form means the compiled bytecode, object code, binary, + or any other form resulting from mechanical transformation or + translation of the Source form. + + +Permission for Use and Modification Without Distribution + +(1) You are permitted to use the Standard Version and create and use +Modified Versions for any purpose without restriction, provided that +you do not Distribute the Modified Version. + + +Permissions for Redistribution of the Standard Version + +(2) You may Distribute verbatim copies of the Source form of the +Standard Version of this Package in any medium without restriction, +either gratis or for a Distributor Fee, provided that you duplicate +all of the original copyright notices and associated disclaimers. At +your discretion, such verbatim copies may or may not include a +Compiled form of the Package. + +(3) You may apply any bug fixes, portability changes, and other +modifications made available from the Copyright Holder. The resulting +Package will still be considered the Standard Version, and as such +will be subject to the Original License. + + +Distribution of Modified Versions of the Package as Source + +(4) You may Distribute your Modified Version as Source (either gratis +or for a Distributor Fee, and with or without a Compiled form of the +Modified Version) provided that you clearly document how it differs +from the Standard Version, including, but not limited to, documenting +any non-standard features, executables, or modules, and provided that +you do at least ONE of the following: + + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that the + Copyright Holder may include your modifications in the Standard + Version. + + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. In + addition, the Modified Version must bear a name that is different + from the name of the Standard Version. + + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to others + under + + (i) the Original License or + + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the same + licensing terms that apply to the copy that the licensee + received, and requires that the Source form of the Modified + Version, and of any works derived from it, be made freely + available in that license fees are prohibited but Distributor + Fees are allowed. + + +Distribution of Compiled Forms of the Standard Version +or Modified Versions without the Source + +(5) You may Distribute Compiled forms of the Standard Version without +the Source, provided that you include complete instructions on how to +get the Source of the Standard Version. Such instructions must be +valid at the time of your distribution. If these instructions, at any +time while you are carrying out such distribution, become invalid, you +must provide new instructions on demand or cease further distribution. +If you provide valid instructions or cease distribution within thirty +days after you become aware that the instructions are invalid, then +you do not forfeit any of your rights under this license. + +(6) You may Distribute a Modified Version in Compiled form without +the Source, provided that you comply with Section 4 with respect to +the Source of the Modified Version. + + +Aggregating or Linking the Package + +(7) You may aggregate the Package (either the Standard Version or +Modified Version) with other packages and Distribute the resulting +aggregation provided that you do not charge a licensing fee for the +Package. Distributor Fees are permitted, and licensing fees for other +components in the aggregation are permitted. The terms of this license +apply to the use and Distribution of the Standard or Modified Versions +as included in the aggregation. + +(8) You are permitted to link Modified and Standard Versions with +other works, to embed the Package in a larger work of your own, or to +build stand-alone binary or bytecode versions of applications that +include the Package, and Distribute the result without restriction, +provided the result does not expose a direct interface to the Package. + + +Items That are Not Considered Part of a Modified Version + +(9) Works (including, but not limited to, modules and scripts) that +merely extend or make use of the Package, do not, by themselves, cause +the Package to be a Modified Version. In addition, such works are not +considered parts of the Package itself, and are not subject to the +terms of this license. + + +General Provisions + +(10) Any use, modification, and distribution of the Standard or +Modified Versions is governed by this Artistic License. By using, +modifying or distributing the Package, you accept this license. Do not +use, modify, or distribute the Package, if you do not accept this +license. + +(11) If your Modified Version has been derived from a Modified +Version made by someone other than you, you are nevertheless required +to ensure that your Modified Version complies with the requirements of +this license. + +(12) This license does not grant you the right to use any trademark, +service mark, tradename, or logo of the Copyright Holder. + +(13) This license includes the non-exclusive, worldwide, +free-of-charge patent license to make, have made, use, offer to sell, +sell, import and otherwise transfer the Package with respect to any +patent claims licensable by the Copyright Holder that are necessarily +infringed by the Package. If you institute patent litigation +(including a cross-claim or counterclaim) against any party alleging +that the Package constitutes direct or contributory patent +infringement, then this Artistic License to you shall terminate on the +date that such litigation is filed. + +(14) Disclaimer of Warranty: +THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS +IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL +LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP new file mode 100644 index 0000000..58696be --- /dev/null +++ b/MANIFEST.SKIP @@ -0,0 +1,63 @@ +# Avoid version control files. +\bRCS\b +\bCVS\b +\bSCCS\b +,v$ +\B\.svn\b +\B\.git\b +\B\.gitignore\b +\b_darcs\b +\B\.cvsignore$ + +# Avoid VMS specific MakeMaker generated files +\bDescrip.MMS$ +\bDESCRIP.MMS$ +\bdescrip.mms$ + +# Avoid Makemaker generated and utility files. +\bMANIFEST\.bak +\bMakefile$ +\bblib/ +\bMakeMaker-\d +\bpm_to_blib\.ts$ +\bpm_to_blib$ +\bblibdirs\.ts$ # 6.18 through 6.25 generated this + +# Avoid Module::Build generated and utility files. +\bBuild$ +\b_build/ +\bBuild.bat$ +\bBuild.COM$ +\bBUILD.COM$ +\bbuild.com$ + +# Avoid temp and backup files. +~$ +\.old$ +\#$ +\b\.# +\.bak$ +\.tmp$ +\.# +\.rej$ + +# Avoid OS-specific files/dirs +# Mac OSX metadata +\B\.DS_Store +# Mac OSX SMB mount metadata files +\B\._ + +# Avoid Devel::Cover and Devel::CoverX::Covered files. +\bcover_db\b +\bcovered\b + +# Avoid MYMETA files +^MYMETA\. + +^debug.sh +^tmp +^buildreq +^\.emacs\.* + +\.tar$ +\.tar\.gz$ diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..8922c55 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,27 @@ +use 5.010001; + +use strict; +use ExtUtils::MakeMaker; +use Module::Metadata; + +WriteMakefile( + NAME => 'Mojo::Log::Syslog', + VERSION_FROM => 'lib/Mojo/Log/Syslog.pm', + ABSTRACT_FROM => 'lib/Mojo/Log/Syslog.pm', + AUTHOR => 'Sergey Poznyakoff <gray@gnu.org>', + LICENSE => 'artistic_2', + PREREQ_PM => { + 'Mojolicious' => '7.58', + 'Sys::Syslog' => 0 + }, + META_MERGE => { + 'meta-spec' => { version => 2 }, + resources => { + repository => { + type => 'git', + url => 'git://git.gnu.org.ua/mojosyslog.git', + web => 'http://git.gnu.org.ua/cgit/mojosyslog.git/', + }, + } + } +); diff --git a/lib/Mojo/Log/Syslog.pm b/lib/Mojo/Log/Syslog.pm new file mode 100644 index 0000000..621301f --- /dev/null +++ b/lib/Mojo/Log/Syslog.pm @@ -0,0 +1,146 @@ +package Mojo::Log::Syslog; +use strict; +use warnings; +use Mojo::Base 'Mojo::Log'; +use File::Basename 'basename'; +use Sys::Syslog qw(:standard :macros); +use Carp; + +our $VERSION = '1.0'; + +sub new { + my $class = shift; + local %_ = @_; + my $ident = delete $_{ident} || basename($0); + my $facility = delete $_{facility} || LOG_USER; + my $level = delete $_{level} || 'debug'; + my $logopt = delete $_{logopt} || 'ndelay,pid'; + if (ref($logopt) eq 'ARRAY') { + $logopt = join(',', @$logopt); + } + croak "unrecognized arguments" if keys(%_); + openlog($ident, $logopt, $facility); + return $class->SUPER::new(level => $level); +} + +sub debug { shift->_syslog(debug => LOG_DEBUG => @_) } +sub warn { shift->_syslog(warn => LOG_WARN => @_) } +sub info { shift->_syslog(info => LOG_INFO => @_) } +sub error { shift->_syslog(error => LOG_ERROR => @_) } +sub fatal { shift->_syslog(fatal => LOG_CRIT => @_) } + +sub _syslog { + my ($self, $level, $prio, @args) = @_; + $self->{_priority} = $prio; + $self->${\ "SUPER::$level"}(@args); +} + +sub append { + my ($self, $msg) = @_; + syslog($self->{_priority}, "%s", $msg); +} + +has format => sub { shift->short ? \&_fmt_short : \&_fmt_long }; + +sub _fmt_short { + my (undef, undef, @lines) = @_; + return join("\n", @lines); +} + +sub _fmt_long { + my (undef, $level, @lines) = @_; + return "[$level]: ".join("\n", @lines); +} + +1; +__END__ + +=head1 NAME + +Mojo::Log::Syslog - syslog for Mojo projects + +=head1 SYNOPSIS + + use Mojo::Log::Syslog; + + $logger = new Mojo::Log::Syslog(facility => 'user', + ident => 'myapp', + level => 'warn'); + + app->log($logger); + +=head1 DESCRIPTION + +Syslog-based logger for Mojo applications. + +=head1 CONSTRUCTOR + +The B<Mojo::Log::Syslog> constructor takes the following keyword arguments, +all of which are optional: + +=over 4 + +=item B<facility =E<gt>> I<FACILITY> + +Sets the syslog facility to use. Valid facility names are: C<auth>, +C<authpriv>, C<cron>, C<daemon>, C<ftp>, C<kern>, C<local0> through +C<local7>, C<lpr>, C<mail>, C<news>, C<user>, and C<uucp>. See also +B<Sys::Syslog>(3), section B<Facilities>. + +The default is C<user>. + +=item B<ident =E<gt>> I<STRING> + +Syslog message identifier. Defaults to the base name from B<$0>. + +=item B<logopt =E<gt>> I<OPTLIST> + +Defines the list of options for B<openlog>. I<OPTLIST> is either a string +with comma-separated option names or a list reference containing option +names. The following two options are equivalent: + + logopt => "ndelay,pid,nowait" + + logopt => [qw(ndeay pid nowait)] + +See B<Sys::Syslog>(3) for a list of available option names. + +Defaults to C<ndelay,pid>. + +=item B<level E<gt>> I<NAME> + +Sets minimum logging level. See B<Mojo::Log>, for a list of levels. + +=back + +=head1 EXAMPLE + +=head2 Using with Mojolicious::Lite + + use Mojolicious::Lite; + use Mojo::Log::Syslog; + + my $logger = new Mojo::Log::Syslog(facility => 'local0', + level => warn); + app->log($logger); + +=head2 Using with Mojolicious + + package MyApp; + use Mojo::Base 'Mojolicious'; + + sub startup { + my $self = shift; + + my $logger = new Mojo::Log::Syslog(facility => 'local0', + level => warn); + $self->app->log($logger); + } + +=head1 SEE ALSO + +B<Mojo::Log>(3), +L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicious.org>, + +=cut + |