Use Monolog to log data to files/databases/notifications/...

2.0.4 2023-08-02 10:17 UTC

This package is auto-updated.

Last update: 2024-07-01 00:07:02 UTC


Kirby 3 Monolog

Release Downloads Build Status Coverage Status Maintainability Twitter

Use Monolog to log data to files/databases/notifications/...



monolog()->info('test-' . md5((string) time()), [
    'title' => $page->title(), // field will be normalized
    'page' => $page->id(),


[2019-10-27 19:10:30] default.INFO: test-d4a22afc0f735f551748d17c959b3339 {"title":"Home","page":"home"} []

Page-Method This plugin also registers a Page-Method. It will use the AutoID if available or fallback to hash based on the page->uid().

$page->monolog()->info('test-' . md5((string) time()), []);


[2019-10-27 19:10:30] {HASH}.INFO: test-d4a22afc0f735f551748d17c959b3339 {} []

Commerical Usage

Support open source!

This plugin is free but if you use it in a commercial project please consider to sponsor me or make a donation.
If my work helped you to make some cash it seems fair to me that I might get a little reward as well, right?

Be kind. Share a little. Thanks.

‐ Bruno
Github sponsor Patreon Buy Me a Coffee Paypal dontation Hire me


  • unzip as folder site/plugins/kirby3-monolog or
  • git submodule add site/plugins/kirby3-monolog or
  • composer require bnomei/kirby3-monolog

Similar Plugin

  • Log is simpler and can just write to files


Use the default channel provided by this plugin or define your own Channels. Monolog comes bundled with a lot of handlers, formatters and processors.

  • write to file or syslogs
  • send mails
  • post to slack
  • insert into local or remote databases
  • format as JSON
  • append file/class/method Introspection
  • append a UUID
  • append URI, post method and IP
  • ... create your own


Named Channel => Logger

// write to channel 'default' which writes to file 
// defined at 'bnomei.monolog.file' callback 
$log = \Bnomei\Log::singleton()->channel('default');
// is same as
$log = monolog('default');
// or simply
$log = monolog();

// get a logger instance by channel by name
$securityLogger = monolog('security');

Add records to the Logger


$log = monolog();

// or with method chaining

Message and Context

monolog()->info('Adding a new user', [
    'username' => $user->name(),

// increment Field `visits` in current Page
$page = $page->increment('visits');
monolog()->info('Incrementing Field', [
    'page' => $page->id(),
    'visits' => $page->visits()->toInt(),

Default Channel

The default channel provided by this plugin writes file to the site/logs folder. It will be using the filename format date('Y-m-d') . '.log' and normalizes the data to make logging Kirby Objects easier.

HINT: Without that normalization you would have to call ->value() or cast as string on every Kirby Field before adding its value as context data.

HINT: The default channel logs will be generated at same folder level as your accounts, cache or sessions. This way server setups for zero-downtime deployments are supported out of the box.

Custom Channel


return [
    // other config settings ...
    // (optional) add custom channels
    'bnomei.monolog.channels' => [
        'security' => function() {
            $logger = new \Monolog\Logger('security');
            // add handlers, formatters, processors and then...
            return $logger; 

Custom Channel Extends


return [
    // other config settings ...
    // (optional) add custom channels from other plugins
    'bnomei.monolog.channels.extends' => [
        '', // array of channel definitions in your other option



This plugin is provided "as is" with no guarantee. Use it at your own risk and always test it yourself before using it in a production environment. If you find any issues, please create a new issue.



It is discouraged to use this plugin in any project that promotes racism, sexism, homophobia, animal abuse, violence or any other form of hate speech.