Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Yii2 Psr Log Target Laravel Package

samdark/yii2-psr-log-target

Yii2 log target that forwards Yii log messages to any PSR-3 logger (e.g., Monolog). Configure PsrTarget in the log component, choose levels, and optionally add real event timestamps to the log context for accurate timing.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require samdark/yii2-psr-log-target
    

    Add to config/web.php or config/console.php:

    'components' => [
        'log' => [
            'targets' => [
                [
                    'class' => \samdark\psr\PsrTarget::class,
                    'logger' => $yourPsr3Logger, // e.g., Monolog, Symfony Logger
                ],
            ],
        ],
    ],
    
  2. First Use Case: Log a debug message via Yii’s Yii::debug() or Yii::error()—it will now route to your PSR-3 logger (e.g., Monolog’s file/slack handler).


Implementation Patterns

Workflows

  1. Bridge Yii Logging to PSR-3:

    • Use PsrTarget to forward Yii’s log levels (debug, info, warning, error, trace) to PSR-3’s log() method with mapped severity:
      // Yii level → PSR-3 severity
      Yii::debug('Test')   // PSR-3: DEBUG
      Yii::error('Oops')   // PSR-3: ERROR
      
  2. Centralized Logging:

    • Configure a single PSR-3 logger (e.g., Monolog with multiple handlers) and reuse it across Yii and non-Yii code:
      $monolog = new \Monolog\Logger('name', [
          new \Monolog\Handler\StreamHandler('/path/to/log'),
          new \Monolog\Handler\SlackHandler('webhook'),
      ]);
      Yii::$app->log->targets = [new PsrTarget(['logger' => $monolog])];
      
  3. Dynamic Targets:

    • Swap log targets per environment (e.g., dev → console, prod → file):
      if (Yii::$app->environment === 'prod') {
          Yii::$app->log->targets = [new PsrTarget(['logger' => $prodLogger])];
      }
      

Integration Tips

  • Context Data: Pass additional context via Yii’s Yii::debug($msg, $context)PsrTarget forwards it to PSR-3’s log() as extra data.
  • Exception Handling: Use Yii::error($exception) to log exceptions with stack traces (PSR-3’s ERROR level).
  • Performance: For high-volume logs, batch PSR-3 handlers (e.g., Monolog’s BufferHandler).

Gotchas and Tips

Pitfalls

  1. Level Mismatch:

    • Yii’s trace level maps to PSR-3’s DEBUG (not TRACE). Override via levelMap config:
      'levelMap' => [
          \yii\log\Logger::TRACE => \Psr\Log\LogLevel::DEBUG, // Custom mapping
      ],
      
  2. Circular Dependencies:

    • Avoid injecting Yii’s logger into a PSR-3 logger that’s used by PsrTarget (risk of infinite loops).
  3. Thread Safety:

    • PSR-3 loggers (e.g., Monolog) may not be thread-safe. Use PsrTarget only in single-threaded Yii apps (e.g., CLI, non-queue workers).

Debugging

  • Verify Log Flow:
    • Temporarily add a PsrTarget with a StreamHandler to confirm logs are routed:
      new PsrTarget(['logger' => new \Monolog\Logger('test', [new \Monolog\Handler\StreamHandler('php://stdout')])]),
      
  • Check Level Mapping:
    • Use Yii::debug('Test', ['level' => \yii\log\Logger::TRACE]) to test edge cases.

Extension Points

  1. Custom PSR-3 Logger:

    • Implement Psr\Log\LoggerInterface for domain-specific logging (e.g., AWS CloudWatch):
      $logger = new CustomPsrLogger();
      Yii::$app->log->targets = [new PsrTarget(['logger' => $logger])];
      
  2. Pre/Post-Processing:

    • Extend PsrTarget to modify messages or context before logging:
      class CustomPsrTarget extends PsrTarget {
          public function log($level, $message, $context = []) {
              $context['custom_key'] = 'value';
              parent::log($level, $message, $context);
          }
      }
      
  3. Conditional Logging:

    • Filter logs by environment or user role by overriding PsrTarget::log():
      if (Yii::$app->user->isGuest) return;
      parent::log($level, $message, $context);
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport