Laravel: как регистрировать INFO для разделения файла

Как указать отдельный файл для logging INFO в Laravel 5.1 ?

Любая немедленная помощь будет очень заметной. благодаря

Вы хотите конкретно записывать info в один файл журнала и другой тип журнала в другое место? Мое решение может не помочь в этом случае, но может быть полезным.

Чтобы записать файл журнала в другое место, используйте метод useDailyFiles или useFiles , а затем информацию для входа в файл журнала по указанному вами пути. Вот так:

  Log::useDailyFiles(storage_path().'/logs/name-of-log.log'); Log::info([info to log]); 

Первым параметром для обоих методов является путь к файлу журнала (который создается, если он еще не существует), а для useDailyFiles вторым аргументом является количество дней, в течение которых Laravel будет регистрироваться до стирания старых журналов. Значение по умолчанию не ограничено, поэтому в моем примере я не ввел значение.

Если вы хотите добавить еще один обработчик монолога, вы можете использовать метод configureMonologUsing приложения.

Поместите вызов этого метода в файл bootstrap / app.php прямо перед возвратом переменной $ app:

 $app->configureMonologUsing(function($monolog) { $monolog->pushHandler(new StreamHandler('path/to/info.log', Logger::INFO, false)); // false value as third argument to disable bubbling up the stack }); return $app; 

Простой помощник журнала, который позволяет вам управлять несколькими пользовательскими файлами на лету. Вы также можете добавить свой собственный обработчик и задать путь к файлу.

App \ Helper \ LogToChannels.php

 <?php /** * Logger helper to log into different files * * @package App\Helpers * @author Romain Laneuville <romain.laneuville@hotmail.fr> */ namespace App\Helpers; use Monolog\Logger; use Monolog\Handler\HandlerInterface; use Monolog\Handler\StreamHandler; use Monolog\Formatter\LineFormatter; /** * Class LogToChannels * * @package App\Helpers */ class LogToChannels { /** * The LogToChannels channels. * * @var Logger[] */ protected $channels = []; /** * LogToChannels constructor. */ public function __construct() { } /** * @param string $channel The channel to log the record in * @param int $level The error level * @param string $message The error message * @param array $context Optional context arguments * * @return bool Whether the record has been processed */ public function log(string $channel, int $level, string $message, array $context = []): bool { // Add the logger if it doesn't exist if (!isset($this->channels[$channel])) { $handler = new StreamHandler( storage_path() . DIRECTORY_SEPARATOR . 'logs' . DIRECTORY_SEPARATOR . $channel . '.log' ); $handler->setFormatter(new LineFormatter(null, null, true, true)); $this->addChannel($channel, $handler); } // LogToChannels the record return $this->channels[$channel]->{Logger::getLevelName($level)}($message, $context); } /** * Add a channel to log in * * @param string $channelName The channel name * @param HandlerInterface $handler The channel handler * @param string|null $path The path of the channel file, DEFAULT storage_path()/logs * * @throws \Exception When the channel already exists */ public function addChannel(string $channelName, HandlerInterface $handler, string $path = null) { if (isset($this->channels[$channelName])) { throw new \Exception('This channel already exists'); } $this->channels[$channelName] = new Logger($channelName); $this->channels[$channelName]->pushHandler( new $handler( $path === null ? storage_path() . DIRECTORY_SEPARATOR . 'logs' . DIRECTORY_SEPARATOR . $channelName . '.log' : $path . DIRECTORY_SEPARATOR . $channelName . '.log' ) ); } /** * Adds a log record at the DEBUG level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function debug(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::DEBUG, $message, $context); } /** * Adds a log record at the INFO level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function info(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::INFO, $message, $context); } /** * Adds a log record at the NOTICE level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function notice(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::NOTICE, $message, $context); } /** * Adds a log record at the WARNING level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function warn(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::WARNING, $message, $context); } /** * Adds a log record at the WARNING level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function warning(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::WARNING, $message, $context); } /** * Adds a log record at the ERROR level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function err(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::ERROR, $message, $context); } /** * Adds a log record at the ERROR level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function error(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::ERROR, $message, $context); } /** * Adds a log record at the CRITICAL level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function crit(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::CRITICAL, $message, $context); } /** * Adds a log record at the CRITICAL level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return Boolean Whether the record has been processed */ public function critical(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::CRITICAL, $message, $context); } /** * Adds a log record at the ALERT level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function alert(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::ALERT, $message, $context); } /** * Adds a log record at the EMERGENCY level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function emerg(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::EMERGENCY, $message, $context); } /** * Adds a log record at the EMERGENCY level. * * @param string $channel The channel name * @param string $message The log message * @param array $context The log context * * @return bool Whether the record has been processed */ public function emergency(string $channel, string $message, array $context = []): bool { return $this->log($channel, Logger::EMERGENCY, $message, $context); } } 

App \ Providers \ LogToChannelsServiceProvider.php

 <?php /** * Logger service provider to be abled to log in different files * * @package App\Providers * @author Romain Laneuville <romain.laneuville@hotmail.fr> */ namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Helpers\LogToChannels; /** * Class LogToChannelsServiceProvider * * @package App\Providers */ class LogToChannelsServiceProvider extends ServiceProvider { /** * Initialize the logger * * @return void */ public function register() { $this->app->singleton('App\Helpers\LogToChannels', function () { return new LogToChannels(); }); } } 

config \ app.php (добавить поставщика услуг)

 // Register Service Providers $app->register(App\Providers\LogToChannelsServiceProvider::class); 

Затем в любом месте вашего приложения вы можете вызывать использование инъекции зависимостей (добавьте класс в свой конструктор и привяжите его к атрибуту класса log )

 $this->log->info('logger_name', 'Log message'); $this->log->error('other_logger_name', 'Log message', $someContext); 

Вы даже можете настроить вывод журнала, вызывая

 $this->log->addChannel('channel_name', $customHandler); 

И он будет доступен, когда вы будете называть его имя в любом месте вашего приложения.

Laravel использует монолог для регистрации, но использует более старую версию, которая не поддерживает несколько каналов на одном уровне журнала.

Вот предложение, которое может помочь: собственный файл журнала laravel 5.2 для разных задач