@@ -50,7 +50,7 @@ Maho supports 8 log levels (from highest to lowest priority):
5050| ` Mage::LOG_ERR ` | ` Mage::LOG_ERROR ` |
5151| ` Mage::LOG_WARN ` | ` Mage::LOG_WARNING ` |
5252
53- ** Note:** Maho constants now use Monolog Level enums instead of integers for better type safety. Legacy integer values (0-7) are still supported for backwards compatibility. All logs are created with channel name "Maho" for proper branding in browser console output .
53+ ** Note:** Maho constants now use Monolog Level enums instead of integers for better type safety. Legacy integer values (0-7) are still supported for backwards compatibility. All logs are created with channel name "Maho".
5454
5555### Simple Logging
5656
@@ -195,9 +195,6 @@ These handlers work out-of-the-box with XML configuration because they only requ
195195- ` TelegramBotHandler ` - Telegram notifications
196196- ` NativeMailerHandler ` - Email via PHP mail()
197197
198- ** Development Handlers:**
199- - ` BrowserConsoleHandler ` - Browser console output
200-
201198### File Handlers
202199
203200#### RotatingFileHandler (Default)
@@ -329,305 +326,6 @@ Sends logs via email.
329326</email >
330327```
331328
332- ### Development Handlers
333-
334- #### BrowserConsoleHandler
335- Outputs logs to browser console (useful for development).
336-
337- ``` xml
338- <!-- Simple: All log levels -->
339- <browser >
340- <class >Monolog\Handler\BrowserConsoleHandler</class >
341- </browser >
342-
343- <!-- Custom: Specific level -->
344- <browser >
345- <class >Monolog\Handler\BrowserConsoleHandler</class >
346- <params >
347- <level >ERROR</level >
348- </params >
349- </browser >
350- ```
351-
352- ### ❌ ** Unsupported Handlers (Manual Setup Required)**
353-
354- These handlers require complex object dependencies (not primitive parameters) and cannot be configured via XML:
355-
356- - ** RedisHandler** - Requires Redis client object (` Predis\Client ` or ` Redis ` )
357- - ** SymfonyMailerHandler** - Requires Mailer and Email objects
358- - ** MongoDBHandler** - Requires MongoDB client object
359- - ** ElasticsearchHandler** - Requires Elasticsearch client object
360- - ** AmqpHandler** - Requires AMQP connection object
361- - ** RabbitMqHandler** - Requires RabbitMQ connection object
362-
363- For these handlers, configure them manually in custom code. For email logging, use ** NativeMailerHandler** instead (XML-configurable).
364-
365- ## Multiple Handler Support
366-
367- Maho supports multiple handlers simultaneously. Each handler processes logs ** at or above** its configured level, creating a cascading alert system.
368-
369- ### Basic Multi-Handler Example
370-
371- ``` xml
372- <log >
373- <handlers >
374- <!-- File logging for all levels -->
375- <file >
376- <class >Monolog\Handler\RotatingFileHandler</class >
377- <params >
378- <level >DEBUG</level >
379- <maxFiles >14</maxFiles >
380- </params >
381- </file >
382-
383- <!-- Slack alerts for errors -->
384- <slack >
385- <class >Monolog\Handler\SlackWebhookHandler</class >
386- <params >
387- <level >ERROR</level >
388- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
389- <channel >#alerts</channel >
390- </params >
391- </slack >
392-
393- <!-- Email for critical issues -->
394- <email >
395- <class >Monolog\Handler\NativeMailerHandler</class >
396- <params >
397- <level >CRITICAL</level >
398- <to >admin@example.com</to >
399- <subject >CRITICAL: Maho System Alert</subject >
400- </params >
401- </email >
402- </handlers >
403- </log >
404- ```
405-
406- ## Advanced Examples
407-
408- ### Multi-Handler Setup
409-
410- ``` xml
411- <log >
412- <handlers >
413- <!-- Rotating file logging for all levels -->
414- <file >
415- <class >Monolog\Handler\RotatingFileHandler</class >
416-
417- <params >
418- <level >DEBUG</level >
419- <maxFiles >14</maxFiles >
420- </params >
421- </file >
422-
423- <!-- Slack for errors -->
424- <slack >
425- <class >Monolog\Handler\SlackWebhookHandler</class >
426-
427- <params >
428- <level >ERROR</level >
429- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
430- <channel >#alerts</channel >
431- </params >
432- </slack >
433-
434- <!-- Email for critical issues -->
435- <email >
436- <class >Monolog\Handler\NativeMailerHandler</class >
437-
438- <params >
439- <level >CRITICAL</level >
440- <to >admin@example.com</to >
441- <subject >CRITICAL: Maho System Alert</subject >
442- </params >
443- </email >
444- </handlers >
445- </log >
446- ```
447-
448- ### Multiple Handlers of Same Type
449-
450- You can configure multiple handlers of the same type for different purposes. For example, multiple Slack handlers for different alert levels:
451-
452- ``` xml
453- <log >
454- <handlers >
455- <!-- Rotating file logging for all levels -->
456- <file >
457- <class >Monolog\Handler\RotatingFileHandler</class >
458-
459- <params >
460- <level >DEBUG</level >
461- <maxFiles >14</maxFiles >
462- </params >
463- </file >
464-
465- <!-- Slack for general errors - #alerts channel -->
466- <slack_errors >
467- <class >Monolog\Handler\SlackWebhookHandler</class >
468-
469- <params >
470- <level >ERROR</level >
471- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
472- <channel >#alerts</channel >
473- <username >Maho-Errors</username >
474- <iconEmoji >:warning:</iconEmoji >
475- </params >
476- </slack_errors >
477-
478- <!-- Slack for critical issues - #critical channel -->
479- <slack_critical >
480- <class >Monolog\Handler\SlackWebhookHandler</class >
481-
482- <params >
483- <level >CRITICAL</level >
484- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
485- <channel >#critical</channel >
486- <username >Maho-Critical</username >
487- <iconEmoji >:fire:</iconEmoji >
488- </params >
489- </slack_critical >
490-
491- <!-- Slack for warnings - #warnings channel -->
492- <slack_warnings >
493- <class >Monolog\Handler\SlackWebhookHandler</class >
494-
495- <params >
496- <level >WARNING</level >
497- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
498- <channel >#warnings</channel >
499- <username >Maho-Warnings</username >
500- <iconEmoji >:yellow_circle:</iconEmoji >
501- </params >
502- </slack_warnings >
503- </handlers >
504- </log >
505- ```
506-
507- ** How level filtering works:**
508- - ` WARNING ` level logs go to: file + #warnings + #alerts + #critical
509- - ` ERROR ` level logs go to: file + #alerts + #critical
510- - ` CRITICAL ` level logs go to: file + #critical only
511- - ` INFO ` level logs go to: file only
512-
513- ### Specialized Alert Channels
514-
515- You can also set up handlers for different types of alerts:
516-
517- ``` xml
518- <handlers >
519- <!-- Default file logging -->
520- <file >
521- <class >Monolog\Handler\StreamHandler</class >
522-
523- <params >
524- <level >DEBUG</level >
525- </params >
526- </file >
527-
528- <!-- Payment issues - dedicated channel -->
529- <slack_payments >
530- <class >Monolog\Handler\SlackWebhookHandler</class >
531-
532- <params >
533- <level >ERROR</level >
534- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
535- <channel >#payments</channel >
536- <username >Maho-Payments</username >
537- <iconEmoji >:credit_card:</iconEmoji >
538- </params >
539- </slack_payments >
540-
541- <!-- Security issues - high priority channel -->
542- <slack_security >
543- <class >Monolog\Handler\SlackWebhookHandler</class >
544-
545- <params >
546- <level >WARNING</level >
547- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
548- <channel >#security</channel >
549- <username >Maho-Security</username >
550- <iconEmoji >:shield:</iconEmoji >
551- </params >
552- </slack_security >
553-
554- <!-- Emergency alerts -->
555- <slack_emergency >
556- <class >Monolog\Handler\SlackWebhookHandler</class >
557-
558- <params >
559- <level >EMERGENCY</level >
560- <webhookUrl >https://hooks.slack.com/services/YOUR/WEBHOOK/URL</webhookUrl >
561- <channel >#emergency</channel >
562- <username >Maho-EMERGENCY</username >
563- <iconEmoji >:rotating_light:</iconEmoji >
564- </params >
565- </slack_emergency >
566- </handlers >
567- ```
568-
569- ### Custom Handler
570-
571- You can use any Monolog handler by specifying its full class name:
572-
573- ``` xml
574- <custom >
575- <class >Your\Custom\MonologHandler</class >
576-
577- <params >
578- <level >INFO</level >
579- <customParam >value</customParam >
580- <numericParam >123</numericParam >
581- <boolParam >true</boolParam >
582- </params >
583- </custom >
584- ```
585-
586- ### Environment-Specific Configuration
587-
588- ``` xml
589- <!-- Production: Rotating file + Slack for errors -->
590- <handlers >
591- <file >
592- <class >Monolog\Handler\RotatingFileHandler</class >
593-
594- <params >
595- <level >WARNING</level >
596- <maxFiles >14</maxFiles >
597- </params >
598- </file >
599- <slack >
600- <class >Monolog\Handler\SlackWebhookHandler</class >
601-
602- <params >
603- <level >ERROR</level >
604- <webhookUrl >https://hooks.slack.com/services/PROD/WEBHOOK/URL</webhookUrl >
605- </params >
606- </slack >
607- </handlers >
608- ```
609-
610- ``` xml
611- <!-- Development: Rotating file + Browser console -->
612- <handlers >
613- <file >
614- <class >Monolog\Handler\RotatingFileHandler</class >
615-
616- <params >
617- <level >DEBUG</level >
618- <maxFiles >7</maxFiles >
619- </params >
620- </file >
621- <browser >
622- <class >Monolog\Handler\BrowserConsoleHandler</class >
623-
624- <params >
625- <level >DEBUG</level >
626- </params >
627- </browser >
628- </handlers >
629- ```
630-
631329### Complex Handler Configurations
632330
633331#### Syslog with Custom Facility and Ident
0 commit comments