flowpack/monolog

There is no license information available for the latest version (2.1.0) of this package.

Monolog integration for Flow

Installs: 19 878

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 2

Forks: 0

Open Issues: 0

Type:neos-package

2.1.0 2024-01-17 09:49 UTC

This package is auto-updated.

Last update: 2024-12-05 14:34:47 UTC


README

Provides a monolog factory to be used with Flow.

This package replaces all Neos Flow logs (Security, System, Query, I18n) with Monolog by default. To change that and the handlers check the Settings.yaml. See also configuration notes below.

👻

The monolog format is slightly different than the default Flow log file format, also the configured monolog handler does no log rotation like the Flow log does, so you need to take care of that.

Installation

Use composer to install this package:

composer require flowpack/monolog

All Framework logs should now be in monolog format and you need to add configuration for any other logs you might want.

Configuration

You have several ways to configure monolog with this package, the easiest is seen in the configuration for the Neos Flow logs in this package:

Neos:
  Flow:
    log:
      psr3:
        'Flowpack\Monolog\LoggerFactory':
          # name of the logger as Flow addresses it, eg. "systemLogger"
          '<name of the logger>':
            handler:
              # unique name for this handler in this log, for extending the configuration
              '<identifier for this handler>':
                className: '<monolog compatible handler class name fully qualified>'
                # sorting for this handler if you want it deterministic with overwrites
                position: 100
                # arguments given to the handler, zero index based, as the handler constructor expects them
                arguments:
                  0: '<the first argument given to the constructor of the handler>'
              # another handler could follow here

Another option is to create preset handlers, e.g. if you need to use the same handler with the same configuration in multiple places, no overrides of this default configuration is possible at this time:

Flowpack:
  Monolog:
    handler:
      # unique identifier of this handler (preset)
      '<presetName>':
        className: '<monolog compatible handler class name fully qualified>'
        # note that preset handlers currently cannot have a position, they are sorted as configured
        # arguments given to the handler, zero index based, as the handler constructor expects them
        arguments:
            0: '<the first argument given to the constructor of the handler>'

Neos:
  Flow:
    log:
      psr3:
        'Flowpack\Monolog\LoggerFactory':
          # name of the logger as Flow addresses it
          '<name of the logger>':
            handler:
              # the presetName should be the same as in above preset configuration
              '<identifier for this handler>': '<presetName>'

⚠️ Note that using presets does not work for loggers needed early in the bootstrap, as the settings for the Flowpack.Monolog package itself are injected rather late and the preset is only available afterwards.

Handlers

For more information about handlers and their configuration check also the monolog documentation on handlers, formatters & processors.

Formatters

To add a formatter to a handler, configure it like this:

Neos:
  Flow:
    log:
      psr3:
        'Flowpack\Monolog\LoggerFactory':
          '<name of the logger>':
            handler:
              '<identifier for this handler>':
                className: '<monolog compatible handler class name fully qualified>'
                arguments:
                  0: '<the first argument given to the constructor of the handler>'
                # any formatter compatible with monolog
                formatterClassName: '<monolog compatible formatter class name fully qualified>'
                # optional arguments for the formatter
                formatterArguments:
                  0: '<the first argument given to the constructor of the formatter>'

For this to work the used handler must implement monolog's FormattableHandlerInterface.

For more information about formatters and their configuration check also the monolog documentation on handlers, formatters & processors.