├── Log └── MonologWriter.php ├── README.markdown └── composer.json /Log/MonologWriter.php: -------------------------------------------------------------------------------- 1 | new \Flynsarmy\SlimMonolog\Log\MonologWriter(array( 12 | * 'name' => 'SlimMonoLogger', 13 | * 'handlers' => array( 14 | * new \Monolog\Handler\StreamHandler('./logs/'.date('y-m-d').'.log'), 15 | * ), 16 | * 'processors' => array( 17 | * function ($record) { 18 | * $record['extra']['dummy'] = 'Hello world!'; 19 | * 20 | * return $record; 21 | * }, 22 | * ), 23 | * )) 24 | * )); 25 | * 26 | * SETTINGS 27 | * 28 | * You may customize this log writer by passing an array of 29 | * settings into the class constructor. Available options 30 | * are shown above the constructor method below. 31 | * 32 | * @author Flyn San 33 | * @copyright 2013 Flynsarmy 34 | * 35 | * MIT LICENSE 36 | * 37 | * Permission is hereby granted, free of charge, to any person obtaining 38 | * a copy of this software and associated documentation files (the 39 | * "Software"), to deal in the Software without restriction, including 40 | * without limitation the rights to use, copy, modify, merge, publish, 41 | * distribute, sublicense, and/or sell copies of the Software, and to 42 | * permit persons to whom the Software is furnished to do so, subject to 43 | * the following conditions: 44 | * 45 | * The above copyright notice and this permission notice shall be 46 | * included in all copies or substantial portions of the Software. 47 | * 48 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 49 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 50 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 51 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 52 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 53 | * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 54 | * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 55 | */ 56 | namespace Flynsarmy\SlimMonolog\Log; 57 | 58 | class MonologWriter 59 | { 60 | /** 61 | * @var resource 62 | */ 63 | protected $resource; 64 | 65 | /** 66 | * @var array 67 | */ 68 | protected $settings; 69 | 70 | /** 71 | * Converts Slim log level to Monolog log level 72 | * @var array 73 | */ 74 | protected $log_level = array( 75 | \Slim\Log::EMERGENCY => \Monolog\Logger::EMERGENCY, 76 | \Slim\Log::ALERT => \Monolog\Logger::ALERT, 77 | \Slim\Log::CRITICAL => \Monolog\Logger::CRITICAL, 78 | \Slim\Log::ERROR => \Monolog\Logger::ERROR, 79 | \Slim\Log::WARN => \Monolog\Logger::WARNING, 80 | \Slim\Log::NOTICE => \Monolog\Logger::NOTICE, 81 | \Slim\Log::INFO => \Monolog\Logger::INFO, 82 | \Slim\Log::DEBUG => \Monolog\Logger::DEBUG, 83 | ); 84 | 85 | /** 86 | * Constructor 87 | * 88 | * Prepare this log writer. Available settings are: 89 | * 90 | * name: 91 | * (string) The name for this Monolog logger 92 | * 93 | * handlers: 94 | * (array) Array of initialized monolog handlers - eg StreamHandler 95 | * 96 | * processors: 97 | * (array) Array of monolog processors - anonymous functions 98 | * 99 | * @param array $settings 100 | * @param bool $merge 101 | * @return void 102 | */ 103 | public function __construct($settings = array(), $merge = true) 104 | { 105 | //Merge user settings 106 | if ($merge) { 107 | $this->settings = array_merge(array( 108 | 'name' => 'SlimMonoLogger', 109 | 'handlers' => array(), 110 | 'processors' => array(), 111 | ), $settings); 112 | } else { 113 | $this->settings = $settings; 114 | } 115 | } 116 | 117 | /** 118 | * Write to log 119 | * 120 | * @param mixed $object 121 | * @param int $level 122 | * @return void 123 | */ 124 | public function write($object, $level) 125 | { 126 | // Don't bother typesetting $object, Monolog will do this for us 127 | $this->get_resource()->addRecord( 128 | $this->get_log_level($level, \Monolog\Logger::WARNING), 129 | $object 130 | ); 131 | } 132 | 133 | /** 134 | * Converts Slim log level to Monolog log level 135 | * 136 | * @param int $slim_log_level Slim log level we're converting from 137 | * @param int $default_level Monolog log level to use if $slim_log_level not found 138 | * @return int Monolog log level 139 | */ 140 | protected function get_log_level( $slim_log_level, $default_monolog_log_level ) 141 | { 142 | return isset($this->log_level[$slim_log_level]) ? 143 | $this->log_level[$slim_log_level] : 144 | $default_monolog_log_level; 145 | } 146 | 147 | /** 148 | * Returns the Logger resource 149 | * 150 | * @return [\Monolog\Logger] the Logger instance 151 | */ 152 | public function get_resource() 153 | { 154 | if ( !$this->resource ) 155 | { 156 | // create a log channel 157 | $this->resource = new \Monolog\Logger($this->settings['name']); 158 | foreach ( $this->settings['handlers'] as $handler ) 159 | $this->resource->pushHandler($handler); 160 | foreach ( $this->settings['processors'] as $processor ) 161 | $this->resource->pushProcessor($processor); 162 | } 163 | return $this->resource; 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | # Monolog Logging for Slim Framework 2 | 3 | This repository adds support for logging to [Monolog](https://github.com/Seldaek/monolog) to the [Slim Framework](http://www.slimframework.com/). 4 | 5 | # Installation 6 | 7 | MonologWriter takes an array of handlers, an array of processors and a logger name. 8 | 9 | ```php 10 | $logger = new \Flynsarmy\SlimMonolog\Log\MonologWriter(array( 11 | 'handlers' => array( 12 | new \Monolog\Handler\StreamHandler('./logs/'.date('Y-m-d').'.log'), 13 | ), 14 | )); 15 | 16 | $app = new \Slim\Slim(array( 17 | 'log.writer' => $logger, 18 | )); 19 | ``` 20 | 21 | This example assumes you are autoloading dependencies using [Composer](http://getcomposer.org/). If you are not 22 | using Composer, you must manually `require` the log writer class before instantiating it. 23 | 24 | # License 25 | 26 | The Slim-Monolog is released under the MIT public license. 27 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flynsarmy/slim-monolog", 3 | "type": "library", 4 | "description": "Monolog logging support Slim Framework", 5 | "keywords": ["logging", "extensions", "middleware"], 6 | "homepage": "http://github.com/flynsarmy/Slim-Monolog", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Flyn San", 11 | "email": "flynsarmy@gmail.com", 12 | "homepage": "http://www.flynsarmy.com/" 13 | } 14 | ], 15 | "require": { 16 | "monolog/monolog": ">=1.6.0", 17 | "slim/slim": ">=2.3.0", 18 | "php": ">=5.3.0" 19 | }, 20 | "autoload": { 21 | "psr-0": { 22 | "Flynsarmy\\SlimMonolog": "." 23 | } 24 | }, 25 | "target-dir": "Flynsarmy/SlimMonolog" 26 | } 27 | --------------------------------------------------------------------------------