public function __construct($name = 'PHPUnit', $level = 'debug') { /** * Filter growl notifications and send only * - test failures ($handerLevel = Logger::NOTICE; see GrowlHandler constructor) * - summary of test suites (message "Results OK ...", or "Results KO ..." */ $filters = array(function ($record, $handlerLevel) { if ($record['level'] > $handlerLevel) { return true; } return preg_match('/^Results/', $record['message']) === 1; }); $stream = new RotatingFileHandler(__DIR__ . DIRECTORY_SEPARATOR . 'monologTestListener.log', 0, Logger::toMonologLevel($level)); $stream->setFilenameFormat('{filename}-{date}', 'Ymd'); $handlers = array($stream); try { // be notified only for test suites and test failures $growl = new GrowlHandler(array(), Logger::NOTICE); $handlers[] = new CallbackFilterHandler($growl, $filters); } catch (\Exception $e) { // Growl server is probably not started echo $e->getMessage(), PHP_EOL, PHP_EOL; } parent::__construct($name, $handlers); }
public function terminate($request, $response) { $log = new Logger('HTTP'); $handler = new RotatingFileHandler(config('laravelmiddlewarelogger.options.file'), Logger::INFO); $handler->setFormatter(new LineFormatter("[%datetime%] %channel%.%level_name%: %message% %context%\n\n")); $log->pushHandler($handler); if (config('laravelmiddlewarelogger.options.enabled')) { $inputs = $request->input(); if (!empty($inputs)) { $inputSafe = config('laravelmiddlewarelogger.options.input_safe'); foreach ($inputSafe as $safe) { if (!empty($inputs[$safe])) { $inputs[$safe] = '[*** SENSOR ***]'; } } } $request_array = ['method' => $request->method(), 'full-url' => $request->fullUrl(), 'client-ip' => $request->ip(), 'user-agent' => $request->header('user-agent'), 'query-string' => $request->query(), 'inputs' => $inputs]; $response_array = []; if (config('laravelmiddlewarelogger.options.log_response')) { $response_array = ['status' => $response->status(), 'content' => '']; json_decode($response->content()); if (json_last_error() == JSON_ERROR_NONE) { $response_array['content'] = $response->content(); } } $log->addInfo('REQUEST', $request_array); $log->addInfo('RESPONSE', $response_array); } }
public function testReuseCurrentFile() { $log = __DIR__ . '/Fixtures/foo-' . date('Y-m-d') . '.rot'; file_put_contents($log, "foo"); $handler = new RotatingFileHandler(__DIR__ . '/Fixtures/foo.rot'); $handler->write(array('message' => 'test')); $this->assertEquals('footest', file_get_contents($log)); }
private function setHande() { date_default_timezone_set("PRC"); self::$log = new Logger('name'); $rotating = new RotatingFileHandler($this->filepath, $this->log_keepDays, $this->log_level); $rotating->setFormatter($this->formatter); self::$log->pushHandler($rotating); }
public static function configureFileLogs(Monolog $monolog, $filePath) { $files = new RotatingFileHandler($filePath, 365, Logger::DEBUG, true, 0666); $files->setFormatter(new HtmlFormatter()); $files->pushProcessor(new WebProcessor()); $files->pushProcessor(new IntrospectionProcessor(Logger::DEBUG)); $monolog->pushHandler($files); }
public static function init($channel, $filename) { $logger = new MongoLog($channel); $stream = new RotatingFileHandler($filename, 0, MongoLog::DEBUG); $stream->setFormatter(new LineFormatter("%datetime% [%channel%] %level_name% %message% %context%\n", "Y-m-d H:i:s")); $logger->pushHandler($stream); static::$object = $logger; }
/** * Class constructor * * @param string $loggerName Logger name (the logging channel) * @param int $logLevel The minimum logging level at logging handler will be triggered * @param string $fileName Log file name */ private function __construct($loggerName = DEFAULT_LOGGER_NAME, $logLevel = MIN_LOG_LEVEL, $fileName = DEFAULT_LOG_PATH . DEFAULT_LOG_FILE) { $fullLogFilePath = $fileName; $formatter = new LineFormatter(null, null, false, true); $this->_logger = new Logger($loggerName); $handler = new RotatingFileHandler($fullLogFilePath, MAX_LOG_FILES_TO_KEEP, $logLevel); $handler->setFormatter($formatter); $this->_logger->pushHandler($handler); }
private function logger() { $log = new Logger("slim"); $formatter = new LineFormatter("[%datetime%] [%level_name%]: %message%\n"); $rotating = new RotatingFileHandler(__DIR__ . "/../../logs/slim.log", 0, Logger::DEBUG); $rotating->setFormatter($formatter); $log->pushHandler($rotating); return new MonologSQLLogger($log); }
public function testReuseCurrentFile() { $log = __DIR__ . '/Fixtures/foo-' . date('Y-m-d') . '.rot'; file_put_contents($log, "foo"); $handler = new RotatingFileHandler(__DIR__ . '/Fixtures/foo.rot'); $handler->setFormatter($this->getIdentityFormatter()); $handler->handle($this->getRecord()); $this->assertEquals('footest', file_get_contents($log)); }
/** * @return array */ public function addDefaultLoggerDataProvider() { $logHandler1 = new RotatingFileHandler(Http::DEFAULT_LOG_FILE_NAME); $logHandler1->setFormatter(new LineFormatter(Http::DEFAULT_LOG_LINE_FORMAT, null, true)); $logHandler2 = new RotatingFileHandler('fileName'); $logHandler2->setFormatter(new LineFormatter('%message%', null, true)); return ['Default params' => ['fileName' => null, 'lineFormat' => null, 'messageFormat' => null, 'logLevel' => LogLevel::INFO, 'logger' => new Logger('Logger', [$logHandler1]), 'messageFormatter' => new MessageFormatter(Http::DEFAULT_LOG_MESSAGE_FORMAT), 'middlewareCallback' => function () { }], 'Custom params' => ['fileName' => 'fileName', 'lineFormat' => '%message%', 'messageFormat' => '{code}', 'logLevel' => LogLevel::NOTICE, 'logger' => new Logger('Logger', [$logHandler2]), 'messageFormatter' => new MessageFormatter('{code}'), 'middlewareCallback' => function () { }]]; }
private function configureLogger() { $dateFormat = 'Y-m-d H:i:s'; $logFormat = "%datetime% %level_name% |[%codeInfo%] %message%\n"; $formatter = new LineFormatter($logFormat, $dateFormat); $rotatingLogger = new RotatingFileHandler($this->logPath, 30); $rotatingLogger->setFormatter($formatter); $this->pushHandler($rotatingLogger); $this->pushProcessor(new IntrospectionProcessor()); }
/** * Here it's using Monolog for writing logs * * @param int $level Log level * * @return \Monolog\Logger */ public static function getLogger($level = Logger::DEBUG) { $config = self::getConfig(); $logger = new Logger($config['log']['channelName']); if (!is_dir($config['log']['baseDirectory'])) { mkdir($config['log']['baseDirectory'], 0777); } $handler = new RotatingFileHandler($config['log']['baseDirectory'] . 'messages.log', $config['log']['maxFilesRotation'], $level); $handler->setFormatter(new LineFormatter($config['log']['format'])); $logger->pushHandler($handler); return $logger; }
/** * @param string $stream * @param string $path * @param mixed $level * @param string $format * @param $errorPath * @return LoggerInterface */ protected function createLogger($stream, $path, $level, $format, $errorPath) { $defaultHandler = new RotatingFileHandler($path, 0, $level); $defaultHandler->setFormatter(new LineFormatter($format)); $logger = new MonologWrapper($stream, array($defaultHandler)); if ($path !== $errorPath) { $errorHandler = new RotatingFileHandler($errorPath, 0, Logger::ERROR); $errorHandler->setFormatter(new LineFormatter($format)); $logger->pushHandler($errorHandler); } return $logger; }
/** * @return Logger */ protected function getJobLogger() { $jobLogger = new Logger('Jobs'); $lineFormatter = new LineFormatter("[%datetime%] %message% %context% %extra%\n", null, true, true); $streamHandler = new StreamHandler("php://output"); $streamHandler->setFormatter($lineFormatter); $jobLogger->pushHandler($streamHandler); $fileHandler = new RotatingFileHandler(storage_path() . '/logs/jobs.log'); $fileHandler->setFormatter($lineFormatter); $jobLogger->pushHandler($fileHandler); $jobLogger->debug(static::class); return $jobLogger; }
public function __construct() { $this->path = MAIN_DIRECTORY . DIRECTORY_SEPARATOR . 'log'; if (!is_dir($this->path)) { File::createDirectory($this->path, $this->dirMode, true); } $this->logFile = $this->path . DIRECTORY_SEPARATOR . 'app.log'; $this->log = new Logger('app'); $webProcessor = new WebProcessor(); $format = "[%datetime%] %channel%.%level_name%: %message% %extra.ip% %extra.http_method% %context% %extra%\n"; $formatter = new LineFormatter($format, null, true); $logRotate = new RotatingFileHandler($this->logFile, 45, Logger::INFO, true, 0777); $logRotate->setFormatter($formatter); $this->log->pushHandler($logRotate); $this->log->pushProcessor($webProcessor); }
/** * @return \Monolog\Logger */ private function getPhealLogger() { // If its already setup, just return it. if (!is_null($this->logger)) { return $this->logger; } // Configure the logger by setting the logfile // path and the format logs should be. $log_file = storage_path('logs/pheal.log'); $format = new LineFormatter(null, null, false, true); $stream = new RotatingFileHandler($log_file, 30, Logger::INFO); $stream->setFormatter($format); $this->logger = new Logger('pheal'); $this->logger->pushHandler($stream); return $this->logger; }
public function addLogger($name, $logToSystemFile = true) { if (!empty($this->loggers[$name])) { return; } $this->setFormatter(); $this->loggers[$name] = new Logger($name); if ($logToSystemFile === true) { $filename = ROOT_PATH . "/log/" . LogService::$system_logger . ".log"; } else { $filename = ROOT_PATH . "/log/{$name}.log"; } $handler = new RotatingFileHandler($filename); $handler->setFormatter($this->formatter); // $handler->setFormatter(new JsonFormatter()); $this->loggers[$name]->pushHandler($handler); }
/** * {@inheritdoc} */ protected function write(array $record) { if (!file_exists($this->url)) { touch($this->url); // Create blank file chmod($this->url, 0777); } parent::write($record); }
public function register(Application $app) { $app->register(new \Silex\Provider\MonologServiceProvider()); $app['monolog.handler'] = function () use($app) { $levels = Logger::getLevels(); if ($app['debug']) { $level = Logger::DEBUG; } else { $level = $app['config']['log']['log_level']; } $RotateHandler = new RotatingFileHandler($app['monolog.logfile'], $app['config']['log']['max_files'], $level); $RotateHandler->setFilenameFormat($app['config']['log']['prefix'] . '{date}' . $app['config']['log']['suffix'], $app['config']['log']['format']); $RotateHandler->setFormatter(new LineFormatter(null, null, true)); $FingerCrossedHandler = new FingersCrossedHandler($RotateHandler, new ErrorLevelActivationStrategy($levels[$app['config']['log']['action_level']])); return $FingerCrossedHandler; }; $app['listener.requestdump'] = $app->share(function ($app) { return new \Eccube\EventListener\RequestDumpListener($app); }); }
public function register(Container $app) { $app['logger'] = function () use($app) { return $app['monolog']; }; $app['monolog'] = function ($app) { $logger = new Logger($app['monolog.name']); $rotate = $app['config']->get('app.log.rotate', 'single'); $logger->pushHandler($app['monolog.handler.' . $rotate]); return $logger; }; $app['monolog.formatter'] = function () { return new LineFormatter(); }; $app['monolog.handler.single'] = function ($app) { $handler = new StreamHandler($app['monolog.logfile'], $app['monolog.level']); $handler->setFormatter($app['monolog.formatter']); return $handler; }; $app['monolog.handler.daily'] = function ($app) { $maxFiles = $app['config']->get('app.log.max_files', 5); $handler = new RotatingFileHandler($app['monolog.logfile'], $maxFiles, $app['monolog.level']); $handler->setFormatter($app['monolog.formatter']); return $handler; }; $app['monolog.handler.error'] = function ($app) { $handler = new ErrorLogHandler(ErrorLogHandler::OPERATING_SYSTEM, $app['monolog.level']); $handler->setFormatter($app['monolog.formatter']); return $handler; }; $app['monolog.handler.syslog'] = function ($app) { $handler = new SyslogHandler($app['monolog.name'], LOG_USER, $app['monolog.level']); $handler->setFormatter($app['monolog.formatter']); return $handler; }; $level = $app['config']->get('app.log.level', 'debug'); $app['monolog.level'] = $this->parseLevel($level); $app['monolog.logfile'] = $app['path.logs'] . $this->getSettings('app.log.logfile'); $app['monolog.name'] = $this->getSettings('monolog.name', 'app.name'); }
/** * @param string $name The logging channel * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc. * @param callable[] $processors Optional array of processors */ public function __construct($name, array $handlers = array(), array $processors = array()) { parent::__construct($name, $handlers, $processors); // set handler $elgg_log_level = _elgg_services()->logger->getLevel(); if ($elgg_log_level == \Elgg\Logger::OFF) { // always log errors $elgg_log_level = \Elgg\Logger::ERROR; } $handler = new RotatingFileHandler(elgg_get_data_path() . 'elasticsearch/client.log', 0, $elgg_log_level); // create correct folder structure $date = date('Y/m/'); $path = elgg_get_data_path() . "elasticsearch/{$date}"; if (!is_dir($path)) { mkdir($path, 0755, true); } $handler->setFilenameFormat('{date}_{filename}', 'Y/m/d'); $this->pushHandler($handler); // set logging processor $processor = new IntrospectionProcessor(); $this->pushProcessor($processor); }
/** * BaseTestCase constructor. * * @param null $name * @param array $data * @param string $dataName * * @author Andreas Glaser */ public function __construct($name = null, array $data = [], $dataName = '') { parent::__construct($name, $data, $dataName); $this->config = parse_ini_file(__DIR__ . '/../../config.ini', true); // overwrite default configuration with custom values if available if (file_exists(__DIR__ . '/../../config-custom.ini') && is_readable(__DIR__ . '/../../config-custom.ini')) { $configCustom = parse_ini_file(__DIR__ . '/../../config-custom.ini', true); $this->config = array_replace_recursive($this->config, $configCustom); } $config = $this->config['client']; $config['headers'] = $this->config['client.headers']; $this->client = new Client($config); // attach logger if necessary if ($this->config['general']['logging.enabled']) { $logger = new Logger('default'); $handler = new RotatingFileHandler(__DIR__ . '/../../logs/client.log', 2); $handler->setFormatter(new LineFormatter(null, null, true)); $logger->pushHandler($handler); $this->client->attachLogger($logger); } $this->faker = Faker\Factory::create(); $this->init(); }
/** * Console logger class constructor * * @param string $name The logging channel * @param string $level The minimum logging level */ public function __construct($name = 'YourLogger', $level = Logger::DEBUG) { $filterRules = array(function ($record) { if (!array_key_exists('operation', $record['context'])) { return false; } return 'printFooter' === $record['context']['operation']; }); $stream = new RotatingFileHandler(__DIR__ . '/phpunit-growlhandler-php' . PHP_VERSION_ID . '.log', 30); $stream->setFilenameFormat('{filename}-{date}', 'Ymd'); $console = new StreamHandler('php://stdout'); $console->setFormatter(new LineFormatter("%message%\n", null, true)); $filter = new FilterHandler($console); $handlers = array($filter, $stream); try { $options = array('resourceDir' => dirname(__DIR__) . '/vendor/pear-pear.php.net/Net_Growl/data/Net_Growl/data', 'defaultIcon' => '80/growl_phpunit.png'); $growl = new GrowlHandler(array('name' => 'PHPUnit ResultPrinter', 'options' => $options), Logger::NOTICE); $growl->setFormatter(new LineFormatter("Growl for Monolog\n" . "%message%")); $handlers[] = new CallbackFilterHandler($growl, $filterRules); } catch (\Exception $e) { // Growl server is probably not started } parent::__construct($name, $handlers); }
/** * Writes the log record to a separate rotatingFileHandler * * @param $record array * @return void */ public function writeWithRotation(array $record) { $logDir = $this->filesystem->getParentDirectory($this->url); if (!$this->filesystem->isDirectory($logDir)) { $this->filesystem->createDirectory($logDir, DriverInterface::WRITEABLE_DIRECTORY_MODE); } // make sure the handler is at least there if ($this->rotatingFileHandler != null) { $this->rotatingFileHandler->write($record); } else { // write the log somewhere $record['message'] .= ' - ERROR ROTATING LOG FILE'; parent::write($record); } }
public function useDailyFiles($path, $days = 0, $level = 'debug') { $level = $this->parseLevel($level); $this->monolog->pushHandler($handler = new RotatingFileHandler($path, $days, $level)); $handler->setFormatter($this->getDefaultFormatter()); }
* @since Example available since Release 1.0.0 */ $baseDir = dirname(__DIR__); $vendorDir = $baseDir . '/vendor'; require_once $vendorDir . '/autoload.php'; use Bartlett\Monolog\Handler\GrowlHandler; use Bartlett\Monolog\Handler\CallbackFilterHandler; use Monolog\Logger; use Monolog\Handler\RotatingFileHandler; use Monolog\Formatter\LineFormatter; use Monolog\Processor\PsrLogMessageProcessor; $processors = array(new PsrLogMessageProcessor()); // Create the logger $logger = new Logger('long_process', array(), $processors); // Create some handlers $stream = new RotatingFileHandler(__DIR__ . DIRECTORY_SEPARATOR . 'long_process.log'); $stream->setFilenameFormat('{filename}-{date}', 'Ymd'); $logger->pushHandler($stream); try { // Create filter rules $filters = array(function ($record) { if (!array_key_exists('count', $record['context'])) { return false; } return $record['context']['count'] > 5; }); $growl = new CallbackFilterHandler(new GrowlHandler(array(), Logger::INFO), $filters); $logger->pushHandler($growl); } catch (\Exception $e) { // Growl server is probably not started echo $e->getMessage(), PHP_EOL;
/** * log.ymlの内容に応じたHandlerの設定を行う * * @param array $channelValues * @return FingersCrossedHandler */ public function getHandler(array $channelValues) { $app = $this->app; $levels = Logger::getLevels(); // ファイル名などの設定を行い、設定がなければデフォルト値を設定 $logFileName = isset($channelValues['filename']) ? $channelValues['filename'] : $app['config']['log']['filename']; $delimiter = isset($channelValues['delimiter']) ? $channelValues['delimiter'] : $app['config']['log']['delimiter']; $dateFormat = isset($channelValues['dateformat']) ? $channelValues['dateformat'] : $app['config']['log']['dateformat']; $logLevel = isset($channelValues['log_level']) ? $channelValues['log_level'] : $app['config']['log']['log_level']; $actionLevel = isset($channelValues['action_level']) ? $channelValues['action_level'] : $app['config']['log']['action_level']; $passthruLevel = isset($channelValues['passthru_level']) ? $channelValues['passthru_level'] : $app['config']['log']['passthru_level']; $maxFiles = isset($channelValues['max_files']) ? $channelValues['max_files'] : $app['config']['log']['max_files']; $logDateFormat = isset($channelValues['log_dateformat']) ? $channelValues['log_dateformat'] : $app['config']['log']['log_dateformat']; $logFormat = isset($channelValues['log_format']) ? $channelValues['log_format'] : $app['config']['log']['log_format']; if ($app['debug']) { $level = Logger::DEBUG; } else { $level = $logLevel; } // RotateHandlerの設定 $filename = $app['config']['root_dir'] . '/app/log/' . $logFileName . '.log'; $RotateHandler = new RotatingFileHandler($filename, $maxFiles, $level); $RotateHandler->setFilenameFormat($logFileName . $delimiter . '{date}' . $app['config']['log']['suffix'], $dateFormat); // ログフォーマットの設定(設定ファイルで定義) $RotateHandler->setFormatter(new LineFormatter($logFormat . PHP_EOL, $logDateFormat, true, true)); // FingerCossedHandlerの設定 $FingerCrossedHandler = new FingersCrossedHandler($RotateHandler, new ErrorLevelActivationStrategy($levels[$actionLevel]), 0, true, true, $levels[$passthruLevel]); // Processorの内容をログ出力 $webProcessor = new WebProcessor(); $uidProcessor = new UidProcessor(8); $FingerCrossedHandler->pushProcessor(function ($record) use($app, $uidProcessor, $webProcessor) { // ログフォーマットに出力する値を独自に設定 $record['level_name'] = sprintf("%-5s", $record['level_name']); // セッションIDと会員IDを設定 $record['session_id'] = null; $record['user_id'] = null; if ($app->isBooted()) { if (isset($app['session'])) { $sessionId = $app['session']->getId(); if ($sessionId) { $record['session_id'] = substr(sha1($sessionId), 0, 8); } } if (isset($app['user'])) { $user = $app->user(); if ($user instanceof Customer || $user instanceof Member) { $record['user_id'] = $user->getId(); } } } $record['uid'] = $uidProcessor->getUid(); $record['url'] = $webProcessor->getRequestUri(); $record['ip'] = $webProcessor->getClientIp(); $record['referrer'] = $webProcessor->getReferer(); $record['method'] = $webProcessor->getMethod(); $record['user_agent'] = $webProcessor->getUserAgent(); // クラス名などを一旦保持し、不要な情報は削除 $line = $record['extra']['line']; $functionName = $record['extra']['function']; // php5.3だとclass名が取得できないため、ファイル名を元に出力 // $className = $record['extra']['class']; $className = $record['extra']['file']; // 不要な情報を削除 unset($record['extra']['file']); unset($record['extra']['line']); unset($record['extra']['class']); unset($record['extra']['function']); $record['class'] = pathinfo($className, PATHINFO_FILENAME); $record['function'] = $functionName; $record['line'] = $line; return $record; }); // クラス名等を取得するProcessor、ログ出力時にクラス名/関数名を無視するための設定を行っている $skipClasses = array('Psr\\Log\\', 'Eccube\\Log\\'); $skipFunctions = array('log_info', 'log_notice', 'log_warning', 'log_error', 'log_critical', 'log_alert', 'log_emergency'); $intro = new IntrospectionProcessor(Logger::DEBUG, $skipClasses, $skipFunctions); $FingerCrossedHandler->pushProcessor($intro); return $FingerCrossedHandler; }
/** * @param string|null $fileName * @param string|null $lineFormat * @param string|null $messageFormat * @param string|null $logLevel * @return Http */ public function addDefaultLogger($fileName = null, $lineFormat = null, $messageFormat = null, $logLevel = null) { $fileName = $fileName ?: static::DEFAULT_LOG_FILE_NAME; $lineFormat = $lineFormat ?: static::DEFAULT_LOG_LINE_FORMAT; $messageFormat = $messageFormat ?: static::DEFAULT_LOG_MESSAGE_FORMAT; $logLevel = $logLevel ?: LogLevel::INFO; $logHandler = new RotatingFileHandler($fileName); $logHandler->setFormatter(new LineFormatter($lineFormat, null, true)); return $this->addLogger(new Logger('Logger', [$logHandler]), new MessageFormatter($messageFormat), $logLevel); }
/** * Create new logger instance with given * configuration and store it in array * with channel name * * @param string $channel Channel name * @param array $config Channel configuration * @return void */ private function createLogger($channel, array $config) { // Setup configuration // Use default laravel logs path $storagePath = $this->app->make('path.storage'); $filepath = $storagePath . '/logs/' . $config['stream']; $logger = new Logger($channel); $handler = new StreamHandler($filepath); // Daily rotation if ($config['daily']) { $handler = new RotatingFileHandler($filepath, 1); } // Format line if (isset($config['format'])) { $format = $config['format']; $handler->setFormatter(new LineFormatter($format['output'], $format['date'])); } $logger->pushHandler($handler); $this->channels[$channel] = $logger; }
/** * Register a daily file log handler. * * @param string $path * @param int $days * @param string $level * @param string $format * @return void */ public function useDailyFiles($path, $days = 0, $level = 'debug', $format = '', $dateFormat = 'Y-m-d H:i:s', $permissions = null) { $level = $this->parseLevel($level); $handler = new RotatingFileHandler($path, $days, $level, true, $permissions); if ($format) { $handler->setFormatter(new LineFormatter($format, $dateFormat)); } $this->monolog->pushHandler($handler); }