package Log::Message::Structured::Stringify::AsJSON; use Moose::Role; use namespace::autoclean; use JSON::Any; use utf8 (); requires 'as_hash'; around 'as_string' => sub { my $orig = shift; my $self = shift; my $hashref = $self->as_hash; my $json = JSON::Any->objToJson( $hashref ); utf8::decode($json) if !utf8::is_utf8($json) and utf8::valid($json); # if it's valid utf8 mark it as such return $json; }; 1; __END__ =pod =head1 NAME Log::Message::Structured::Stringify::AsJSON - JSON log lines =head1 SYNOPSIS package MyLogEvent; use Moose; use namespace::autoclean; 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"} =head1 DESCRIPTION Augments the C method provided by L as a, by delegateing to the C from L module, and thus returning a JSON string. =head1 METHODS =head2 as_string Returns the event as JSON =head1 AUTHOR AND COPYRIGHT Tomas Doran (t0m) C<< >>. Damien Krotkine (dams) C<< >>. =head1 LICENSE Licensed under the same terms as perl itself. =cut