2017-02-06 10 views
0

標準的な方法としてログファイルにログを書き込むようにスリムに設定しました。しかし、これは、特定の時間に大きなログとすべてのログを検索する場合には有効ではありません。ですから、これらのログを別のsqlite DBに書きたいと思います。 私の質問は(Zend frameworkで行われたように)メッセージを書き込むようにログライターを設定する方法です。sqliteを使用したスリムログライター

P S:PDOオブジェクトを作成してクエリを使用できることはわかっています。しかし、私は既存のコードを変更したくありません。作家を設定し、フレームワークを私に任せることを好むだけです。私は次のようにこれを行うために管理

+0

ロギングがどの程度正確に実装されているかを詳しく説明できますか?それに応じて、コミュニティは解決策を提案することができます。 –

答えて

0

sqliteの接続

$sqlite = new PDO('sqlite:./logs/log.db'); 

自分LogWritterを作成フレームワークに似

<?php 

/** 
* Description of LogWritter 
* 
* @author Ruwantha.Lankathilaka 
*/ 

class LogWritter { 

    protected $sqliteConnection; 

    public function __construct($connection) { 
     $this->sqliteConnection = $connection; 
    } 

    /** 
    * Write function will bypass the slim default LogWriter and will return 
    * last inserted log id which could be used as a reference 
    * 
    * @param type $object will get the error message 
    * @param type $level will get the error levels of \Slim\Log 
    * @return mix if successfully logged will return the last insert id, else 
    * will return false 
    */ 
    public function write($object,$level) { 

     //Determine label 
     $label = 'DEBUG'; 
     $message = (string) $object; 
     switch ($level) { 
      case \Slim\Log::FATAL: 
       $label = 'FATAL'; 
       break; 
      case \Slim\Log::ERROR: 
       $label = 'ERROR'; 
       break; 
      case \Slim\Log::WARN: 
       $label = 'WARN'; 
       break; 
      case \Slim\Log::INFO: 
       $label = 'INFO'; 
       break; 
     } 

     $sqliteQuery = "INSERT INTO logs (lable,message) VALUES (:lable,:message)"; 
     $statement = $this->sqliteConnection->prepare($sqliteQuery); 
     $result = $statement->execute(array(':lable'=>$label,':message'=>$message)); 

     if(!empty($result)){ 
      return $this->sqliteConnection->lastInsertId(); 
     }else{ 
      return false; 
     } 
    } 
} 

を作成したインデックス

にLogWritterを追加

LogWritterをSlimアプリケーションに追加

$app = new \Slim\Slim(array(
    'log.writer' => $logWriter, 
    'log.enabled' => true, 
    'log.level' => \Slim\Log::DEBUG, 
    'debug' => true 
)); 

ログが、これは将来的に誰かを助ける

希望を失敗した場合、今あなたがアプリからログを取得することができます

$retult = $app->log->error('test error'); 

$結果は、挿入されたログIDがfalseになります。

関連する問題