Your SlideShare is downloading. ×
0
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Errors, Exceptions & Logging (PHP Hants Oct '13)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Errors, Exceptions & Logging (PHP Hants Oct '13)

5,804

Published on

The talk is designed to give an entry-level introduction to how you should be handling errors, exceptions and how to effectively log in an application.

The talk is designed to give an entry-level introduction to how you should be handling errors, exceptions and how to effectively log in an application.

Published in: Real Estate, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5,804
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Errors, Exceptions & Logging by James Titcumb at PHP Hampshire Oct ‘13
  • 2. Errors
  • 3. ● Something broke… :) ● e.g. ○ Can’t connect to MySQL (mysqli_connect) ○ No such file or directory (fopen) ● Usually from PHP core ● Sometimes fatal (stop execution) What are errors?
  • 4. Types of PHP Errors ● E_ERROR ● E_WARNING ● E_NOTICE ● E_PARSE ● Others (E_STRICT, E_DEPRECATED) etc. ● User errors (E_USER_ERROR etc.)
  • 5. E_ERROR <?php foo(); // Fatal error: Call to undefined function foo() in /in//in/N2gbL on line 3
  • 6. E_WARNING <?php fopen('foo', 'r'); // Warning: fopen(foo): failed to open stream: No such file or directory in /in//in/tZHGY on line 3
  • 7. E_NOTICE <?php $a = $b; // Notice: Undefined variable: b in /in//in/9dPC5 on line 3
  • 8. E_PARSE <?php x c // Parse error: syntax error, unexpected 'c' (T_STRING) in /in//in/fkEaj on line 3
  • 9. Problems? source: http://www.dpaddbags.com/blog/episode-119-technology-sucks/
  • 10. Problems. ● Depends on “error_reporting” php.ini setting ● Displaying errors is UGLY ● Existence of “@” operator ● Only logs to file or syslog ● Easily ignored ● Not very “OO”
  • 11. Ways Around // Will raise E_NOTICE fopen($somefile, 'r'); // No error! :) if (file_exists($somefile)) { fopen($somefile, 'r'); } else { // nice handling... }
  • 12. Exceptions
  • 13. ● Something still broke ● Wider scope: ○ Logic errors ○ Flow control (for errors) ● “Catchable” ● Turn into fatal errors if not caught ● They are classes (can make your own) ● Common in other OO languages What are exceptions?
  • 14. Jargon Buster ● throw Triggering an exception ● try Try to run a piece of code which *may* throw an exception ● catch Handle an exception ● finally Always run some code after a try/catch block
  • 15. ● Built in to PHP ● More descriptive than just “Exception”, e.g.: ○ InvalidArgumentException ○ LogicException ○ OutOfBoundsException ○ RuntimeException ○ see PHP manual for more SPL Exceptions
  • 16. Example (throw) class Division { public function divide($a, $b) { if ($b == 0) { throw new Exception(‘div by zero’); } return ($a / $b); } }
  • 17. Example (catch) $division = new Division(); try { $result = $division->divide(5, 0); } catch (Exception $exception) { $logger->warning($exception- >getMessage()); }
  • 18. Logging
  • 19. Why use logging? ● Easier to find problems ● More detail ● “paper trail” for code ● Log where you want
  • 20. What about Apache’s error_log? source: http://up-ship.com/blog/?p=20903
  • 21. Why? ● error_log is too basic (message, file, line) ● difficult to read / parse ● depends on “error_reporting” setting
  • 22. ● monolog ● phpconsole ● log4php ● RavenPHP + Sentry ● FirePHP (dev environment) ● Roll your own Logging Options
  • 23. Requirements (for everyone) ● Fire & forget ● Minimum or zero latency ● Highly available ● Should be PSR-3 compatible ● Log everything: ○ Exceptions ○ Errors ○ Fatal Errors
  • 24. How they work... source: http://mirror-sg-wv1.gallery.hd.org/_c/natural-science/cogs-with-meshed-teeth-AJHD.jpg.html
  • 25. Capture Method Data Storage Logger (PSR-3) Handler / Adapter Typical PSR-3 Compatible Design
  • 26. MonologErrorHandler ->handleException() MongoDB MonologLogger ->log() MonologHandler ->handle() Monolog
  • 27. EdLogHandlerErrorHandler ->handleException() RabbitMQ EdLogLogger ->log() EdLogPublisherAmqpPublisher ->publish() Logging Server Low Latency (using AMQP) JSON payload
  • 28. Capturing Logging Use these and send output to $logger ● set_exception_handler() ○ Handles all uncaught exceptions ● set_error_handler() ○ Handles most errors ● register_shutdown_function() ○ Handles fatal errors
  • 29. Sending Log Messages ● PSR-3 makes it easy ● However you want… ● Monolog has loads: ○ syslog-compatible / error_log ○ Email, HipChat ○ AMQP, Sentry, Zend Monitor, Graylog2 ○ Redis, MongoDB, CouchDB
  • 30. Summary ● PHP generates errors usually ● Exceptions are great in OOP context ● More control with exceptions ● Logging is important ● Logging is easy ● Short term investment, long term benefit ● NO EXCUSES!
  • 31. Questions?
  • 32. Feedback please... https://joind.in/9452
  • 33. Thanks! @asgrim github.com/asgrim

×