SOHOゆいちのサイト
Zend FrameworkのZend_Logのwriterでいくつかほしいものがあり作って実装してみました。
今回はSyslogへ出力するwriterを作成してみます。
Zend Frameworkでログ出力を作成するにはwriterと必要に応じてformatterを用意してあげればOKです。
実際の実装はBsheの以下のクラスを参考にしてください。(ダウンロードはこちら)
以下のようなクラスを用意しました。
class Bshe_Log_Writer_Syslog extends Zend_Log_Writer_Abstract
{
/**
* ログ接続処理用設定値
*
* @var unknown_type
*/
protected $arrayOptions = array();
/**
* syslog facility
*
* @var unknown_type
*/
protected $facility = null;
/**
* syslog option
*
* @var unknown_type
*/
protected $option = 0;
/**
* syslog ident
*
* @var unknown_type
*/
protected $ident = ‘Bshe_Log_Writer_Syslog’;/**
* Class Constructor
*
* openlogの引数や、facilityの設定などを行う。
*
* @param string $ident syslog関数のident(未設定時は’Bshe_Log_Writer_Stream’)
* @param int $option syslog関数のoption
* @param int $facility sylog関数のfacility(未設定時はLOG_USER)
*/
public function __construct($ident = ‘Bshe_Log_Writer_Syslog’, $option = 0, $facility = null)
{
// syslog初期化
define_syslog_variables();
// $facilityNULL時に初期値を設定
if( $facility === null) {
$this->facility = LOG_USER;
} else {
$this->facility = $facility;
}
$this->option = $option;
$this->ident = $ident;
// openlog
if (!openlog($ident, $option, $facility)) {
// ログエラー
throw new Zend_Log_Exception("syslogを開けません");
}// syslogへ_writeする専用のformatterを用意
$this->_formatter = new Bshe_Log_Formatter_Syslog();
}/**
* Write a message to the log.
*
* @param array $event event data
* @return void
*/
protected function _write($event)
{
define_syslog_variables();
$line = $this->_formatter->format($event);if (!openlog($this->ident, $this->option, $this->facility)) {
// ログエラー
throw new Zend_Log_Exception("syslogを開けません");
}
if (false === syslog($event['priority'] , $line)) {
throw new Zend_Log_Exception("syslogへ書き込みできません: ");
}
closelog();
}
}
コンストラクタでSyslogでログ出力するための各種情報をセットし、_writeメソッドでopenlogしてログを出力します。
デフォルトのテキストログなどのフォーマッタでは、ログの本文に時間などが含まれてしまうため、Syslog用に本文のみのフォーマッタを用意しました。
class Bshe_Log_Formatter_Syslog extends Zend_Log_Formatter_Simple
{
const DEFAULT_FORMAT = ‘%message%’;
}
単純ですが、これで、基本のフォーマットがメッセージのみになります。
これを以下のように、利用するとSyslogへログ出力が行われます。
$logger = new Bshe_Log();
$writer = new Bshe_Log_Writer_Syslog( ‘BsheTest’);
$logger->addWriter($writer);
後はこのログクラスを利用して、ログ出力をするだけです。
ログクラスをスタティックで利用する場合は、Bshe_Logを参考にしてください。
www.bshe.org (created by itassist.info)