Example #1
0
 /**
  * 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;
     }
 }
Example #2
0
 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);
 }
Example #3
0
 /**
  * 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));
 }
 public function testMessageSubjectFormatting()
 {
     // Wire Mailer to expect a specific Swift_Message with a customized Subject
     $messageTemplate = new \Swift_Message();
     $messageTemplate->setSubject('Alert: %level_name% %message%');
     $receivedMessage = null;
     $this->mailer->expects($this->once())->method('send')->with($this->callback(function ($value) use(&$receivedMessage) {
         $receivedMessage = $value;
         return true;
     }));
     $handler = new SwiftMailerHandler($this->mailer, $messageTemplate);
     $records = array($this->getRecord(Logger::EMERGENCY));
     $handler->handleBatch($records);
     $this->assertEquals('Alert: EMERGENCY test', $receivedMessage->getSubject());
 }
 /**
  * {@inheritdoc}
  */
 protected function send($content, array $records)
 {
     parent::send($content, $records);
     if ($this->instantFlush) {
         $this->flushMemorySpool();
     }
 }
 public function testMessageCanBeCustomizedGivenLoggedData()
 {
     // Wire Mailer to expect a specific Swift_Message with a customized Subject
     $expectedMessage = new \Swift_Message();
     $this->mailer->expects($this->once())->method('send')->with($this->callback(function ($value) use($expectedMessage) {
         return $value instanceof \Swift_Message && $value->getSubject() === 'Emergency' && $value === $expectedMessage;
     }));
     // Callback dynamically changes subject based on number of logged records
     $callback = function ($content, array $records) use($expectedMessage) {
         $subject = count($records) > 0 ? 'Emergency' : 'Normal';
         $expectedMessage->setSubject($subject);
         return $expectedMessage;
     };
     $handler = new SwiftMailerHandler($this->mailer, $callback);
     // Logging 1 record makes this an Emergency
     $records = array($this->getRecord(Logger::EMERGENCY));
     $handler->handleBatch($records);
 }
Example #7
0
 /**
  * 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.']);
     }
 }