Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
103 lines (75 sloc) 3.28 KB
NAME
Log::Message::Structured - Simple structured log messages
SYNOPSIS
package MyLogEvent;
use Moose;
use namespace::autoclean;
# Note: you MUST implement a 'stringify' method, or compose a role
# that gives you a stringify method.
with qw/
Log::Message::Structured
Log::Message::Structured::Stringify::AsJSON
/;
# Components must be consumed seperately
with qw/
Log::Message::Structured::Component::Date
Log::Message::Structured::Component::Hostname
/;
has foo => ( is => 'ro', required => 1 );
... elsewhere ...
use aliased 'My::Log::Event';
$logger->log(message => Event->new( foo => "bar" ));
# Logs:
{"__CLASS__":"MyLogEvent","foo":1,"date":"2010-03-28T23:15:52Z","hostname":"mymachine.domain"}
DESCRIPTION
Logging lines to a file is a fairly useful and traditional way of
recording what's going on in your application.
However, if you have another use for the same sort of data (for example,
sending to another process via a message queue, or storing in KiokuDB),
then you can be needlessly repeating your data marshalling.
Log::Message::Structured is a VERY VERY SIMPLE set of roles to help you
make small structured classes which represent '"something which
happened"', that you can then either pass around in your application,
log in a traditional manor as a log line, or serialize to JSON for
transmission over the network.
COMPONENTS
The consuming class can include components, that will provide additional
attributes. Here is a list of the components included in the basic
distribution. More third party components may be available on CPAN.
* Log::Message::Structured::Component::Date
* Log::Message::Structured::Component::Hostname
ATTRIBUTES
The basic Log::Message::Structured role provides the following read only
attributes:
epochtime
The date and time on which the event occurred, as an no of seconds since
Jan 1st 1970 (i.e. the output of time())
METHODS
The only non-accessor methods provided are those composed from
MooseX::Storage related to serialization and deserialization.
freeze
Return the instance as a JSON string.
thaw
Inflate an instance of the class from a JSON string.
pack
Return the instance data as a plain data structure (hashref).
pack
Inflate an instance from a plain data structure (hashref).
REQUIRED METHODS
stringify
You must implement a stringify method, or compose a stringification role
for all Log::Message::Structured events. This is so that events will
always be meaningfully loggable be printing them to STDOUT or STDERR, or
logging them in a traditional way in a file.
A note about namespace::autoclean
namespace::autoclean does not work correctly with roles that supply
overloading. Therefore you should instead use:
use namespace::clean -except => 'meta';
instead in all classes using Log::Message::Structured.
SEE ALSO
Log::Message::Structured::Stringify::Sprintf
Log::Message::Structured::Stringify::JSON
AUTHOR AND COPYRIGHT
Tomas Doran (t0m) "<bobtfish@bobtfish.net>".
LICENSE
Licensed under the same terms as perl itself.