PSR-3 – Logging

Unlike the previous two PSR topics we have discussed, this is actually an interface and not a recommendation. Here is another dirty little secret about PSR-3, it really does not matter. If you need to have a logger in your PHP application, just use monolog. I will talk about PSR-3 for completeness sake and just in case you are not able/allowed to use 3rd party libraries.

What is logging ? It is a way to store/append output to a file so that you know what is going on with your app. You can store user actions, performance data, error outputs, warnings, debug data and so on. Basically anything you may find useful gets written into a dedicated file and that is logging. PSR-3 interface has the following methods

namespace Psr\Log;

/**
* Describes a logger instance
*
* The message MUST be a string or object implementing __toString().
*
* The message MAY contain placeholders in the form: {foo} where foo
* will be replaced by the context data in key "foo".
*
* The context array can contain arbitrary data, the only assumption that
* can be made by implementors is that if an Exception instance is given
* to produce a stack trace, it MUST be in a key named "exception".
*
* See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
* for the full interface specification.
*/
interface LoggerInterface
{
/**
* System is unusable.
*
* @param string $message
* @param array $context
* @return null
*/
public function emergency($message, array $context = array());

/**
* Action must be taken immediately.
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*
* @param string $message
* @param array $context
* @return null
*/
public function alert($message, array $context = array());

/**
* Critical conditions.
*
* Example: Application component unavailable, unexpected exception.
*
* @param string $message
* @param array $context
* @return null
*/
public function critical($message, array $context = array());

/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
*
* @param string $message
* @param array $context
* @return null
*/
public function error($message, array $context = array());

/**
* Exceptional occurrences that are not errors.
*
* Example: Use of deprecated APIs, poor use of an API, undesirable things
* that are not necessarily wrong.
*
* @param string $message
* @param array $context
* @return null
*/
public function warning($message, array $context = array());

/**
* Normal but significant events.
*
* @param string $message
* @param array $context
* @return null
*/
public function notice($message, array $context = array());

/**
* Interesting events.
*
* Example: User logs in, SQL logs.
*
* @param string $message
* @param array $context
* @return null
*/
public function info($message, array $context = array());

/**
* Detailed debug information.
*
* @param string $message
* @param array $context
* @return null
*/
public function debug($message, array $context = array());

/**
* Logs with an arbitrary level.
*
* @param mixed $level
* @param string $message
* @param array $context
* @return null
*/
public function log($level, $message, array $context = array());
}

As much as I love sharing with you fellow coders, I did not write all that down. It is a straight copy paste from their github repo. Basically, if you want to create your own logging mechanism and you want to do it in PSR way, make sure you include all those methods.

This PSR-3 feels very irrelevant to me to be honest. However, I am glad that it exists in the name of unity. I just want to point out right now that the next one (PSR-4) is of a great importance. It is the next post in the line and I will see you there.

Posted in PHP