Contributte Logging
# Content
# Tracy
First of all, we need to register our universal tuned logger for the future purpose.
extensions:
logging: Contributte\Logging\DI\TracyLoggingExtension
2
After that, we need to setup logDir
.
logging:
logDir: %appDir%/../log
2
Basically, it overrides Tracy's default logger by our universal, pluggable logger.
Original logger is still in DIC with logging.originalLogger
key.
# Default loggers
There are 3 types of loggers defined by default.
- FileLogger - creates
<priority>.log
file - BlueScreenFileLogger - creates exception-*.html from all throwable
- SendMailLogger - sends throwable/message to email
You can redefine these loggers in logging.loggers
.
logging:
loggers:
- Contributte\Logging\FileLogger(%logDir%)
- Contributte\Logging\BlueScreenFileLogger(%logDir%)
- Contributte\Logging\SendMailLogger(
Contributte\Logging\Mailer\TracyMailer(
from@email,
[to@email, to2@email]
),
%logDir%
)
- App\Model\MyCustomerLogger
2
3
4
5
6
7
8
9
10
11
12
This configuration is functionally equal to original Tracy's logger, only separated to multiple classes.
# SendMailLogger
Our SendMailLogger also allows configure priority levels.
services:
sendMaillogger:
setup:
- setAllowedPriority([
Contributte\Logging\ILogger::WARNING,
Contributte\Logging\ILogger::ERROR
])
2
3
4
5
6
7
# Custom logger
To create your custom logger you have to implement Contributte\Logging\ILogger
.
<?php
namespace App\Model;
use Contributte\Logging\ILogger;
class MyDatabaseLogger implements ILogger
{
/**
* @param mixed $message
* @return void
*/
public function log($message, string $priority = self::INFO): void
{
// store exception to database...
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
And register it in neon.
logging:
loggers:
- App\Model\MyDatabaseLogger(@connection)
2
3
# Slack
extensions:
logging: Contributte\Logging\DI\TracyLoggingExtension
slack: Contributte\Logging\DI\SlackLoggingExtension
2
3
There is a configuration you have to fill in.
Key | Requirements | Default |
---|---|---|
url | required | - |
channel | required | - |
username | optional | Tracy |
icon_emoji | optional | 🚀 |
icon_url | optional | - |
slack:
url: https://hooks.slack.com/services/<code1>/<code2>/<code3>
channel: tracy
2
3
# Formatters
By default, there are 5 formatters for your slack-channel-pleasure.
You can disable it like this:
slack:
formatters: []
2
And configure your own formatters. They will be loaded automatically, if
you implement needed interface (Contributte\Logging\Slack\Formatter\IFormatter
).
services:
- App\Slack\MySuperTrouperFormatter
2
# Contributte\Logging\Slack\Formatter\ContextFormatter
- Setup
context
with all configured data (channel, icon, etc).
# Contributte\Logging\Slack\Formatter\ColorFormatter
danger
->ILogger::CRITICAL
#ff0000
->ILogger::EXCEPTION
warning
->ILogger::ERROR
# Contributte\Logging\Slack\Formatter\ExceptionFormatter
# Contributte\Logging\Slack\Formatter\ExceptionPreviousExceptionsFormatter
# Contributte\Logging\Slack\Formatter\ExceptionStackTraceFormatter
# Sentry
extensions:
logging: Contributte\Logging\DI\TracyLoggingExtension
sentry: Contributte\Logging\DI\SentryLoggingExtension
2
3
This extension requires to have sentry installed.
composer require sentry/sdk:"^2.0"
Now you should go to project Settings page -> Client Keys (DSN) section. There you obtained DNS url. Put the url into neon file.
sentry:
url: https://<key>@sentry.io/<project>
2
SentryLoggingExtension
adds SentryLogger
with url configuration. It works as SendMailLogger.
It means that it sends messages/throwable with ILogger::ERROR
, ILogger::EXCEPTION
, ILogger::CRITICAL
priorities.
But if you need other priorities, you can change configuration.
services:
sentry.logger:
setup:
- setAllowedPriority([
Contributte\Logging\ILogger::WARNING,
Contributte\Logging\ILogger::ERROR
])
2
3
4
5
6
7