vd/vendor/dipper/foundation/src/LogServiceProvider.php
2018-11-05 09:26:30 +08:00

154 lines
3.7 KiB
PHP

<?php
namespace Dipper\Foundation;
use Illuminate\Log\Writer;
use Monolog\Logger as Monolog;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;
use Illuminate\Support\ServiceProvider;
use Monolog\Handler\RotatingFileHandler;
class LogServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->configureMonologUsing(function (Monolog $logger) {
$log = new Writer($logger, $this->app['events']);
$this->configureHandler($log);
return $log;
});
}
/**
* Configure the Monolog handlers for the application.
*
* @param \Illuminate\Log\Writer $log
* @return void
*/
protected function configureHandler(Writer $log)
{
$this->app->configure('app');
$this->{'configure'.ucfirst($this->handler()).'Handler'}($log);
}
/**
* Configure the Monolog handlers for the application.
*
* @param \Illuminate\Log\Writer $log
* @return void
*/
protected function configureSingleHandler(Writer $log)
{
$monolog = $log->getMonolog();
$monolog->pushHandler($handler = new StreamHandler(
$this->app->storagePath('logs/lumen.log'),
$this->logLevel(),
$bubble = true,
$filePermission = 0777
));
$handler->setFormatter($this->getDefaultFormatter());
}
/**
* Configure the Monolog handlers for the application.
*
* @param \Illuminate\Log\Writer $log
* @return void
*/
protected function configureDailyHandler(Writer $log)
{
$monolog = $log->getMonolog();
$monolog->pushHandler(
$handler = new RotatingFileHandler(
$this->app->storagePath('logs/lumen.log'),
$this->maxFiles(),
$this->logLevel(),
$bubble = true,
$filePermission = 0777
)
);
$handler->setFormatter($this->getDefaultFormatter());
}
/**
* Configure the Monolog handlers for the application.
*
* @param \Illuminate\Log\Writer $log
* @return void
*/
protected function configureSyslogHandler(Writer $log)
{
$log->useSyslog('lumen', $this->logLevel());
}
/**
* Configure the Monolog handlers for the application.
*
* @param \Illuminate\Log\Writer $log
* @return void
*/
protected function configureErrorlogHandler(Writer $log)
{
$log->useErrorLog($this->logLevel());
}
/**
* Get the default log handler.
*
* @return string
*/
protected function handler()
{
if ($this->app->bound('config')) {
return $this->app->make('config')->get('app.log');
}
return 'single';
}
/**
* Get the log level for the application.
*
* @return string
*/
protected function logLevel()
{
if ($this->app->bound('config')) {
return $this->app->make('config')->get('app.log_level', 'debug');
}
return 'debug';
}
/**
* Get the maximum number of log files for the application.
*
* @return int
*/
protected function maxFiles()
{
if ($this->app->bound('config')) {
return $this->app->make('config')->get('app.log_max_files', 5);
}
return 0;
}
/**
* Get a default Monolog formatter instance.
*
* @return \Monolog\Formatter\LineFormatter
*/
protected function getDefaultFormatter()
{
return tap(new LineFormatter(null, null, true, true), function ($formatter) {
$formatter->includeStacktraces();
});
}
}