diff --git a/library/log4php/appenders/LoggerAppenderPDO.php b/library/log4php/appenders/LoggerAppenderPDO.php deleted file mode 100644 --- a/library/log4php/appenders/LoggerAppenderPDO.php +++ /dev/null @@ -1,282 +0,0 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * LoggerAppenderPDO appender logs to a database using the PHP's PDO extension. - * - * ## Configurable parameters: ## - * - * - dsn - The Data Source Name (DSN) used to connect to the database. - * - user - Username used to connect to the database. - * - password - Password used to connect to the database. - * - table - Name of the table to which log entries are be inserted. - * - insertSQL - Sets the insert statement for a logging event. Defaults - * to the correct one - change only if you are sure what you are doing. - * - insertPattern - The conversion pattern to use in conjuction with insert - * SQL. Must contain the same number of comma separated - * conversion patterns as there are question marks in the - * insertSQL. - * - * @version $Revision: 1374546 $ - * @package log4php - * @subpackage appenders - * @since 2.0 - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - * @link http://logging.apache.org/log4php/docs/appenders/pdo.html Appender documentation - */ -class LoggerAppenderPDO extends LoggerAppender { - - // ****************************************** - // *** Configurable parameters *** - // ****************************************** - - /** - * DSN string used to connect to the database. - * @see http://www.php.net/manual/en/pdo.construct.php - */ - protected $dsn; - - /** Database user name. */ - protected $user; - - /** Database password. */ - protected $password; - - /** - * The insert query. - * - * The __TABLE__ placeholder will be replaced by the table name from - * {@link $table}. - * - * The questionmarks are part of the prepared statement, and they must - * match the number of conversion specifiers in {@link insertPattern}. - */ - protected $insertSQL = "INSERT INTO __TABLE__ (timestamp, logger, level, message, thread, file, line) VALUES (?, ?, ?, ?, ?, ?, ?)"; - - /** - * A comma separated list of {@link LoggerPatternLayout} format strings - * which replace the "?" in {@link $insertSQL}. - * - * Must contain the same number of comma separated conversion patterns as - * there are question marks in {@link insertSQL}. - * - * @see LoggerPatternLayout For conversion patterns. - */ - protected $insertPattern = "%date{Y-m-d H:i:s},%logger,%level,%message,%pid,%file,%line"; - - /** Name of the table to which to append log events. */ - protected $table = 'log4php_log'; - - /** The number of recconect attempts to make on failed append. */ - protected $reconnectAttempts = 3; - - - // ****************************************** - // *** Private memebers *** - // ****************************************** - - /** - * The PDO instance. - * @var PDO - */ - protected $db; - - /** - * Prepared statement for the insert query. - * @var PDOStatement - */ - protected $preparedInsert; - - /** This appender does not require a layout. */ - protected $requiresLayout = false; - - - // ****************************************** - // *** Appender methods *** - // ****************************************** - - /** - * Acquires a database connection based on parameters. - * Parses the insert pattern to create a chain of converters which will be - * used in forming query parameters from logging events. - */ - public function activateOptions() { - try { - $this->establishConnection(); - } catch (PDOException $e) { - $this->warn("Failed connecting to database. Closing appender. Error: " . $e->getMessage()); - $this->close(); - return; - } - - // Parse the insert patterns; pattern parts are comma delimited - $pieces = explode(',', $this->insertPattern); - $converterMap = LoggerLayoutPattern::getDefaultConverterMap(); - foreach ($pieces as $pattern) { - $parser = new LoggerPatternParser($pattern, $converterMap); - $this->converters[] = $parser->parse(); - } - - $this->closed = false; - } - - /** - * Connects to the database, and prepares the insert query. - * @throws PDOException If connect or prepare fails. - */ - protected function establishConnection() { - // Acquire database connection - $this->db = new PDO($this->dsn, $this->user, $this->password); - $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - - // Prepare the insert statement - $insertSQL = str_replace('__TABLE__', $this->table, $this->insertSQL); - $this->preparedInsert = $this->db->prepare($insertSQL); - } - - /** - * Appends a new event to the database. - * - * If writing to database fails, it will retry by re-establishing the - * connection up to $reconnectAttempts times. If writing still fails, - * the appender will close. - */ - public function append(LoggerLoggingEvent $event) { - - for ($attempt = 1; $attempt <= $this->reconnectAttempts + 1; $attempt++) { - try { - // Attempt to write to database - $this->preparedInsert->execute($this->format($event)); - $this->preparedInsert->closeCursor(); - break; - } catch (PDOException $e) { - $this->warn("Failed writing to database: " . $e->getMessage()); - - // Close the appender if it's the last attempt - if ($attempt > $this->reconnectAttempts) { - $this->warn("Failed writing to database after {$this->reconnectAttempts} reconnect attempts. Closing appender."); - $this->close(); - // Otherwise reconnect and try to write again - } else { - $this->warn("Attempting a reconnect (attempt $attempt of {$this->reconnectAttempts})."); - $this->establishConnection(); - } - } - } - } - - /** - * Converts the logging event to a series of database parameters by using - * the converter chain which was set up on activation. - */ - protected function format(LoggerLoggingEvent $event) { - $params = array(); - foreach ($this->converters as $converter) { - $buffer = ''; - while ($converter !== null) { - $converter->format($buffer, $event); - $converter = $converter->next; - } - $params[] = $buffer; - } - return $params; - } - - /** - * Closes the connection to the logging database - */ - public function close() { - // Close the connection (if any) - $this->db = null; - - // Close the appender - $this->closed = true; - } - - // ****************************************** - // *** Accessor methods *** - // ****************************************** - - /** - * Returns the active database handle or null if not established. - * @return PDO - */ - public function getDatabaseHandle() { - return $this->db; - } - - /** Sets the username. */ - public function setUser($user) { - $this->setString('user', $user); - } - - /** Returns the username. */ - public function getUser($user) { - return $this->user; - } - - /** Sets the password. */ - public function setPassword($password) { - $this->setString('password', $password); - } - - /** Returns the password. */ - public function getPassword($password) { - return $this->password; - } - - /** Sets the insert SQL. */ - public function setInsertSQL($sql) { - $this->setString('insertSQL', $sql); - } - - /** Returns the insert SQL. */ - public function getInsertSQL($sql) { - return $this->insertSQL; - } - - /** Sets the insert pattern. */ - public function setInsertPattern($pattern) { - $this->setString('insertPattern', $pattern); - } - - /** Returns the insert pattern. */ - public function getInsertPattern($pattern) { - return $this->insertPattern; - } - - /** Sets the table name. */ - public function setTable($table) { - $this->setString('table', $table); - } - - /** Returns the table name. */ - public function getTable($table) { - return $this->table; - } - - /** Sets the DSN string. */ - public function setDSN($dsn) { - $this->setString('dsn', $dsn); - } - - /** Returns the DSN string. */ - public function getDSN($dsn) { - return $this->setString('dsn', $dsn); - } -}