<?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); 
    } 
 
}
 
 |