Přesun z salamek/raven-nette na kdyby/monolog se Sentry
- theacastus
- Člen | 81
Zdravím,
přebral jsem již běžící projekt a již jsem se dostal do bodu kdy potřebuji logovat a protože máme Sentry a používáme salamek/raven-nette, ale ten je abandoned, takže chci přejít na kdyby/monolog, ALE…
Četl jsem https://forum.nette.org/…mplementovat a i https://packagist.org/…/raven-nette jak přemigrovat na kdyby/monolog, jen jsem nenašel u monologu zda je podporované options pro sentry přes raven jako tomu bylo u salamek/raven-nette
Víte o nějakých tipech & tricích které se hodí u přesunu? nějaké nápady jak na to ?
Díky moc
- Barbarossa
- Člen | 74
Ahoj,
config pro inspiraci:
monolog:
name: MyName
hookToTracy: true
registerFallback: true
handlers:
raven: Monolog\Handler\RavenHandler(Raven_Client('<dsn>', [release: '1.0.0']))
processors:
- Monolog\Processor\GitProcessor
- Monolog\Processor\WebProcessor
- Kdyby\Monolog\Processor\PriorityProcessor
- YourNamespace\SentryContextProcessor
a procesor:
class SentryContextProcessor
{
/** @var User */
private $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function __invoke(array $record)
{
// record the current user
$user = $this->user;
$record['context']['user'] = array(
'name' => $user->getName(),
'username' => $user->getUsername(),
'email' => $user->getEmail(),
);
// Add various tags
//$record['context']['tags'] = array('key' => 'value');
// Add various generic context
//$record['extra']['key'] = 'value';
return $record;
}
}
Editoval Barbarossa (27. 3. 2018 22:45)
- theacastus
- Člen | 81
Tohle by tedy mělo být ok?:
<?php
declare(strict_types=1);
namespace ProjectNS\Core;
use Doctrine\ORM\EntityManager;
use ProjectNS\Entities\User\User;
use ProjectNS\Core\Security\User as SecurityUser; // extends Nette\Security\User
class SentryContextProcessor
{
/**
* @var EntityManager
*/
private $em;
/**
* @var SecurityUser
*/
private $securityUser;
public function __construct(EntityManager $entityManager, SecurityUser $securityUser)
{
$this->em = $entityManager;
$this->securityUser = $securityUser;
}
public function __invoke(array $record)
{
$user = $this->em->getRepository(User::class)->find($this->securityUser->getId());
if ($user instanceof User) // aka $this->securityUser->isLoggedIn()
{
$record['context']['user'] = [
'name' => $user->getName(),
'username' => $user->getUsername(),
'email' => $user->getEmail()
];
} else { /* TODO: Check if this is needed
$record['context']['user'] = [
'name' => 'Anonymous guest',
'username' => 'guest',
'email' => 'guest@domain.tld'
]; */
}
return $record;
}
}
configurace monologu:
sentry:
dsn: '<sentry dsn>'
extensions:
monolog: Kdyby\Monolog\DI\MonologExtension
monolog:
name: project.tld
hookToTracy: true
registerFallback: true
handlers:
raven: Monolog\Handler\RavenHandler(Raven_Client(%sentry.dsn%, [release: %version%, enviroment: 'production']))
processors:
- Monolog\Processor\GitProcessor
- Monolog\Processor\WebProcessor
- Kdyby\Monolog\Processor\PriorityProcessor
- ProjectNS\Core\SentryContextProcessor
- Barbarossa
- Člen | 74
Jestli je to opravdu ok, to teprve uvidíš. Jen bych (pro ostatní) doplnil, že konfigurace parametru senry.dsn by měla být v parameters:
parameters:
sentry:
dsn: '<sentry dsn>'
a pro record anonymního uživatele není v default nic potřeba (sentry mu přidělí id a zjistí základní informace).
Jinak pokud máš vlastní rozšíření pro SecurityUser, tak je vhodnější přebírat orm data od něj (třeba vlastní metodou getData(), která ti vrátí tu entitu User (pro aplikaci se to pak tahá jen jednou, pokud to orm nehlídá).
- David Matějka
- Moderator | 6445
@mcmatak nejsnazsi integrace sentry zhruba
composer require contributte/monolog sentry/sdk
extensions:
monolog: Contributte\Monolog\DI\MonologExtension
monolog:
channel:
default:
handlers:
- Sentry\Monolog\Handler(level: Monolog\Logger::WARNING)
services:
sentryClientBuilder: Sentry\ClientBuilder::create(%sentry%)
sentryClient:
class: Sentry\ClientInterface
create: @sentryClientBuilder::getClient()
sentryHub: Sentry\State\Hub
parameters:
sentry:
dsn: '<your dsn>'
- Barbarossa
- Člen | 74
@DavidMatějka ahoj poradil bys mi prosím jak si přes ten monolog můžu přidat vlastní tagy? Musím si udělat vlastní HUB? + pokud je aplikace schovaná za proxy (kubernetes), tak už se nepředá informace o prohlížeči, URL apod jak ji donutit to převzít z HTTP_X_ headers?