/** * Wraps the creation of log handlers so they can be created in a standard way. * * @param string $type Type of log handler to create * @param array $options Configuration options for log handler * * @throws \Exception */ public function addLogHandler($type, $options) { // Throw exception if no handler configuration has been set. FirePHPHandler is the exception, it doesn't // have any config options. if ($options == []) { throw new \Exception('Missing handler configuration!', 1); } // Set the log level if one wasn't given. if (!array_key_exists('log_level', $options)) { $options['log_level'] = $this->defaultLogLevel; } // Allow messages to "bubble-up" the stack to other handlers if (!array_key_exists('bubble', $options)) { $options['bubble'] = true; } // Add the requested handler switch ($type) { case 'file': $this->pushHandler(new StreamHandler($options['log_location'], $this->loggerLevel($options['log_level']), $options['bubble'])); break; case 'firebug': $this->pushHandler(new FirePHPHandler($this->loggerLevel($options['log_level']), $options['bubble'])); break; case 'syslog': $syslog = new SyslogHandler($options['facility'], $options['syslogLevel'], $options['bubble']); $formatter = new LineFormatter('%channel%.%level_name%: %message% %context% %extra%'); $syslog->setFormatter($formatter); $this->pushHandler($syslog); break; case 'mail': // Create the Swift_mail transport $transport = Swift_SmtpTransport::newInstance($options['host'], $options['port'], 'ssl')->setUsername($options['username'])->setPassword($options['password']); // Create the Mailer using your created Transport $mailer = Swift_Mailer::newInstance($transport); // Create a message $message = Swift_Message::newInstance($options['subject'])->setFrom($options['from'])->setTo($options['to'])->setBody('', 'text/html'); $htmlFormatter = new HtmlFormatter(); $mailStream = new SwiftMailerHandler($mailer, $message, $this->loggerLevel($options['log_level']), $options['bubble']); $mailStream->setFormatter($htmlFormatter); $this->pushHandler($mailStream); break; case 'sms': $twilio = new TwilioHandler($options['account_sid'], $options['auth_token'], $options['from_numbers'], $options['to_numbers'], $options['log_level'], $options['bubble']); $formatter = new LineFormatter('%channel%.%level_name%: %message% %context%'); $twilio->setFormatter($formatter); $this->pushHandler($twilio); break; default: throw new \Exception('Unknown Log Handler', 1); break; } }
public static function initHandler(Application $app, $logLevel = Logger::ERROR) { // Retrieve the Config from Application. $config = $app['config']['mail.from']; // Prepare the instances for Swift Mailer and Message. $swiftMailer = $app['mailer']->getSwiftMailer(); $swiftMessage = Swift_Message::newInstance('[Log] ERROR!')->setContentType('text/html')->setFrom($config['address'], $config['name'])->setTo(SITEEMAIL); // Create a SwiftMailerHandler instance. $monologHandler = new SwiftMailerHandler($swiftMailer, $swiftMessage, $logLevel, true); // Setup a HTML Formatter to this handler. $monologFormatter = new HtmlFormatter(); $monologHandler->setFormatter($monologFormatter); // Push the handler to Monolog instance. $app['log']->getMonolog()->pushHandler($monologHandler); }
/** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); $this->logName = sprintf('refresh-%s-%s', Carbon::now()->toDateString(), Carbon::now()->toTimeString()); $this->log = new Logger($this->logName); // https://laracasts.com/discuss/channels/requests/log-to-mail $swiftMessage = Mail::getSwiftMailer()->createMessage()->setFrom('*****@*****.**', 'Find Your DO Lookup API')->setTo('*****@*****.**', 'Patrick Sinco')->setBody('hiya'); $mailHandler = new SwiftMailerHandler(Mail::getSwiftMailer(), $swiftMessage, Logger::ERROR); $streamHandler = new StreamHandler(storage_path('logs/' . $this->logName), Logger::INFO); $formatter = new LineFormatter("[%datetime%] %level_name%: %message%\n", false, true); $streamHandler->setFormatter($formatter); $mailHandler->setFormatter($formatter); $this->log->pushHandler($streamHandler); $this->log->pushHandler(new BufferHandler($mailHandler)); }
/** * Get the logger interface * @since Version 3.9.1 * @return \Monolog\Logger */ public static function getLogger() { $Registry = Registry::getInstance(); $Config = self::getConfig(); try { $Log = $Registry->get("log"); } catch (Exception $e) { $Log = new Logger("railpage"); /** * Shit's broke, send an email via SwiftMail */ if (isset($Config->SMTP)) { $Redis = self::getRedis(); if (!($mailStream = $Redis->fetch("railpage:logger.swiftmail"))) { $transport = Swift_SmtpTransport::newInstance($Config->SMTP->host, $Config->SMTP->port, $Config->SMTP->TLS = true ? "tls" : NULL)->setUsername($Config->SMTP->username)->setPassword($Config->SMTP->password); $mailer = Swift_Mailer::newInstance($transport); $mailer->registerPlugin(new Swift_Plugins_AntiFloodPlugin(100, 30)); $message = Swift_Message::newInstance("[RP] Something went wrong!")->setFrom(array("*****@*****.**" => "Failpage service"))->setTo(array("*****@*****.**" => "Michael Greenhill"))->setBody("", "text/html"); $htmlFormatter = new HtmlFormatter(); $mailStream = new SwiftMailerHandler($mailer, $message, Logger::ERROR); $mailStream->setFormatter($htmlFormatter); $Redis->save("railpage:logger.swiftmail", $mailStream); } $Log->pushHandler($mailStream); } /** * Pushover */ #$Log->pushHandler(new PushoverHandler("aVHTDYcWLH7y8ZXoDNnaHjAuH7gnY5", "uWy9phgETHeYLqTZBL5YSVjoqB93id", "Railpage API")); $Registry->set("log", $Log); } return $Log; }
public function register(Kernel $kernel, $options = array()) { $kernel->monolog = function () use($kernel, $options) { // create sub container for monolog $container = new Container(); $container['logger'] = $container->factory(function () { $channel = isset($options['Channel']) ? $options['Channel'] : 'phifty'; $logger = new Logger($channel); // $log->pushProcessor(new Monolog\Processor\IntrospectionProcessor(Monolog\Logger::INFO)) return $logger; }); // Create different logger $container['file'] = function ($c) { $logger = $c['logger']; /* // This is the Handler, I choose a RotatingFileHandler in ordert to have // a logfile per day, for the last 60 days. Inside the logs I wanted to // have any message from the “info” level above. $logger->pushHandler(new Monolog\Handler\RotatingFileHandler(“logs/events.log”,60, Monolog\Logger::INFO)); */ $logFilePath = implode(DIRECTORY_SEPARATOR, ['logs', date('c') . '.log']); $logger->pushHandler(new StreamHandler($logFilePath, Logger::ERROR)); }; if (isset($options['SwiftMailerHandler'])) { $container['mail'] = function ($c) use($kernel, $logger, $options) { $from = $options['SwiftMailerHandler']['From']; $to = $options['SwiftMailerHandler']['To']; // Get transport $mailer = $kernel->mailer; // Create an empty message /* $message = Swift_Message::newInstance('Something wrong occurred!') ->setFrom(['*****@*****.**' => 'Error Reporting service']) ->setTo(['*****@*****.**' => 'Myself']); */ $message = Swift_Message::newInstance('Something wrong occurred!')->setFrom($from)->setTo($to); $message->setBody('', 'text/html'); $handler = new SwiftMailerHandler($mailer, $message, Logger::WARNING); // The new SwiftMailerHandler: it takes the $mailer and the $message // as the first two arguments, and in the third argument we specify // that we will use this handler (= we will receive e-mails) // only for warnings and above // Apply the html formatter to the handler $htmlFormatter = new HtmlFormatter(); $handler->setFormatter($htmlFormatter); //Register the SwiftMailerHandler with the logger $c['logger']->pushHandler($handler); }; } // define console logger $container['console'] = function ($c) { // line formatter $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message%\n"); $handler = new StreamHandler('php://stderr', Logger::ERROR); $handler->setFormatter($formatter); $logger = $c['logger']; $logger->pushHandler($handler); return $logger; }; return $container; }; }
/** * Handles incoming webhook requests. */ public function index() { // set up logging to email $this->log = Log::getMonolog(); if ($to = config('auto-deploy.notify')) { $domain = parse_url(config('app.url'), PHP_URL_HOST); $msg = \Swift_Message::newInstance('Project Deployed')->setFrom(["do_not_reply@{$domain}" => "Laravel Auto-Deploy[{$domain}]"])->setTo($to)->setBody('', 'text/html'); $handler = new SwiftMailerHandler(Mail::getSwiftMailer(), $msg, Logger::NOTICE); $handler->setFormatter(new HtmlFormatter()); $this->log->pushHandler($handler); } // check to see if we should execute this event if (in_array($this->origin->event(), array_keys(config("auto-deploy.{$this->origin->name}")))) { // get the parameters for the event we're handling $configKey = "auto-deploy.{$this->origin->name}.{$this->origin->event()}"; $this->webroot = config("{$configKey}.webroot"); $this->installDir = dirname($this->webroot) . '/' . date('Y-m-d') . '_' . $this->commitId; $steps = config("{$configKey}.steps"); // execute the configured steps $this->result = ['Commit_ID' => $this->commitId, 'Timestamp' => date('r'), 'output' => '']; $whitelist = ['backupDatabase', 'pull', 'copyEnv', 'composer', 'npm', 'migrate', 'seed', 'deploy']; foreach ($steps as $step) { if (in_array($step, $whitelist) && !$this->{$step}()) { $this->log->error('Deploy failed.', $this->result); return; } } $this->log->notice('Deploy succeeded!', $this->result); } else { $this->log->error('Deploy failed.', ['Reason' => 'This event was not configured.']); } }