| 
<?php
 namespace JLaso\SimpleLogger;
 
 use Symfony\Component\Yaml\Yaml;
 
 abstract class BaseConfig
 {
 /** @var  array */
 protected $config;
 /** @var  string */
 protected $logFile;
 /** @var string  */
 protected $projectDir;
 /** @var  array */
 protected $levels;
 
 public function __construct()
 {
 // vendor/jlaso/simple-logger/src
 $this->projectDir =
 preg_match("~vendor/jlaso/simple-logger/src$~i", __DIR__) ?
 realpath(__DIR__ . '/../../../../') :
 realpath(__DIR__ . '/../')
 ;
 
 $this->readConfig();
 }
 
 /**
 * @return array
 */
 public function getConfig()
 {
 return $this->config;
 }
 
 /**
 * @return string
 */
 public function getProjectDir()
 {
 return $this->projectDir;
 }
 
 protected function readConfig()
 {
 $this->config = array_merge(
 array(
 'logger' => array(
 'path' => '%project_dir%/app/cache/logger-%date%.log',
 'level' => 'info,debug,error',
 'date_format' => 'Y-m-d',
 ),
 ),
 Yaml::parse(file_get_contents($this->getConfigFile()))
 );
 $format = $this->config['logger']['date_format'];
 $this->logFile = str_replace(
 array('%project_dir%', '%date%'),
 array($this->projectDir, date($format)),
 $this->config['logger']['path']
 );
 $this->levels = explode(',', trim(strtolower($this->config['logger']['level'])));
 }
 
 /**
 * @return string
 * @throws \Exception
 */
 protected function getConfigFile()
 {
 $configFile = $this->projectDir.'/config-simple-logger.yml';
 if(!file_exists($configFile)) {
 $configFile = dirname(__DIR__) . '/config-simple-logger.yml.dist';
 if (!file_exists($configFile)) {
 throw new \Exception("Configuration file {$configFile} not found");
 }
 }
 if(!is_readable($configFile)){
 throw new \Exception("File {$configFile} is not readable!");
 }
 
 return $configFile;
 }
 
 /**
 * @return string
 */
 public function getLogFile()
 {
 return $this->logFile;
 }
 
 /**
 * @return array
 */
 public function getLevels()
 {
 return $this->levels;
 }
 
 /**
 * @param string $level
 * @return bool
 */
 public function isLevel($level)
 {
 return in_array(trim(strtolower($level)), $this->levels);
 }
 
 }
 |