Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal ,
Como posso fazer no laravel 5.6 , um canal especifico para salvar os logs no mongodb ? Nao estou conseguindo meu configo/logging.php
<?php
use Monolog\Handler\StreamHandler;
return [
'default' => env('LOG_CHANNEL', 'stack'),
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['custom' , 'slack'],
],
'insightops' => [
'driver' => 'monolog',
'handler' => Monolog\Handler\SyslogUdpHandler::class,
'handler_with' => [
'token' => env('LOGENTRIES_TOKEN'),
'host' => 'us.data.logs.insight.rapid7.com',
'port' => '10000',
],
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
],
'custom' => [
'driver' => 'custom',
'via' => App\Logging\LogentriesLogger::class,
'level' => 'debug',
],
'stderr' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => 'debug',
],
'errorlog' => [
'driver' => 'errorlog',
'level' => 'debug',
],
],
];
E meu log customizado
<?php
namespace App\Logging;
use Monolog\Handler\MongoDBHandler;
use Monolog\Logger;
use MongoDB\Client;
use App\Adapters\LoggerAdapter;
class LogentriesLogger
{
/**
* Create a custom Monolog instance.
*
* @param array $config
* @return \Monolog\Logger
*/
public function __invoke(array $config)
{
$log = new Logger('application');
$mongodb = new MongoDBHandler(new Client('mongodb://' . config('database.connections.mongodb.host') . ':' . config('database.connections.mongodb.port')), config('database.connections.mongodb.database'), 'logs', LoggerAdapter::INFO);
var_dump($log);
die;
//$log->pushHandler('teste',$mongodb);
}
}
Nao sei como pegar a mensagem de log para inserir no mongo , me ajudem please.Nao funcionou nao , não aconteceu nada.
<?php
namespace App\Logging;
use Monolog\Handler\MongoDBHandler;
use MongoDB\Client;
use Illuminate\Support\Facades\Log;
class MongoLogger
{
/**
* Create a custom Monolog instance.
*
* @param array $config
* @return \Monolog\Logger
*/
public function __invoke(array $config)
{
$log = Log::getMonolog();
$log = new MongoDBHandler(new Client('mongodb://' . config('database.connections.mongodb.host') . ':' . config('database.connections.mongodb.port')), config('database.connections.mongodb.database'), 'logs', LoggerAdapter::INFO);
var_dump($log);
die;
}
}
Quero usar o próprio Handler do monolog mas nao consigo de jeito algum , nao consigo seuqe pegar a mensagem que foi disparada em outro arquivo .
Até o laravel 5.4 tem muito exemplificação mas no laravel 5.6 nao tem nada.Bom consegui aqui , mas não está do jeito que preciso ainda , ficou assim o app/logging.php
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['slack', 'logentries', 'custom'],
],
'custom' => [
'driver' => 'custom',
'via' => App\Logging\MongoLogger::class,
'level' => 'debug',
'formatter' => 'default',
],
A classe CUSTOM que faz o handle do mongo
<?php
namespace App\Logging;
use Monolog\Handler\MongoDBHandler;
use MongoDB\Client;
use Monolog\Logger;
class MongoLogger
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($config)
{
$log = new Logger('debug');
$log->pushHandler(new MongoDBHandler(new Client('mongodb://' . config('database.connections.mongodb.host') . ':' . config('database.connections.mongodb.port')), config('database.connections.mongodb.database'), 'logs', 'DEBUG'));
return $log;
}
}
E onde eu insiro
'tipo' => 'debug',
'url' => Request::url(),
'message' => (string)'acesso_sistema',
'datahora' => \Carbon\Carbon::now(),
'session_id' => Session::getId(),
'level' => 'access_log',
'so' => BrowserDetect::platformName(),
'mobile' => BrowserDetect::isMobile(),
'tempo_execucao' => (!empty($context['tempo_execucao'])) ? $context['tempo_execucao'] : 0,
'dia_mes_ano' => date('d/m/Y'),
'usuario' => $this->getUsuario(),
'cliente' => Session::get('cliente'),
'ip_origem' => Request::ip()
);
if(empty($record['datetime'])) {
$record['datetime'] = $ts;
}
Log::debug(json_encode($record));
Porém no meu mongodb o registro esta saindo assim:
{
"_id" : ObjectId("5b27f26104e50a000718be8e"),
"message" : "{\"tipo\":\"debug\",\"url\":\"https:\\/\\/teste.sytem.docker7\\/login\",\"message\":\"acesso_sistema\",\"datahora\":{\"date\":\"2018-06-18 14:56:49.141276\",\"timezone_type\":3,\"timezone\":\"America\\/Sao_Paulo\"},\"session_id\":\"A9dun9XQOLreKAmsTa2mjYnTeLs2nvyIUHMYNR7d\",\"level\":\"access_log\",\"so\":\"GNU\\/Linux\",\"mobile\":false,\"tempo_execucao\":0.007571,\"dia_mes_ano\":\"18\\/06\\/2018\",\"usuario\":null,\"cliente\":\"bett\",\"ip_origem\":\"172.1.0.1\",\"datetime\":{\"date\":\"2018-06-18 14:56:49.141186\",\"timezone_type\":3,\"timezone\":\"America\\/Sao_Paulo\"}}",
"context" : [],
"level" : 100,
"level_name" : "DEBUG",
"channel" : "production",
"datetime" : "2018-06-18 14:56:49",
"extra" : []
}
Como posso salvar esses dados como uma collection nesse canal customizado ?
$record = array(
'tipo' => 'debug',
'url' => Request::url(),
'message' => (string)'acesso_sistema',
'datahora' => \Carbon\Carbon::now(),
'session_id' => Session::getId(),
'level' => 'access_log',
'so' => BrowserDetect::platformName(),
'mobile' => BrowserDetect::isMobile(),
'tempo_execucao' => (!empty($context['tempo_execucao'])) ? $context['tempo_execucao'] : 0,
'dia_mes_ano' => date('d/m/Y'),
'usuario' => $this->getUsuario(),
'cliente' => Session::get('cliente'),
'ip_origem' => Request::ip()
);
Use a Facade Log