The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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
        /;

        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.

ATTRIBUTES
    The basic Log::Message::Structured role provides the following read only
    attributes:

  hostname
    The host name of the host the event was generated on. Defaults to the
    hostname as returned by Sys::Hostname.

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())

date
    The date and time on which the event occured, as an ISO8601 date time
    string (from MooseX::Types::ISO8601). Defaults to the time the object is
    constructed.

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).

  BUILD
    An empty build method (which will be silently discarded if you have one
    in your class) is provided, and is wrapped to make sure all attributes
    are inflated at construction time.

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.