Changeset 18406 for lang/php

Show
Ignore:
Timestamp:
08/28/08 23:02:20 (3 months ago)
Author:
nowelium
Message:
 
Location:
lang/php/misc/Logging
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • lang/php/misc/Logging/Logger.php

    r18405 r18406  
    33class Logger { 
    44 
     5    private $name; 
    56    private $level; 
    67    private $appenders = array(); 
    78    private $starttime; 
    89     
    9     public function __construct() { 
     10    public function __construct($name = '') { 
     11        $this->name = $name; 
    1012        $this->level = LogLevel::$OFF; 
    1113        $this->starttime = new DateTime; 
     
    1416    public function setLevel(LogLevel $level) { 
    1517        $this->level = $level; 
     18    } 
     19 
     20    public function getName(){ 
     21        return $this->name; 
    1622    } 
    1723     
     
    3440 
    3541        $message = vsprintf($format, $params); 
    36         $event = new LoggingEvent($this, $message, $level); 
     42        $event = new LoggingEvent($this, $level, $message); 
    3743        for ($i = 0; $i < $c; ++$i) { 
    3844            $this->appenders[$i]->append($event); 
  • lang/php/misc/Logging/LoggingEvent.php

    r18405 r18406  
    44         
    55        private $logger; 
     6        private $level; 
    67        private $message; 
    7         private $level; 
    88        private $starttime; 
    99         
    10         public function __construct($logger, $message, $level){ 
     10        public function __construct(Logger $logger, LogLevel $level, $message){ 
    1111                $this->logger = $logger; 
     12                $this->level = $level; 
    1213                $this->message = $message; 
    13                 $this->level = $level; 
    1414                $this->startTime = new DateTime; 
    1515        } 
  • lang/php/misc/Logging/appender/SyslogAppender.php

    r18405 r18406  
    11<?php 
     2 
     3interface SyslogFacility { 
     4    // kernel messages 
     5    const LOG_KERN = 0; 
     6    // random user-level messages(1 << 3) 
     7    const LOG_USER = 8; 
     8    // mail system(2<<3) 
     9    const LOG_MAIL = 16;  
     10    // system daemons(3<<3) 
     11    const LOG_DAEMON = 24; 
     12    // security/authorization(4<<3) 
     13    const LOG_AUTH = 32; 
     14    // internal syslogd use(5<<3) 
     15    const LOG_SYSLOG = 40; 
     16    // line printer subsystem(6<<3) 
     17    const LOG_LPR = 48; 
     18    // network news subsystem(7<<3) 
     19    const LOG_NEWS = 56; 
     20    // UUCP subsystem(8<<3) 
     21    const LOG_UUCP = 64; 
     22    // clock daemon(15<<3) 
     23    const LOG_CRON = 120; 
     24     
     25    // reserved for local use(16<<3) 
     26    const LOG_LOCAL0 = 128; 
     27    // reserved for local use(17<<3) 
     28    const LOG_LOCAL1 = 136; 
     29    // reserved for local use(18<<3) 
     30    const LOG_LOCAL2 = 144; 
     31    // reserved for local use(19<<3) 
     32    const LOG_LOCAL3 = 152; 
     33    // reserved for local use(20<<3) 
     34    const LOG_LOCAL4 = 160; 
     35    // reserved for local use(21<<3) 
     36    const LOG_LOCAL5 = 168; 
     37    // reserved for local use(22<<3) 
     38    const LOG_LOCAL6 = 176; 
     39    // reserved for local use(23<<3) 
     40    const LOG_LOCAL7 = 184; 
     41     
     42    // mask to extract facility 
     43    const LOG_FACMASK = 0x03F8; 
     44} 
     45 
     46interface SyslogPriority { 
     47    // system is unusable 
     48    const LOG_EMERG = 0; 
     49    // action must be taken immediately 
     50    const LOG_ALERT = 1; 
     51    // critical conditions 
     52    const LOG_CRIT = 2; 
     53    // error conditions 
     54    const LOG_ERR = 3; 
     55    // warning conditions 
     56    const LOG_WARNING = 4; 
     57    // normal but significant condition 
     58    const LOG_NOTICE = 5; 
     59    // informational 
     60    const LOG_INFO = 6; 
     61    // debug-level messages 
     62    const LOG_DEBUG = 7; 
     63    // mask to extract priority 
     64    const LOG_PRIMASK = 0x0007; 
     65} 
    266 
    367class SyslogAppender implements Appender { 
    468 
    5     const SYSLOG_PORT = 514; 
     69    private $ident; 
     70    private $opt; 
     71    private $facility; 
    672 
    7     private $host = 'localhost'; 
    8     private $layout; 
    9     public function __construct($host, LogLayout $layout = null){ 
    10         if($layout === null){ 
    11             $this->layout = new SimpleLayout; 
    12         } else { 
    13             $this->layout = $layout; 
    14         } 
     73    private $ip = '127.0.0.1'; 
     74    private $port = 514; 
     75 
     76    public function __construct($ident, $opt, $facility){ 
     77        $this->ident = $ident; 
     78        $this->opt = $opt; 
     79        $this->facility = $facility; 
     80    } 
     81 
     82    public function setIp($ip){ 
     83        $this->ip = $ip; 
     84    } 
     85 
     86    public function setPort($port){ 
     87        $this->port = $port; 
    1588    } 
    1689 
    1790    public function append(LoggingEvent $event){ 
    18         echo $this->layout->format($event); 
     91        $level = $event->getLevel(); 
     92        $priority = SyslogPriority::LOG_PRIMASK; 
     93        switch($level->toInt()){ 
     94        case LogLevel::ALL_INT: 
     95            $priority = SyslogPriority::LOG_EMERG; 
     96            break; 
     97        case LogLevel::DEBUG_INT: 
     98            $priority = SyslogPriority::LOG_DEBUG; 
     99            break; 
     100        case LogLevel::INFO_INT: 
     101            $priority = SyslogPriority::LOG_DEBUG; 
     102            break; 
     103        case LogLevel::WARN_INT: 
     104            $priority = SyslogPriority::LOG_WARNING; 
     105            break; 
     106        case LogLevel::ERROR_INT: 
     107            $priority = SyslogPriority::LOG_ERR; 
     108            break; 
     109        case LogLevel::FATAL_INT: 
     110            $priority = SyslogPriority::LOG_CRIT; 
     111            break; 
     112        case LogLevel::OFF_INT: 
     113        default: 
     114            return; 
     115        } 
     116        $this->write($event->getMessage(), $priority); 
    19117    } 
     118 
     119    public function write($message, $priority){ 
     120        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
     121        socket_set_nonblock($socket); 
     122        if(socket_connect($socket, $this->ip, $this->port)){ 
     123            $data = ''; 
     124            $data .= '<' . self::makePriority($this->facility, $priority) . '>'; 
     125            $data .=  $this->ident . ': ' . $message; 
     126            socket_write($socket, $data, strlen($data)); 
     127        } 
     128        socket_close($socket); 
     129    } 
     130 
     131    private static function makePriority($facility, $priority){ 
     132        return ($facility & SyslogFacility::LOG_FACMASK) | $priority; 
     133    } 
     134 
    20135} 
  • lang/php/misc/Logging/sample.php

    r18405 r18406  
    1515 
    1616$logger->debug('%s %s', 'hello', 'world'); 
     17 
     18$syslogAppender = new SyslogAppender('logsample', 0, SyslogFacility::LOG_USER); 
     19$logger->addAppender($syslogAppender); 
     20$logger->info('%s %d', 'hoge', 777);