diff --git a/thirdparty/apache-log4php/CHANGELOG b/thirdparty/apache-log4php/CHANGELOG new file mode 100644 index 0000000..2311a62 --- /dev/null +++ b/thirdparty/apache-log4php/CHANGELOG @@ -0,0 +1,111 @@ +log4php Change Log +================== + +Version 2.0 to be released +-------------------------- +- Bug #1: removed all @author tags. All contributors are named (with task) in the changelog file (Christian Grobmeier) +- Bug #4: Fatal error for constructor in LoggerAppenderRollingFile (Michael Aichler) +- Bug #5: LoggerAppenderRollingFile unable to open file and append logs (Michael Aichler) +- Bug #7: Change copyright notices to conform to the Source Header and Copyright Notice Policy (Curt Arnold) +- Bug #9: log4php.dtd should be reviewed (Christian Grobmeier) +- Bug #11: trailing "\n" (Hiroaki Kawai) +- Bug #12: LoggerAppenderFile does not create missing directories (Knut Urdalen) +- Bug #13: LoggerPropertyConfigurator: Only variables should be assigned by reference (Michael Aichler) +- Bug #14: LoggerPropertySetter: warnings about is_a() and non-static method (Michael Aichler) +- Bug #15: Logger: warnings about is_a() (Michael Aichler) +- Bug #16: Patch for LoggerAppenderSyslog to use Layouts (Gary Richardson) +- Bug #17: %l Pattern layout raises a protected property access error (Yomei Komiya) +- Bug #18: Date pattern %d conversion is invalid (Yomei Komiya) +- Bug #19: Logger location info is invalid in log outputs of Logger's subclasses (Yomei Komiya) +- Bug #20: Custom layout for LoggerAppenderPhp (Corin Lawson) +- Bug #22: log4php.dtd invalid (Christian Grobmeier) +- Bug #24: LoggerAppenderRollingFile unable to rollover (Dennis Korbar) +- Bug #25: Allow to set environment variables in LoggerOptionConverter (Christian Hammers, Knut Urdalen) +- Bug #28: LoggerAppenderConsole doesn't write to STDERR (Michael Kuenzli, Knut Urdalen) +- Bug #33: Appenders is not properly closed upon destruction (Knut Urdalen) +- Enh #29: Load classes through autoload instead of explicitly include them (Knut Urdalen) +- Enh #30: Implement LoggerAppenderPDO (Christian Grobmeier) +- Enh #31: Removing unnecessary use of LOG4PHP_DIR (Knut Urdalen) +- Enh #34: Remove all internal debugging (Christian Grobmeier) +- Enh #35: Replace LOG4PHP_LINE_SEP with PHP_EOL (Knut Urdalen) +- Enh #37: removed LoggerAppenderDB in favour to LoggerAppenderPDO (Christian Grobmeier) +- Enh #38: Replace is_a() with instanceof (Knut Urdalen) +- Enh #39: Remove deprecated methods (Knut Urdalen) +- Enh #40: Merge LoggerAppender and LoggerAppenderSkeleton (Christian Grobmeier) +- Enh #44: PEAR package (Knut Urdalen) +- Enh: Initial port to PHP 5 (Knut Urdalen) +- Enh: Established new unit test suite (Knut Urdalen) +- Enh: Added a range of examples (Knut Urdalen) +- Enh: Created common ReflectionUtils class and moved factory calls to there (Christian Grobmeier) + +Version 0.9 December 10th, 2003 +------------------------------- +- Enh: Added LoggerDOMConfigurator APPENDER-REF element as an APPENDER_REF alias (Marco Vassura) +- Enh: Various changes to obtain PHP5 compatibility (not fully tested) (Marco Vassura) + +Version 0.8 October 28th, 2003 +------------------------------ +- Bug: Fixed LoggerDOMConfigurator CONFIGURATOR element's namespace handling (Sergio Strampelli) +- Bug: Fixed AppenderSkeleton::setThreshold() threshold assignment (Sergio Strampelli) +- Bug: Fixed LoggerAppenderMail::close() mail() 'to' param (Marco Vassura) +- Bug: Fixed remoteHostname and port params getter/setter in LoggerAppenderSocket (Marco Vassura) + +Version 0.7 September 24th, 2003 +-------------------------------- +- Enh: Added "log4jNamespace" option to LoggerAppenderSocket (Marco Vassura) +- Bug: Fixed LoggerXmlLayout CDATA rendering (Marco Vassura) +- Enh: Added new tests (Marco Vassura) + +Version 0.6 September 15th, 2003 +-------------------------------- +- Enh: Fixed bugs and malfunctions (Marco Vassura) +- Enh: Now LoggerDatePatternConverter supports microseconds (Marco Vassura) +- Enh: Now Appenders report errors via LoggerLog::debug() (Marco Vassura) +- New: Added LoggerLevelMatchFilter and LoggerLevelRangeFilter (Marco Vassura) +- New: Added experimental hierarchy serialization support (Marco Vassura) + +Version 0.5 September 10th, 2003 +-------------------------------- +- New: Included LGPL License (Marco Vassura) +- New: Added Basic and Property Configurators (Marco Vassura) +- Enh: Rechanged init configuration system (now a log4j clone) (Marco Vassura) +- Enh: Recoded LoggerLevel class (Marco Vassura) +- Enh: Added Logger factory support (Marco Vassura) +- Enh: Fixed some bugs (Marco Vassura) + +Version 0.4 September 2nd, 2003 +------------------------------- +- Enh: Fixed a lot of bugs (Marco Vassura) +- Enh: Changed configuration system (used log4j paradigma) (Marco Vassura) +- Enh: Recoded test subdir. Now it's easy to test new classes (Marco Vassura) +- Enh: Classes are more and better documented (Marco Vassura) +- Enh: A new build system with apache ant (Marco Vassura) + +Version 0.3 August 27th, 2003 +----------------------------- +- New: Integrated thresholds on appenders (Sergio Strampelli) +- New: Added LoggerAppenderDailyFile (Abel Gonzalez) +- New: Added LoggerAppenderMailEvent (Domenico Lordi) +- New: Added LoggerAppenderDb (Marco Vassura) +- New: Added LoggerAppenderEcho (Marco Vassura) +- New: Added LoggerAppenderMail (Marco Vassura) +- New: Added LoggerAppenderNull (Marco Vassura) +- New: Added LoggerPatternLayout (Marco Vassura) +- New: Added LoggerXmlLayout (Marco Vassura) +- New: Object Renderer Implementation (Marco Vassura) +- New: NDC and MDC (with extended functionalities) support (Marco Vassura) +- Enh: Filters support with LoggerDenyAllFilter, LoggerStringMatchFilter (Marco Vassura) +- Enh: Back trace of caller location (file,line,method) (only with PHP >= 4.3.0) (Marco Vassura) + +Version 0.2 February 20th, 2003 +------------------------------- +- New: Added LoggerAppenderConsole (Marco Vassura) +- New: Added LoggerAppenderFile (Marco Vassura) +- New: Added LoggerAppenderPhp (Marco Vassura) +- New: Added LoggerAppenderRollingFile (Marco Vassura) +- New: Added LoggerAppenderSocket (Marco Vassura) +- New: Added LoggerAppenderSyslog (Marco Vassura) +- New: Added LoggerLayoutHtml (Marco Vassura) +- New: Added LoggerLayoutSimple (Marco Vassura) +- New: Added LoggerLayoutTTCC (Marco Vassura) +- New: XML configuration file support (Marco Vassura) diff --git a/thirdparty/apache-log4php/build.xml b/thirdparty/apache-log4php/build.xml index 4d44299..1fe8d8c 100644 --- a/thirdparty/apache-log4php/build.xml +++ b/thirdparty/apache-log4php/build.xml @@ -21,8 +21,6 @@ - - @@ -32,6 +30,7 @@ + @@ -40,6 +39,7 @@ + @@ -60,10 +60,8 @@ See http://www.phpunit.de --> - - - - + + @@ -127,6 +125,7 @@ + @@ -142,5 +141,31 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/apache-log4php/package-config.php b/thirdparty/apache-log4php/package-config.php new file mode 100644 index 0000000..693bb66 --- /dev/null +++ b/thirdparty/apache-log4php/package-config.php @@ -0,0 +1,82 @@ + 'Apache License 2.0', + //'filelistgenerator' => 'svn', + 'ignore' => array('package.php', 'package-config.php'), + 'simpleoutput' => true, + 'baseinstalldir' => '/', + 'packagedirectory' => '.', + 'dir_roles' => array( + 'examples' => 'doc', + ), + 'exceptions' => array( + 'CHANGELOG' => 'doc', + 'LICENSE' => 'doc', + 'README' => 'doc', + ), +); + +$license = array( + 'name' => 'Apache License 2.0', + 'url' => 'http://www.apache.org/licenses/LICENSE-2.0' +); + +$maintainer = array(); +$maintainer[] = array( + 'role' => 'lead', + 'handle' => 'kurdalen', + 'name' => 'Knut Urdalen', + 'email' => 'kurdalen@apache.org', + 'active' => 'yes' +); +$maintainer[] = array( + 'role' => 'lead', + 'handle' => 'grobmeier', + 'name' => 'Christian Grobmeier', + 'email' => 'grobmeier@gmail.com', + 'active' => 'yes' +); + +$dependency = array(); + +$channel = 'pear.php.net'; +$require = array( + 'php' => '5.2.0', + 'pear_installer' => '1.8.0', +); diff --git a/thirdparty/apache-log4php/package.php b/thirdparty/apache-log4php/package.php new file mode 100644 index 0000000..1ce1b28 --- /dev/null +++ b/thirdparty/apache-log4php/package.php @@ -0,0 +1,71 @@ +setOptions($options); +if(PEAR::isError($result)) { + echo $result->getMessage(); + die( __LINE__ . "\n" ); +} + +$package->setPackage($name); +$package->setSummary($summary); +$package->setDescription($description); + +$package->setChannel($channel); +$package->setAPIVersion($apiVersion); +$package->setReleaseVersion($version); +$package->setReleaseStability($state); +$package->setAPIStability($apiStability); +$package->setNotes($notes); +$package->setPackageType('php'); // this is a PEAR-style php script package +$package->setLicense($license['name'], $license['url']); + +foreach($maintainer as $m) { + $package->addMaintainer($m['role'], $m['handle'], $m['name'], $m['email'], $m['active']); +} + +foreach($dependency as $d) { + $package->addPackageDepWithChannel($d['type'], $d['package'], $d['channel'], $d['version']); +} + +$package->setPhpDep( $require['php'] ); +$package->setPearinstallerDep($require['pear_installer']); + +$package->generateContents(); + +$package->debugPackageFile(); + +$result = $package->writePackageFile(); +if(PEAR::isError($result)) { + echo $result->getMessage(); + die(); +} +exit(0); diff --git a/thirdparty/apache-log4php/pom.xml b/thirdparty/apache-log4php/pom.xml index 994bb6b..a5681b4 100644 --- a/thirdparty/apache-log4php/pom.xml +++ b/thirdparty/apache-log4php/pom.xml @@ -1,234 +1,241 @@ - + + 4.0.0 + log4j + apache-log4php + jar + 2.0-SNAPSHOT + Apache log4php. + Logging framework for PHP. + http://incubator.apache.org:80/log4php + + JIRA + http://issues.apache.org/jira/ + + + + log4php-user + log4php-user-subscribe@logging.apache.org + log4php-user-unsubscribe@logging.apache.org + log4php-user@logging.apache.org + http://mail-archives.apache.org/mod_mbox/logging-log4php-user/ + + http://markmail.org/search/list:org.apache.logging.log4php-user + + + + log4php-dev + log4php-dev-subscribe@logging.apache.org + log4php-dev-unsubscribe@logging.apache.org + log4php-dev@logging.apache.org + http://mail-archives.apache.org/mod_mbox/logging-log4php-dev/ + + http://markmail.org/search/list:org.apache.logging.log4php-dev + + + + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + scm:svn:http://svn.apache.org/repos/asf/incubator/log4php + scm:svn:https://svn.apache.org/repos/asf/incubator/log4php + http://svn.apache.org/viewcvs.cgi/incubator/log4php + + + Apache Software Foundation + http://www.apache.org + + + + + maven-surefire-plugin + + target + + + + maven-antrun-plugin + + + compile + compile + + + + + + + run + + + + test-compile + test-compile + + + + + + + run + + + + test + test + + + + + + + run + + + + site + site + + + + + + + + ---> - - 4.0.0 - log4j - apache-log4php - jar - 2.0-SNAPSHOT - Apache log4php. - Logging framework for PHP. - http://incubator.apache.org:80/log4php - - JIRA - http://issues.apache.org/jira/ - - - - log4php-user - log4php-user-subscribe@logging.apache.org - log4php-user-unsubscribe@logging.apache.org - log4php-user@logging.apache.org - http://mail-archives.apache.org/mod_mbox/logging-log4php-user/ - - http://markmail.org/search/list:org.apache.logging.log4php-user - - - - log4php-dev - log4php-dev-subscribe@logging.apache.org - log4php-dev-unsubscribe@logging.apache.org - log4php-dev@logging.apache.org - http://mail-archives.apache.org/mod_mbox/logging-log4php-dev/ - - http://markmail.org/search/list:org.apache.logging.log4php-dev - - - - - - Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - scm:svn:http://svn.apache.org/repos/asf/incubator/log4php - scm:svn:https://svn.apache.org/repos/asf/incubator/log4php - http://svn.apache.org/viewcvs.cgi/incubator/log4php - - - Apache Software Foundation - http://www.apache.org - - - - - maven-surefire-plugin - - target + + + + run + + + + post-site + post-site + + + + + + + run + + + + site-deploy + site-deploy + + + + + + + run + + + + + + ant + ant-nodeps + 1.6.5 + + + ant-contrib + ant-contrib + 1.0b2 + + + + + maven-assembly-plugin + + + src/assembly/bin.xml + + false + + + + + assembly + + + + + + org.codehaus.mojo + rat-maven-plugin + + + + + + + true + + + maven-project-info-reports-plugin + + + + scm + dependencies + issue-tracking + mailing-list + license + + + + + + maven-release-plugin + + site-deploy + + + + maven-changes-plugin + + + + changes-report + + + + + %URL%/browse/%ISSUE% - maven-antrun-plugin - - - compile - compile - - - - - - - run - - - - test-compile - test-compile - - - - - - - run - - - - test - test - - - - - - - run - - - - site - site - - - - - - - - - - - - - run - - - - post-site - post-site - - - - - - - run - - - - site-deploy - site-deploy - - - - - - - run - - - - - - ant - ant-nodeps - 1.6.5 - - - ant-contrib - ant-contrib - 1.0b2 - - - - - maven-assembly-plugin - - - src/assembly/bin.xml - - false - - - - - assembly - - - - - - org.codehaus.mojo - rat-maven-plugin - - - - - - - true - - - maven-project-info-reports-plugin - - - - scm - dependencies - issue-tracking - mailing-list - license - - - + org.apache.rat + apache-rat-plugin - - maven-release-plugin - - site-deploy - - - - maven-changes-plugin - - - - changes-report - - - - - %URL%/browse/%ISSUE% - - diff --git a/thirdparty/apache-log4php/src/examples/php/cache.php b/thirdparty/apache-log4php/src/examples/php/cache.php new file mode 100644 index 0000000..4229cc7 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/cache.php @@ -0,0 +1,38 @@ +getRootLogger(); + +$logger->debug('Debug message from cached logger'); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/client.php b/thirdparty/apache-log4php/src/examples/php/client.php new file mode 100644 index 0000000..c0adc08 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/client.php @@ -0,0 +1,24 @@ +info("Hello World!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/console.php b/thirdparty/apache-log4php/src/examples/php/console.php new file mode 100644 index 0000000..c10be83 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/console.php @@ -0,0 +1,24 @@ +debug("Hello World!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/dailyfile.php b/thirdparty/apache-log4php/src/examples/php/dailyfile.php new file mode 100644 index 0000000..4d9f610 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/dailyfile.php @@ -0,0 +1,24 @@ +debug("Hello World!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/echo.php b/thirdparty/apache-log4php/src/examples/php/echo.php new file mode 100644 index 0000000..85e03ce --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/echo.php @@ -0,0 +1,24 @@ +debug("Hello World!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/file.php b/thirdparty/apache-log4php/src/examples/php/file.php new file mode 100644 index 0000000..7ebc20e --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/file.php @@ -0,0 +1,24 @@ +debug("Hello World!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/levelmatchfilter.php b/thirdparty/apache-log4php/src/examples/php/levelmatchfilter.php new file mode 100644 index 0000000..d003067 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/levelmatchfilter.php @@ -0,0 +1,25 @@ +debug("Matching and will be rejected"); +$logger->info("Not matching and will be accepted"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/levelrangefilter.php b/thirdparty/apache-log4php/src/examples/php/levelrangefilter.php new file mode 100644 index 0000000..4c31f57 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/levelrangefilter.php @@ -0,0 +1,28 @@ +debug("This is a debug message"); +$logger->info("This is an info message"); +$logger->warn("This is a warning"); +$logger->error("This is an error"); +$logger->fatal("This is a fatal error"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/mail.php b/thirdparty/apache-log4php/src/examples/php/mail.php new file mode 100644 index 0000000..157560b --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/mail.php @@ -0,0 +1,24 @@ +fatal("Some critical message!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/mdc.php b/thirdparty/apache-log4php/src/examples/php/mdc.php new file mode 100644 index 0000000..d29d0e8 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/mdc.php @@ -0,0 +1,27 @@ +debug("Testing MDC"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/ndc.php b/thirdparty/apache-log4php/src/examples/php/ndc.php new file mode 100644 index 0000000..153c72f --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/ndc.php @@ -0,0 +1,31 @@ +debug("Testing NDC"); + +LoggerNDC::pop(); + +?> diff --git a/thirdparty/apache-log4php/src/examples/php/php.php b/thirdparty/apache-log4php/src/examples/php/php.php new file mode 100644 index 0000000..a5608fe --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/php.php @@ -0,0 +1,24 @@ +debug("Hello PHP!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/server.php b/thirdparty/apache-log4php/src/examples/php/server.php new file mode 100644 index 0000000..9019943 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/server.php @@ -0,0 +1,71 @@ +hierarchy = LoggerManager::getLoggerRepository(); + } + + function onReceiveData($clientId = 0, $data = "") { + $events = $this->getEvents($data); + foreach($events as $event) { + $root = $this->hierarchy->getRootLogger(); + if($event->getLoggerName() === 'root') { + $root->callAppenders($event); + } else { + $loggers = $this->hierarchy->getCurrentLoggers(); + foreach($loggers as $logger) { + $root->callAppenders($event); + $appenders = $logger->getAllAppenders(); + foreach($appenders as $appender) { + $appender->doAppend($event); + } + } + } + } + } + + function getEvents($data) { + preg_match('/^(O:\d+)/', $data, $parts); + $events = split($parts[1], $data); + array_shift($events); + $size = count($events); + for($i=0; $i<$size; $i++) { + $events[$i] = unserialize($parts[1].$events[$i]); + } + return $events; + } +} + +$host = '127.0.0.1'; +$port = 9090; +//$server =& Net_Server::create('fork', $host, $port); +$server =& Net_Server::create('sequential', $host, $port); +$handler =& new Net_Server_Handler_Log(); +$server->setCallbackObject($handler); +$server->start(); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/simple.php b/thirdparty/apache-log4php/src/examples/php/simple.php new file mode 100644 index 0000000..641b1fd --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/simple.php @@ -0,0 +1,44 @@ +_logger = LoggerManager::getLogger('Log4phpTest'); + $this->_logger->debug('Hello!'); + } + +} + +function Log4phpTestFunction() { + $logger = LoggerManager::getLogger('Log4phpTestFunction'); + $logger->debug('Hello again!'); +} + +$test = new Log4phpTest(); +Log4phpTestFunction(); + +// Safely close all appenders with... +LoggerManager::shutdown(); + +?> diff --git a/thirdparty/apache-log4php/src/examples/php/stringmatchfilter.php b/thirdparty/apache-log4php/src/examples/php/stringmatchfilter.php new file mode 100644 index 0000000..d0fdf47 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/stringmatchfilter.php @@ -0,0 +1,25 @@ +debug("Some text to match that will be rejected"); +$logger->info("Some other text that will be accepted"); +?> diff --git a/thirdparty/apache-log4php/src/examples/php/syslog.php b/thirdparty/apache-log4php/src/examples/php/syslog.php new file mode 100644 index 0000000..227536e --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/php/syslog.php @@ -0,0 +1,24 @@ +fatal("Hello World!"); +?> diff --git a/thirdparty/apache-log4php/src/examples/resources/cache.properties b/thirdparty/apache-log4php/src/examples/resources/cache.properties new file mode 100644 index 0000000..e065866 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/cache.properties @@ -0,0 +1,20 @@ +; cache.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderEcho +log4php.appender.default.layout = LoggerLayoutSimple +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/examples/resources/client.properties b/thirdparty/apache-log4php/src/examples/resources/client.properties new file mode 100644 index 0000000..a453e4a --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/client.properties @@ -0,0 +1,22 @@ +; client.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderSocket +log4php.appender.default.remoteHost = tcp://127.0.0.1 +log4php.appender.default.port = 9090 +log4php.appender.default.useXml = false +log4php.rootLogger = INFO, default diff --git a/thirdparty/apache-log4php/src/examples/resources/console.properties b/thirdparty/apache-log4php/src/examples/resources/console.properties new file mode 100644 index 0000000..ce9722b --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/console.properties @@ -0,0 +1,21 @@ +; console.properties +; +; 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. +; +log4php.appender.console = LoggerAppenderConsole +log4php.appender.console.target = "STDOUT" +log4php.appender.console.layout = LoggerLayoutSimple +log4php.rootLogger = DEBUG, console diff --git a/thirdparty/apache-log4php/src/examples/resources/dailyfile.properties b/thirdparty/apache-log4php/src/examples/resources/dailyfile.properties new file mode 100644 index 0000000..2f390bd --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/dailyfile.properties @@ -0,0 +1,22 @@ +; dailyfile.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderDailyFile +log4php.appender.default.layout = LoggerLayoutTTCC +log4php.appender.default.datePattern = Ymd +log4php.appender.default.file = ../../../target/examples/daily_%s.log +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/examples/resources/echo.properties b/thirdparty/apache-log4php/src/examples/resources/echo.properties new file mode 100644 index 0000000..30711c1 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/echo.properties @@ -0,0 +1,20 @@ +; echo.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderEcho +log4php.appender.default.layout = LoggerLayoutSimple +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/examples/resources/file.properties b/thirdparty/apache-log4php/src/examples/resources/file.properties new file mode 100644 index 0000000..48ba27f --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/file.properties @@ -0,0 +1,21 @@ +; file.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderFile +log4php.appender.default.file = ../../../target/examples/file.log +log4php.appender.default.layout = LoggerLayoutTTCC +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/examples/resources/levelmatchfilter.xml b/thirdparty/apache-log4php/src/examples/resources/levelmatchfilter.xml new file mode 100644 index 0000000..472c882 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/levelmatchfilter.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + diff --git a/thirdparty/apache-log4php/src/examples/resources/levelrangefilter.xml b/thirdparty/apache-log4php/src/examples/resources/levelrangefilter.xml new file mode 100644 index 0000000..2d06cbf --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/levelrangefilter.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + diff --git a/thirdparty/apache-log4php/src/examples/resources/mail.properties b/thirdparty/apache-log4php/src/examples/resources/mail.properties new file mode 100644 index 0000000..11966d5 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/mail.properties @@ -0,0 +1,23 @@ +; mail.properties +; +; 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. +; +log4php.appender.email = LoggerAppenderMail +log4php.appender.email.layout = LoggerLayoutTTCC +log4php.appender.email.from = someone@example.com +log4php.appender.email.to = log4php@example.com +log4php.appender.email.subject = Log4php test +log4php.rootLogger = FATAL, email diff --git a/thirdparty/apache-log4php/src/examples/resources/mdc.properties b/thirdparty/apache-log4php/src/examples/resources/mdc.properties new file mode 100644 index 0000000..b866eea --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/mdc.properties @@ -0,0 +1,21 @@ +; mdc.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderEcho +log4php.appender.default.layout = LoggerLayoutPattern +log4php.appender.default.layout.conversionPattern="%d{Y-m-d H:i:s} %-5p %c %X{username}: %m in %F at %L%n" +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/examples/resources/ndc.properties b/thirdparty/apache-log4php/src/examples/resources/ndc.properties new file mode 100644 index 0000000..a1f2cf9 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/ndc.properties @@ -0,0 +1,21 @@ +; ndc.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderEcho +log4php.appender.default.layout = LoggerLayoutPattern +log4php.appender.default.layout.conversionPattern="%d{Y-m-d H:i:s} %-5p %c %x: %m in %F at %L%n" +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/examples/resources/php.properties b/thirdparty/apache-log4php/src/examples/resources/php.properties new file mode 100644 index 0000000..f3ecea6 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/php.properties @@ -0,0 +1,21 @@ +LoggerLayoutPattern; php.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderPhp +log4php.appender.default.layout = LoggerLayoutPattern +log4php.appender.default.layout.conversionPattern = "%d{Y-m-d H:i:s.u} %-5p [%t] %c: %m%n" +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/examples/resources/server.properties b/thirdparty/apache-log4php/src/examples/resources/server.properties new file mode 100644 index 0000000..5c98bfc --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/server.properties @@ -0,0 +1,24 @@ +; server.properties +; +; 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. +; +log4php.appender.file = LoggerAppenderFile +log4php.appender.file.file = server.log +log4php.appender.file.layout = LoggerLayoutTTCC +log4php.appender.console = LoggerAppenderConsole +log4php.appender.console.target = STDOUT +log4php.appender.console.layout = LoggerLayoutSimple +log4php.rootLogger = INFO, file, console diff --git a/thirdparty/apache-log4php/src/examples/resources/stringmatchfilter.xml b/thirdparty/apache-log4php/src/examples/resources/stringmatchfilter.xml new file mode 100644 index 0000000..54d7dc1 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/stringmatchfilter.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + diff --git a/thirdparty/apache-log4php/src/examples/resources/syslog.properties b/thirdparty/apache-log4php/src/examples/resources/syslog.properties new file mode 100644 index 0000000..023e1e9 --- /dev/null +++ b/thirdparty/apache-log4php/src/examples/resources/syslog.properties @@ -0,0 +1,22 @@ +; syslog.properties +; +; 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. +; +log4php.appender.default = LoggerAppenderSyslog +log4php.appender.default.layout = LoggerLayoutSimple +log4php.appender.default.ident = log4php-test +log4php.appender.default.facility = LOG_LOCAL0 +log4php.rootLogger = DEBUG, default diff --git a/thirdparty/apache-log4php/src/main/php/Logger.php b/thirdparty/apache-log4php/src/main/php/Logger.php index f2a6cce..bf330f6 100644 --- a/thirdparty/apache-log4php/src/main/php/Logger.php +++ b/thirdparty/apache-log4php/src/main/php/Logger.php @@ -1,599 +1,407 @@ name = $name; - } - - /** - * Add a new Appender to the list of appenders of this Category instance. - * - * @param LoggerAppender $newAppender - */ - public function addAppender($newAppender) - { - $appenderName = $newAppender->getName(); - $this->aai[$appenderName] = $newAppender; - } - - /** - * If assertion parameter is false, then logs msg as an error statement. - * - * @param bool $assertion - * @param string $msg message to log - */ - public function assertLog($assertion = true, $msg = '') - { - if ($assertion == false) { - $this->error($msg); - } - } - - /** - * Call the appenders in the hierarchy starting at this. - * - * @param LoggerLoggingEvent $event - */ - public function callAppenders($event) - { - if (sizeof($this->aai) > 0) { - foreach (array_keys($this->aai) as $appenderName) { - $this->aai[$appenderName]->doAppend($event); - } - } - if ($this->parent != null and $this->getAdditivity()) { - $this->parent->callAppenders($event); - } - } - - /** - * Log a message object with the DEBUG level including the caller. - * - * @param mixed $message message - * @param mixed $caller caller object or caller string id - */ - public function debug($message, $caller = null) - { - $debugLevel = LoggerLevel::getLevelDebug(); - if ($this->repository->isDisabled($debugLevel)) { - return; - } - if ($debugLevel->isGreaterOrEqual($this->getEffectiveLevel())) { - $this->forcedLog($this->fqcn, $caller, $debugLevel, $message); - } - } - - /** - * Log a message object with the ERROR level including the caller. - * - * @param mixed $message message - * @param mixed $caller caller object or caller string id - */ - public function error($message, $caller = null) - { - $errorLevel = LoggerLevel::getLevelError(); - if ($this->repository->isDisabled($errorLevel)) { - return; - } - if ($errorLevel->isGreaterOrEqual($this->getEffectiveLevel())) { - $this->forcedLog($this->fqcn, $caller, $errorLevel, $message); - } - } - - /** - * Deprecated. Please use LoggerManager::exists() instead. - * - * @param string $name - * @see LoggerManager::exists() - * @deprecated - */ - public function exists($name) - { - return LoggerManager::exists($name); - } - - /** - * Log a message object with the FATAL level including the caller. - * - * @param mixed $message message - * @param mixed $caller caller object or caller string id - */ - public function fatal($message, $caller = null) - { - $fatalLevel = LoggerLevel::getLevelFatal(); - if ($this->repository->isDisabled($fatalLevel)) { - return; - } - if ($fatalLevel->isGreaterOrEqual($this->getEffectiveLevel())) { - $this->forcedLog($this->fqcn, $caller, $fatalLevel, $message); - } - } - - /** - * This method creates a new logging event and logs the event without further checks. - * - * It should not be called directly. Use {@link info()}, {@link debug()}, {@link warn()}, - * {@link error()} and {@link fatal()} wrappers. - * - * @param string $fqcn Fully Qualified Class Name of the Logger - * @param mixed $caller caller object or caller string id - * @param LoggerLevel $level log level - * @param mixed $message message - * @see LoggerLoggingEvent - */ - public function forcedLog($fqcn, $caller, $level, $message) - { - // $fqcn = is_object($caller) ? get_class($caller) : (string)$caller; - $this->callAppenders(new LoggerLoggingEvent($fqcn, $this, $level, $message)); - } - - /** - * Get the additivity flag for this Category instance. - * @return boolean - */ - public function getAdditivity() - { - return $this->additive; - } - - /** - * Get the appenders contained in this category as an array. - * @return array collection of appenders - */ - public function getAllAppenders() - { - return array_values($this->aai); - } - - /** - * Look for the appender named as name. - * @return LoggerAppender - */ - public function getAppender($name) - { - return $this->aai[$name]; - } - - /** - * Please use the {@link getEffectiveLevel()} method instead. - * @deprecated - */ - public function getChainedPriority() - { - return $this->getEffectiveLevel(); - } - - /** - * Please use {@link LoggerManager::getCurrentLoggers()} instead. - * @deprecated - */ - public function getCurrentCategories() - { - return LoggerManager::getCurrentLoggers(); - } - - /** - * Please use {@link LoggerManager::getLoggerRepository()} instead. - * @deprecated - */ - public function getDefaultHierarchy() - { - return LoggerManager::getLoggerRepository(); - } - - /** - * @deprecated Use {@link getLoggerRepository()} - * @return LoggerHierarchy - */ - public function getHierarchy() - { - return $this->getLoggerRepository(); - } - - /** - * Starting from this category, search the category hierarchy for a non-null level and return it. - * @see LoggerLevel - * @return LoggerLevel or null - */ - public function getEffectiveLevel() - { - for($c = $this; $c != null; $c = $c->parent) { - if($c->getLevel() !== null) - return $c->getLevel(); - } - return null; - } - - /** - * Retrieve a category with named as the name parameter. - * @return Logger - */ - public function getInstance($name) - { - return LoggerManager::getLogger($name); - } - - /** - * Returns the assigned Level, if any, for this Category. - * @return LoggerLevel or null - */ - public function getLevel() - { - return $this->level; - } - - /** - * Get a Logger by name (Delegate to {@link LoggerManager}) - * @param string $name logger name - * @param LoggerFactory $factory a {@link LoggerFactory} instance or null - * @return Logger - * @static - */ - public function getLogger($name, $factory = null) - { - return LoggerManager::getLogger($name, $factory); - } - - /** - * Return the the repository where this Category is attached. - * @return LoggerHierarchy - */ - public function getLoggerRepository() - { - return $this->repository; - } - - /** - * Return the category name. - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Returns the parent of this category. - * @return Logger - */ - public function getParent() - { - return $this->parent; - } - - /** - * Please use getLevel() instead. - * @deprecated - */ - public function getPriority() - { - return $this->getLevel(); - } - - /** - * Return the inherited ResourceBundle for this category. - */ - public function getResourceBundle() - { - return; - } - - /** - * Returns the string resource corresponding to key in this category's inherited resource bundle. - */ - public function getResourceBundleString($key) - { - return; - } - - /** - * Return the root of the default category hierarchy. - * @return LoggerRoot - */ - public function getRoot() - { - return LoggerManager::getRootLogger(); - } - - /** - * get the Root Logger (Delegate to {@link LoggerManager}) - * @return LoggerRoot - * @static - */ - public function getRootLogger() - { - return LoggerManager::getRootLogger(); - } - - /** - * Log a message object with the INFO Level. - * - * @param mixed $message message - * @param mixed $caller caller object or caller string id - */ - public function info($message, $caller = null) - { - $infoLevel = LoggerLevel::getLevelInfo(); - if ($this->repository->isDisabled($infoLevel)) { - return; - } - if ($infoLevel->isGreaterOrEqual($this->getEffectiveLevel())) { - $this->forcedLog($this->fqcn, $caller, $infoLevel, $message); - } - } - - /** - * Is the appender passed as parameter attached to this category? - * - * @param LoggerAppender $appender - */ - public function isAttached($appender) - { - return isset($this->aai[$appender->getName()]); - } - - /** - * Check whether this category is enabled for the DEBUG Level. - * @return boolean - */ - public function isDebugEnabled() - { - $debugLevel = LoggerLevel::getLevelDebug(); - if ($this->repository->isDisabled($debugLevel)) { - return false; - } - return ($debugLevel->isGreaterOrEqual($this->getEffectiveLevel())); - } - - /** - * Check whether this category is enabled for a given Level passed as parameter. - * - * @param LoggerLevel level - * @return boolean - */ - public function isEnabledFor($level) - { - if ($this->repository->isDisabled($level)) { - return false; - } - return (bool)($level->isGreaterOrEqual($this->getEffectiveLevel())); - } - - /** - * Check whether this category is enabled for the info Level. - * @return boolean - * @see LoggerLevel - */ - public function isInfoEnabled() - { - $infoLevel = LoggerLevel::getLevelInfo(); - if ($this->repository->isDisabled($infoLevel)) { - return false; - } - return ($infoLevel->isGreaterOrEqual($this->getEffectiveLevel())); - } - - /** - * Log a localized and parameterized message. - */ - public function l7dlog($priority, $key, $params, $t) - { - return; - } - - /** - * This generic form is intended to be used by wrappers. - * - * @param LoggerLevel $priority a valid level - * @param mixed $message message - * @param mixed $caller caller object or caller string id - */ - public function log($priority, $message, $caller = null) - { - if ($this->repository->isDisabled($priority)) { - return; - } - if ($priority->isGreaterOrEqual($this->getEffectiveLevel())) { - $this->forcedLog($this->fqcn, $caller, $priority, $message); - } - } - - /** - * Remove all previously added appenders from this Category instance. - */ - public function removeAllAppenders() - { - $appenderNames = array_keys($this->aai); - $enumAppenders = sizeof($appenderNames); - for ($i = 0; $i < $enumAppenders; $i++) { - $this->removeAppender($appenderNames[$i]); - } - } - - /** - * Remove the appender passed as parameter form the list of appenders. - * - * @param mixed $appender can be an appender name or a {@link LoggerAppender} object - */ - public function removeAppender($appender) - { - if ($appender instanceof loggerappender) { - $appender->close(); - unset($this->aai[$appender->getName()]); - } elseif (is_string($appender) and isset($this->aai[$appender])) { - $this->aai[$appender]->close(); - unset($this->aai[$appender]); - } - } - - /** - * Set the additivity flag for this Category instance. - * - * @param boolean $additive - */ - public function setAdditivity($additive) - { - $this->additive = (bool)$additive; - } - - /** - * @deprecated Please use {@link setLevel()} instead. - * @see setLevel() - */ - public function setPriority($priority) - { - $this->setLevel($priority); - } - - /** - * Only the Hierarchy class can set the hierarchy of a - * category. - * - * @param LoggerHierarchy $repository - */ - public function setHierarchy($repository) - { - $this->repository = $repository; - } - - /** - * Set the level of this Category. - * - * @param LoggerLevel $level a level string or a level constant - */ - public function setLevel($level) - { - $this->level = $level; - } - - public function setParent($logger) { - if ($logger instanceof Logger) { - $this->parent = $logger; - } - } - - /** - * Set the resource bundle to be used with localized logging methods - */ - public function setResourceBundle($bundle) - { - return; - } - - /** - * @deprecated use {@link LoggerManager::shutdown()} instead. - * @see LoggerManager::shutdown() - */ - public function shutdown() - { - LoggerManager::shutdown(); - } - - /** - * Log a message with the WARN level. - * - * @param mixed $message message - * @param mixed $caller caller object or caller string id - */ - public function warn($message, $caller = null) - { - $warnLevel = LoggerLevel::getLevelWarn(); - if ($this->repository->isDisabled($warnLevel)) { - return; - } - if ($warnLevel->isGreaterOrEqual($this->getEffectiveLevel())) { - $this->forcedLog($this->fqcn, $caller, $warnLevel, $message); - } - } - + /** + * Additivity is set to true by default, that is children inherit the + * appenders of their ancestors by default. + * @var boolean + */ + private $additive = true; + + /** @var string fully qualified class name */ + private $fqcn = 'Logger'; + + /** @var LoggerLevel The assigned level of this category. */ + private $level = null; + + /** @var string name of this category. */ + private $name = ''; + + /** @var Logger The parent of this category. Null if this is the root logger*/ + private $parent = null; + + /** @var LoggerHierarchy the object repository */ + private $repository = null; + + /** + * @var array collection of appenders + * @see LoggerAppender + */ + private $aai = array(); + + /** + * Constructor. + * @param string $name Category name + */ + public function __construct($name) { + $this->name = $name; + } + + /** + * Add a new Appender to the list of appenders of this Category instance. + * + * @param LoggerAppender $newAppender + */ + public function addAppender($newAppender) { + $appenderName = $newAppender->getName(); + $this->aai[$appenderName] = $newAppender; + } + + /** + * If assertion parameter is false, then logs msg as an error statement. + * + * @param bool $assertion + * @param string $msg message to log + */ + public function assertLog($assertion = true, $msg = '') { + if($assertion == false) { + $this->error($msg); + } + } + + /** + * Call the appenders in the hierarchy starting at this. + * + * @param LoggerLoggingEvent $event + */ + public function callAppenders($event) { + if(count($this->aai) > 0) { + foreach(array_keys($this->aai) as $appenderName) { + $this->aai[$appenderName]->doAppend($event); + } + } + if($this->parent != null and $this->getAdditivity()) { + $this->parent->callAppenders($event); + } + } + + /** + * Log a message object with the DEBUG level including the caller. + * + * @param mixed $message message + * @param mixed $caller caller object or caller string id + */ + public function debug($message, $caller = null) { + $this->logLevel($message, LoggerLevel::getLevelDebug(), $caller); + } + + + /** + * Log a message object with the INFO Level. + * + * @param mixed $message message + * @param mixed $caller caller object or caller string id + */ + public function info($message, $caller = null) { + $this->logLevel($message, LoggerLevel::getLevelInfo(), $caller); + } + + /** + * Log a message with the WARN level. + * + * @param mixed $message message + * @param mixed $caller caller object or caller string id + */ + public function warn($message, $caller = null) { + $this->logLevel($message, LoggerLevel::getLevelWarn(), $caller); + } + + /** + * Log a message object with the ERROR level including the caller. + * + * @param mixed $message message + * @param mixed $caller caller object or caller string id + */ + public function error($message, $caller = null) { + $this->logLevel($message, LoggerLevel::getLevelError(), $caller); + } + + /** + * Log a message object with the FATAL level including the caller. + * + * @param mixed $message message + * @param mixed $caller caller object or caller string id + */ + public function fatal($message, $caller = null) { + $this->logLevel($message, LoggerLevel::getLevelFatal(), $caller); + } + + private function logLevel($message, $level, $caller = null) { + if($this->repository->isDisabled($level)) { + return; + } + if($level->isGreaterOrEqual($this->getEffectiveLevel())) { + $this->forcedLog($this->fqcn, $caller, $level, $message); + } + } + + /** + * This method creates a new logging event and logs the event without further checks. + * + * It should not be called directly. Use {@link info()}, {@link debug()}, {@link warn()}, + * {@link error()} and {@link fatal()} wrappers. + * + * @param string $fqcn Fully Qualified Class Name of the Logger + * @param mixed $caller caller object or caller string id + * @param LoggerLevel $level log level + * @param mixed $message message + * @see LoggerLoggingEvent + */ + public function forcedLog($fqcn, $caller, $level, $message) { + // $fqcn = is_object($caller) ? get_class($caller) : (string)$caller; + $this->callAppenders(new LoggerLoggingEvent($fqcn, $this, $level, $message)); + } + + /** + * Get the additivity flag for this Category instance. + * @return boolean + */ + public function getAdditivity() { + return $this->additive; + } + + /** + * Get the appenders contained in this category as an array. + * @return array collection of appenders + */ + public function getAllAppenders() { + return array_values($this->aai); + } + + /** + * Look for the appender named as name. + * @return LoggerAppender + */ + public function getAppender($name) { + return $this->aai[$name]; + } + + /** + * Starting from this category, search the category hierarchy for a non-null level and return it. + * @see LoggerLevel + * @return LoggerLevel or null + */ + public function getEffectiveLevel() { + for($c = $this; $c != null; $c = $c->parent) { + if($c->getLevel() !== null) { + return $c->getLevel(); + } + } + return null; + } + + /** + * Returns the assigned Level, if any, for this Category. + * @return LoggerLevel or null + */ + public function getLevel() { + return $this->level; + } + + /** + * Get a Logger by name (Delegate to {@link LoggerManager}) + * + * @param string $name logger name + * @param LoggerFactory $factory a {@link LoggerFactory} instance or null + * @return Logger + * @static + */ + // TODO: remove method? confusing design + public function getLogger($name, $factory = null) { + return LoggerManager::getLogger($name, $factory); + } + + /** + * Return the the repository where this Category is attached. + * @return LoggerHierarchy + */ + public function getLoggerRepository() { + return $this->repository; + } + + /** + * Return the category name. + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * Returns the parent of this category. + * @return Logger + */ + public function getParent() { + return $this->parent; + } + + /** + * Return the root of the default category hierarchy. + * @return LoggerRoot + */ + // TODO: remove method? confusing design + public function getRoot() { + return LoggerManager::getRootLogger(); + } + + /** + * get the Root Logger (Delegate to {@link LoggerManager}) + * @return LoggerRoot + * @static + */ + // TODO: remove method? confusing design + public static function getRootLogger() { + return LoggerManager::getRootLogger(); + } + + /** + * Is the appender passed as parameter attached to this category? + * + * @param LoggerAppender $appender + */ + public function isAttached($appender) { + return isset($this->aai[$appender->getName()]); + } + + /** + * Check whether this category is enabled for the DEBUG Level. + * @return boolean + */ + public function isDebugEnabled() { + return $this->isEnabledFor(LoggerLevel::getLevelDebug()); + } + + /** + * Check whether this category is enabled for a given Level passed as parameter. + * + * @param LoggerLevel level + * @return boolean + */ + public function isEnabledFor($level) { + if($this->repository->isDisabled($level)) { + return false; + } + return (bool)($level->isGreaterOrEqual($this->getEffectiveLevel())); + } + + /** + * Check whether this category is enabled for the info Level. + * @return boolean + * @see LoggerLevel + */ + public function isInfoEnabled() { + return $this->isEnabledFor(LoggerLevel::getLevelInfo()); + } + + /** + * This generic form is intended to be used by wrappers. + * + * @param LoggerLevel $priority a valid level + * @param mixed $message message + * @param mixed $caller caller object or caller string id + */ + public function log($priority, $message, $caller = null) { + if($this->isEnabledFor($priority)) { + $this->forcedLog($this->fqcn, $caller, $priority, $message); + } + } + + /** + * Remove all previously added appenders from this Category instance. + */ + public function removeAllAppenders() { + $appenderNames = array_keys($this->aai); + $enumAppenders = count($appenderNames); + for($i = 0; $i < $enumAppenders; $i++) { + $this->removeAppender($appenderNames[$i]); + } + } + + /** + * Remove the appender passed as parameter form the list of appenders. + * + * @param mixed $appender can be an appender name or a {@link LoggerAppender} object + */ + public function removeAppender($appender) { + if($appender instanceof LoggerAppender) { + $appender->close(); + unset($this->aai[$appender->getName()]); + } else if (is_string($appender) and isset($this->aai[$appender])) { + $this->aai[$appender]->close(); + unset($this->aai[$appender]); + } + } + + /** + * Set the additivity flag for this Category instance. + * + * @param boolean $additive + */ + public function setAdditivity($additive) { + $this->additive = (bool)$additive; + } + + /** + * Only the Hierarchy class can set the hierarchy of a category. + * + * @param LoggerHierarchy $repository + */ + public function setHierarchy($repository) { + $this->repository = $repository; + } + + /** + * Set the level of this Category. + * + * @param LoggerLevel $level a level string or a level constant + */ + public function setLevel($level) { + $this->level = $level; + } + + /** + * Sets the parent logger of this logger + */ + public function setParent(Logger $logger) { + $this->parent = $logger; + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerAppender.php b/thirdparty/apache-log4php/src/main/php/LoggerAppender.php index f500ffb..c8bc504 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerAppender.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerAppender.php @@ -1,13 +1,13 @@ name = $name; + $this->clearFilters(); + } - /** - * Factory - * - * @param string $name appender name - * @param string $class create an instance of this appender class - * @return LoggerAppender - */ - public static function factory($name, $class) - { - $class = basename($class); - if (!empty($class)) { - - if (!class_exists($class)) - include_once(LOG4PHP_DIR . "/appenders/{$class}.php"); - if (class_exists($class)) - return new $class($name); - } - return null; - } - - /** - * Singleton - * - * @param string $name appender name - * @param string $class create or get a reference instance of this class - * @return LoggerAppender - */ - public static function singleton($name, $class = '') - { - static $instances; - - if (!empty($name)) { - if (!isset($instances[$name])) { - if (!empty($class)) { - $appender = self::factory($name, $class); - if ($appender !== null) { - $instances[$name] = $appender; - return $instances[$name]; - } - } - return null; - } - return $instances[$name]; - } - return null; - } - - /* --------------------------------------------------------------------------*/ - /* --------------------------------------------------------------------------*/ - /* --------------------------------------------------------------------------*/ - - /** - * Add a filter to the end of the filter list. - * - * @param LoggerFilter $newFilter add a new LoggerFilter - * @abstract - */ - abstract public function addFilter($newFilter); - - /** - * Clear the list of filters by removing all the filters in it. - * @abstract - */ - abstract function clearFilters(); + /** + * Factory + * + * @param string $name appender name + * @param string $class create an instance of this appender class + * @return LoggerAppender + */ + public static function factory($name, $class) { + $class = basename($class); + if(!empty($class)) { + return new $class($name); + } + return null; + } - /** - * Return the first filter in the filter chain for this Appender. - * The return value may be null if no is filter is set. - * @return LoggerFilter - */ - abstract function getFilter(); - - /** - * Release any resources allocated. - * Subclasses of {@link LoggerAppender} should implement - * this method to perform proper closing procedures. - * @abstract - */ - abstract public function close(); + /** + * Singleton + * + * @param string $name appender name + * @param string $class create or get a reference instance of this class + * @return LoggerAppender + */ + public static function singleton($name, $class = '') { + static $instances; + + if(!empty($name)) { + if(!isset($instances[$name])) { + if(!empty($class)) { + $appender = self::factory($name, $class); + if($appender !== null) { + $instances[$name] = $appender; + return $instances[$name]; + } + } + return null; + } + return $instances[$name]; + } + return null; + } - /** - * This method performs threshold checks and invokes filters before - * delegating actual logging to the subclasses specific append() method. - * @param LoggerLoggingEvent $event - * @abstract - */ - abstract public function doAppend($event); + /** + * Add a filter to the end of the filter list. + * + * @param LoggerFilter $newFilter add a new LoggerFilter + */ + public function addFilter($newFilter) { + if($this->headFilter === null) { + $this->headFilter = $newFilter; + $this->tailFilter = $this->headFilter; + } else { + $this->tailFilter->next = $newFilter; + $this->tailFilter = $this->tailFilter->next; + } + } + + /** + * Clear the list of filters by removing all the filters in it. + * @abstract + */ + public function clearFilters() { + unset($this->headFilter); + unset($this->tailFilter); + $this->headFilter = null; + $this->tailFilter = null; + } - /** - * Get the name of this appender. - * @return string - */ - abstract public function getName(); + /** + * Return the first filter in the filter chain for this Appender. + * The return value may be null if no is filter is set. + * @return LoggerFilter + */ + public function getFilter() { + return $this->headFilter; + } + + /** + * Return the first filter in the filter chain for this Appender. + * The return value may be null if no is filter is set. + * @return LoggerFilter + */ + public function getFirstFilter() { + return $this->headFilter; + } + + + /** + * This method performs threshold checks and invokes filters before + * delegating actual logging to the subclasses specific append() method. + * @see LoggerAppender::doAppend() + * @param LoggerLoggingEvent $event + */ + public function doAppend($event) { + if($this->closed) { + return; + } + + if(!$this->isAsSevereAsThreshold($event->getLevel())) { + return; + } - /** - * Do not use this method. - * - * @param object $errorHandler - */ - abstract public function setErrorHandler($errorHandler); - - /** - * Do not use this method. - * @return object Returns the ErrorHandler for this appender. - */ - abstract public function getErrorHandler(); + $f = $this->getFirstFilter(); + while($f !== null) { + switch ($f->decide($event)) { + case LoggerFilter::DENY: return; + case LoggerFilter::ACCEPT: return $this->append($event); + case LoggerFilter::NEUTRAL: $f = $f->getNext(); + } + } + $this->append($event); + } - /** - * Set the Layout for this appender. - * - * @param LoggerLayout $layout - */ - abstract public function setLayout($layout); - - /** - * Returns this appender layout. - * @return LoggerLayout - */ - abstract public function getLayout(); + /** + * Do not use this method. + * @see LoggerAppender::setErrorHandler() + * @param object $errorHandler + */ + public function setErrorHandler($errorHandler) { + if($errorHandler == null) { + // We do not throw exception here since the cause is probably a + // bad config file. + //LoggerLog::warn("You have tried to set a null error-handler."); + } else { + $this->errorHandler = $errorHandler; + } + } + + /** + * Do not use this method. + * @see LoggerAppender::getErrorHandler() + * @return object Returns the ErrorHandler for this appender. + */ + public function getErrorHandler() { + return $this->errorHandler; + } + + /** + * Set the Layout for this appender. + * @see LoggerAppender::setLayout() + * @param LoggerLayout $layout + */ + public function setLayout($layout) { + if($this->requiresLayout()) { + $this->layout = $layout; + } + } + + /** + * Returns this appender layout. + * @see LoggerAppender::getLayout() + * @return LoggerLayout + */ + public function getLayout() { + return $this->layout; + } + + /** + * Configurators call this method to determine if the appender + * requires a layout. + * + *

If this method returns true, meaning that layout is required, + * then the configurator will configure a layout using the configuration + * information at its disposal. If this method returns false, + * meaning that a layout is not required, then layout configuration will be + * skipped even if there is available layout configuration + * information at the disposal of the configurator.

+ * + *

In the rather exceptional case, where the appender + * implementation admits a layout but can also work without it, then + * the appender should return true.

+ * + * @see LoggerAppender::requiresLayout() + * @return boolean + */ + public function requiresLayout() { + return $this->requiresLayout; + } + + /** + * Get the name of this appender. + * @see LoggerAppender::getName() + * @return string + */ + public function getName() { + return $this->name; + } + +/** + * Set the name of this appender. + * + * The name is used by other components to identify this appender. + * + * + * @param string $name + */ + public function setName($name) { + $this->name = $name; + } + + /** + * Returns this appenders threshold level. + * See the {@link setThreshold()} method for the meaning of this option. + * @return LoggerLevel + */ + public function getThreshold() { + return $this->threshold; + } + + /** + * Set the threshold level of this appender. + * + * @param mixed $threshold can be a {@link LoggerLevel} object or a string. + * @see LoggerOptionConverter::toLevel() + */ + public function setThreshold($threshold) { + if(is_string($threshold)) { + $this->threshold = LoggerOptionConverter::toLevel($threshold, null); + } else if($threshold instanceof LoggerLevel) { + $this->threshold = $threshold; + } + } + + /** + * Check whether the message level is below the appender's threshold. + * + * + * If there is no threshold set, then the return value is always true. + * @param LoggerLevel $priority + * @return boolean true if priority is greater or equal than threshold + */ + public function isAsSevereAsThreshold($priority) { + if($this->threshold === null) { + return true; + } + return $priority->isGreaterOrEqual($this->getThreshold()); + } - /** - * Set the name of this appender. - * - * The name is used by other components to identify this appender. - * - * @param string $name - */ - abstract public function setName($name); + /** + * Derived appenders should override this method if option structure + * requires it. + */ + abstract public function activateOptions(); + + /** + * Subclasses of {@link LoggerAppender} should implement + * this method to perform actual logging. + * + * @param LoggerLoggingEvent $event + * @see doAppend() + * @abstract + */ + abstract protected function append($event); - /** - * Configurators call this method to determine if the appender - * requires a layout. - * - *

If this method returns true, meaning that layout is required, - * then the configurator will configure a layout using the configuration - * information at its disposal. If this method returns false, - * meaning that a layout is not required, then layout configuration will be - * skipped even if there is available layout configuration - * information at the disposal of the configurator.

- * - *

In the rather exceptional case, where the appender - * implementation admits a layout but can also work without it, then - * the appender should return true.

- * - * @return boolean - */ - abstract public function requiresLayout(); + /** + * Release any resources allocated. + * Subclasses of {@link LoggerAppender} should implement + * this method to perform proper closing procedures. + * @abstract + */ + abstract public function close(); + /** + * Finalize this appender by calling the derived class' close() method. + */ + public function finalize() { + // An appender might be closed then garbage collected. There is no + // point in closing twice. + if($this->closed) { + return; + } + $this->close(); + } + + /** + * Perform actions before object serialization. + * + * Call {@link finalize()} to properly close the appender. + */ + function __sleep() { + $this->finalize(); + return array_keys(get_object_vars($this)); + } + + public function __destruct() { + $this->finalize(); + } + +/** + * Perform actions after object de-serialization. + * + * Call {@link activateOptions()} to properly setup the appender. + */ + function __wakeup() { + $this->activateOptions(); + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerAppenderSkeleton.php b/thirdparty/apache-log4php/src/main/php/LoggerAppenderSkeleton.php deleted file mode 100644 index 2a14371..0000000 --- a/thirdparty/apache-log4php/src/main/php/LoggerAppenderSkeleton.php +++ /dev/null @@ -1,337 +0,0 @@ -name = $name; - $this->clearFilters(); - } - - /** - * @param LoggerFilter $newFilter add a new LoggerFilter - * @see LoggerAppender::addFilter() - */ - public function addFilter($newFilter) { - if($this->headFilter === null) { - $this->headFilter = $newFilter; - $this->tailFilter = $this->headFilter; - } else { - $this->tailFilter->next = $newFilter; - $this->tailFilter = $this->tailFilter->next; - } - } - - /** - * Derived appenders should override this method if option structure - * requires it. - */ - abstract public function activateOptions(); - - /** - * Subclasses of {@link LoggerAppenderSkeleton} should implement - * this method to perform actual logging. - * - * @param LoggerLoggingEvent $event - * @see doAppend() - * @abstract - */ - abstract protected function append($event); - - /** - * @see LoggerAppender::clearFilters() - */ - public function clearFilters() - { - unset($this->headFilter); - unset($this->tailFilter); - $this->headFilter = null; - $this->tailFilter = null; - } - - /** - * Finalize this appender by calling the derived class' close() method. - */ - public function finalize() - { - // An appender might be closed then garbage collected. There is no - // point in closing twice. - if ($this->closed) return; - - LoggerLog::debug("LoggerAppenderSkeleton::finalize():name=[{$this->name}]."); - - $this->close(); - } - - /** - * Do not use this method. - * @see LoggerAppender::getErrorHandler() - * @return object - */ - public function getErrorHandler() - { - return $this->errorHandler; - } - - /** - * @see LoggerAppender::getFilter() - * @return LoggerFilter - */ - public function getFilter() - { - return $this->headFilter; - } - - /** - * Return the first filter in the filter chain for this Appender. - * The return value may be null if no is filter is set. - * @return LoggerFilter - */ - public function getFirstFilter() - { - return $this->headFilter; - } - - /** - * @see LoggerAppender::getLayout() - * @return LoggerLayout - */ - public function getLayout() - { - return $this->layout; - } - - /** - * @see LoggerAppender::getName() - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Returns this appenders threshold level. - * See the {@link setThreshold()} method for the meaning of this option. - * @return LoggerLevel - */ - public function getThreshold() - { - return $this->threshold; - } - - /** - * Check whether the message level is below the appender's threshold. - * - * - * If there is no threshold set, then the return value is always true. - * @param LoggerLevel $priority - * @return boolean true if priority is greater or equal than threshold - */ - public function isAsSevereAsThreshold($priority) - { - if ($this->threshold === null) - return true; - - return $priority->isGreaterOrEqual($this->getThreshold()); - } - - /** - * @see LoggerAppender::doAppend() - * @param LoggerLoggingEvent $event - */ - public function doAppend($event) - { - LoggerLog::debug("LoggerAppenderSkeleton::doAppend()"); - - if ($this->closed) { - LoggerLog::debug("LoggerAppenderSkeleton::doAppend() Attempted to append to closed appender named [{$this->name}]."); - return; - } - if(!$this->isAsSevereAsThreshold($event->getLevel())) { - LoggerLog::debug("LoggerAppenderSkeleton::doAppend() event level is less severe than threshold."); - return; - } - - $f = $this->getFirstFilter(); - - while($f !== null) { - switch ($f->decide($event)) { - case LOG4PHP_LOGGER_FILTER_DENY: return; - case LOG4PHP_LOGGER_FILTER_ACCEPT: return $this->append($event); - case LOG4PHP_LOGGER_FILTER_NEUTRAL: $f = $f->getNext(); - } - } - $this->append($event); - } - - - /** - * @see LoggerAppender::requiresLayout() - * @return boolean - */ - public function requiresLayout() - { - return $this->requiresLayout; - } - - /** - * @see LoggerAppender::setErrorHandler() - * @param object - */ - public function setErrorHandler($errorHandler) - { - if($errorHandler == null) { - // We do not throw exception here since the cause is probably a - // bad config file. - LoggerLog::warn("You have tried to set a null error-handler."); - } else { - $this->errorHandler = $errorHandler; - } - } - - /** - * @see LoggerAppender::setLayout() - * @param LoggerLayout $layout - */ - public function setLayout($layout) - { - if ($this->requiresLayout()) - $this->layout = $layout; - } - - /** - * @see LoggerAppender::setName() - * @param string $name - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Set the threshold level of this appender. - * - * @param mixed $threshold can be a {@link LoggerLevel} object or a string. - * @see LoggerOptionConverter::toLevel() - */ - public function setThreshold($threshold) - { - if (is_string($threshold)) { - $this->threshold = LoggerOptionConverter::toLevel($threshold, null); - }elseif ($threshold instanceof LoggerLevel) { - $this->threshold = $threshold; - } - } - - /** - * Perform actions before object serialization. - * - * Call {@link finalize()} to properly close the appender. - */ - function __sleep() - { - $this->finalize(); - return array_keys(get_object_vars($this)); - } - - /** - * Perform actions after object de-serialization. - * - * Call {@link activateOptions()} to properly setup the appender. - */ - function __wakeup() - { - $this->activateOptions(); - } - -} diff --git a/thirdparty/apache-log4php/src/main/php/spi/LoggerConfigurator.php b/thirdparty/apache-log4php/src/main/php/LoggerConfigurator.php index 555b6c7..891350a 100644 --- a/thirdparty/apache-log4php/src/main/php/spi/LoggerConfigurator.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerConfigurator.php @@ -1,13 +1,13 @@ inherited. * {@link LOG4PHP_LOGGER_CONFIGURATOR_NULL} is a synonym. @@ -37,26 +32,25 @@ define('LOG4PHP_LOGGER_CONFIGURATOR_INHERITED', 'inherited'); * {@link LOG4PHP_LOGGER_CONFIGURATOR_INHERITED}. * The current value of this string constant is null. */ -define('LOG4PHP_LOGGER_CONFIGURATOR_NULL', 'null'); +define('LOG4PHP_LOGGER_CONFIGURATOR_NULL', 'null'); /** * Implemented by classes capable of configuring log4php using a URL. - * - * @author Marco Vassura - * @version $Revision: 635069 $ + * + * @version $Revision: 771704 $ * @package log4php - * @subpackage spi + * @subpackage spi */ interface LoggerConfigurator { - /** - * Interpret a resource pointed by a url and configure accordingly. - * - * The configuration is done relative to the repository - * parameter. - * - * @param string $url The URL to parse - */ - public static function configure($url=null); - + /** + * Interpret a resource pointed by a url and configure accordingly. + * + * The configuration is done relative to the repository + * parameter. + * + * @param string $url The URL to parse + */ + public static function configure($url = null); + } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerDefaultCategoryFactory.php b/thirdparty/apache-log4php/src/main/php/LoggerDefaultCategoryFactory.php index 36fcf0c..571c7a8 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerDefaultCategoryFactory.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerDefaultCategoryFactory.php @@ -1,13 +1,13 @@ The {@link decide()} method must return one - * of the integer constants {@link LOG4PHP_LOG4PHP_LOGGER_FILTER_DENY}, - * {@link LOG4PHP_LOGGER_FILTER_NEUTRAL} or {@link LOG4PHP_LOGGER_FILTER_ACCEPT}. + * of the integer constants {@link LoggerFilter::DENY}, + * {@link LoggerFilter::NEUTRAL} or {@link LoggerFilter::ACCEPT}. * - *

If the value {@link LOG4PHP_LOGGER_FILTER_DENY} is returned, then the log event is + *

If the value {@link LoggerFilter::DENY} is returned, then the log event is * dropped immediately without consulting with the remaining * filters. * - *

If the value {@link LOG4PHP_LOGGER_FILTER_NEUTRAL} is returned, then the next filter + *

If the value {@link LoggerFilter::NEUTRAL} is returned, then the next filter * in the chain is consulted. If there are no more filters in the * chain, then the log event is logged. Thus, in the presence of no * filters, the default behaviour is to log all logging events. * - *

If the value {@link LOG4PHP_LOGGER_FILTER_ACCEPT} is returned, then the log + *

If the value {@link LoggerFilter::ACCEPT} is returned, then the log * event is logged without consulting the remaining filters. * *

The philosophy of log4php filters is largely inspired from the * Linux ipchains. * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 779002 $ * @package log4php * @subpackage spi */ -class LoggerFilter { +abstract class LoggerFilter { + + /** + * The log event must be logged immediately without consulting with + * the remaining filters, if any, in the chain. + */ + const ACCEPT = 1; + + /** + * This filter is neutral with respect to the log event. The + * remaining filters, if any, should be consulted for a final decision. + */ + const NEUTRAL = 0; + + /** + * The log event must be dropped immediately without consulting + * with the remaining filters, if any, in the chain. + */ + const DENY = -1; - /** - * @var LoggerFilter Points to the next {@link LoggerFilter} in the filter chain. - */ - protected $next; + /** + * @var LoggerFilter Points to the next {@link LoggerFilter} in the filter chain. + */ + protected $next; - /** - * Usually filters options become active when set. We provide a - * default do-nothing implementation for convenience. - */ - public function activateOptions() - { - return; - } + /** + * Usually filters options become active when set. We provide a + * default do-nothing implementation for convenience. + */ + public function activateOptions() { + } - /** - * Decide what to do. - *

If the decision is {@link LOG4PHP_LOGGER_FILTER_DENY}, then the event will be - * dropped. If the decision is {@link LOG4PHP_LOGGER_FILTER_NEUTRAL}, then the next - * filter, if any, will be invoked. If the decision is {@link LOG4PHP_LOGGER_FILTER_ACCEPT} then - * the event will be logged without consulting with other filters in - * the chain. - * - * @param LoggerLoggingEvent $event The {@link LoggerLoggingEvent} to decide upon. - * @return integer {@link LOG4PHP_LOGGER_FILTER_NEUTRAL} or {@link LOG4PHP_LOGGER_FILTER_DENY}|{@link LOG4PHP_LOGGER_FILTER_ACCEPT} - */ - public function decide($event) - { - return LOG4PHP_LOGGER_FILTER_NEUTRAL; - } + /** + * Decide what to do. + *

If the decision is {@link LoggerFilter::DENY}, then the event will be + * dropped. If the decision is {@link LoggerFilter::NEUTRAL}, then the next + * filter, if any, will be invoked. If the decision is {@link LoggerFilter::ACCEPT} then + * the event will be logged without consulting with other filters in + * the chain. + * + * @param LoggerLoggingEvent $event The {@link LoggerLoggingEvent} to decide upon. + * @return integer {@link LoggerFilter::NEUTRAL} or {@link LoggerFilter::DENY}|{@link LoggerFilter::ACCEPT} + */ + public function decide(LoggerLoggingEvent $event) { + return self::NEUTRAL; + } - public function getNext() { - return $this->next; - } + public function getNext() { + return $this->next; + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerHierarchy.php b/thirdparty/apache-log4php/src/main/php/LoggerHierarchy.php index 2547655..75dc22b 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerHierarchy.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerHierarchy.php @@ -1,13 +1,13 @@ The casual user does not have to deal with this class directly.

* *

The structure of the logger hierarchy is maintained by the @@ -49,324 +45,235 @@ require_once(LOG4PHP_DIR . '/LoggerDefaultCategoryFactory.php'); * to the provision node. Other descendants of the same ancestor add * themselves to the previously created provision node.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 784933 $ * @package log4php */ + /* + * TODO: + * - addHierarchyEventListener($listener) not supported + * - emitNoAppenderWarning($cat) not supported + * - fireAddAppenderEvent not supported + */ class LoggerHierarchy { + /** Default Factory */ + protected $defaultFactory; + + /** array hierarchy tree. saves here all loggers */ + protected $ht = array(); + + /** The root Logger */ + protected $root = null; + + /** LoggerRendererMap */ + protected $rendererMap; - /** - * @var object currently unused - */ - protected $defaultFactory; - - /** - * @var boolean activate internal logging - * @see LoggerLog - */ - public $debug = false; - - /** - * @var array hierarchy tree. saves here all loggers - */ - protected $ht = array(); - - /** - * @var LoggerRoot - */ - protected $root = null; - - /** - * @var LoggerRendererMap - */ - protected $rendererMap; - - /** - * @var LoggerLevel main level threshold - */ - protected $threshold; - - /** - * @var boolean currently unused - */ - protected $emittedNoAppenderWarning = false; - - /** - * @var boolean currently unused - */ - protected $emittedNoResourceBundleWarning = false; - - public static function singleton() - { - static $instance; - - if (!isset($instance)) - $instance = new LoggerHierarchy(new LoggerRoot()); - return $instance; - } - - /** - * Create a new logger hierarchy. - * @param object $root the root logger - */ - protected function __construct($root) - { - $this->root = $root; - // Enable all level levels by default. - $this->setThreshold(LoggerLevel::getLevelAll()); - $this->root->setHierarchy($this); - $this->rendererMap = new LoggerRendererMap(); - $this->defaultFactory = new LoggerDefaultCategoryFactory(); - } - - /** - * Add a HierarchyEventListener event to the repository. - * Not Yet Impl. - */ - public function addHierarchyEventListener($listener) - { - return; - } - - /** - * Add an object renderer for a specific class. - * @param string $classToRender - * @param LoggerObjectRenderer $or - */ - public function addRenderer($classToRender, $or) - { - $this->rendererMap->put($classToRender, $or); - } - - /** - * This call will clear all logger definitions from the internal hashtable. - */ - public function clear() - { - $this->ht = array(); - } - - public function emitNoAppenderWarning($cat) - { - return; - } - - /** - * Check if the named logger exists in the hierarchy. - * @param string $name - * @return boolean - */ - public function exists($name) - { - return isset($this->ht[$name]); - } + /** LoggerLevel main level threshold */ + protected $threshold; + + /* TODO: In log4j is this class not a singleton. Why is it in log4php? */ + public static function singleton() { + static $instance; + if(!isset($instance)) { + $instance = new LoggerHierarchy(new LoggerRoot()); + } + return $instance; + } + + /** + * Create a new logger hierarchy. + * @param object $root the root logger + */ + public function __construct(LoggerRoot $root) { + $this->root = $root; + $this->root->setHierarchy($this); + $this->setThreshold(LoggerLevel::getLevelAll()); + $this->rendererMap = new LoggerRendererMap(); + $this->defaultFactory = new LoggerDefaultCategoryFactory(); + } + + /** + * Add an object renderer for a specific class. + * @param string $classToRender + * @param LoggerObjectRenderer $or + */ + public function addRenderer($classToRender, $or) { + $this->rendererMap->put($classToRender, $or); + } + + /** + * This call will clear all logger definitions from the internal hashtable. + */ + public function clear() { + $this->ht = array(); + } + + /** + * Check if the named logger exists in the hierarchy. + * @param string $name + * @return boolean + */ + public function exists($name) { + return isset($this->ht[$name]); + } - /** - * Not Implemented. - * @param Logger $logger - * @param LoggerAppender $appender - */ - public function fireAddAppenderEvent($logger, $appender) - { - return; - } - - /** - * @deprecated Please use {@link getCurrentLoggers()} instead. - */ - public function getCurrentCategories() - { - return $this->getCurrentLoggers(); - } - - /** - * Returns all the currently defined categories in this hierarchy as an array. - * @return array - */ - public function getCurrentLoggers() - { - return array_values($this->ht); - } - - /** - * Return a new logger instance named as the first parameter using the default factory. - * - * @param string $name logger name - * @param LoggerFactory $factory a {@link LoggerFactory} instance or null - * @return Logger - */ - public function getLogger($name, $factory = null) - { - if ($factory === null) { - return $this->getLoggerByFactory($name, $this->defaultFactory); - } else { - return $this->getLoggerByFactory($name, $factory); - } - } - - /** - * Return a new logger instance named as the first parameter using the default factory. - * - * @param string $name logger name - * @return Logger - * @todo merge with {@link getLogger()} - */ - public function getLoggerByFactory($name, $factory) - { - if (!isset($this->ht[$name])) { - $this->ht[$name] = $factory->makeNewLoggerInstance($name); - $this->ht[$name]->setHierarchy($this); - $nodes = explode('.', $name); - $firstNode = array_shift($nodes); - if ( $firstNode != $name and isset($this->ht[$firstNode])) { - $this->ht[$name]->setParent($this->ht[$firstNode]); - } else { - $this->ht[$name]->setParent($this->root); - } - if (sizeof($nodes) > 0) { - // find parent node - foreach ($nodes as $node) { - $parentNode = "$firstNode.$node"; - if (isset($this->ht[$parentNode]) and $parentNode != $name) { - $this->ht[$name]->setParent($this->ht[$parentNode]); - } - $firstNode .= ".$node"; - } - } - } - return $this->ht[$name]; - } - - /** - * @return LoggerRendererMap Get the renderer map for this hierarchy. - */ - public function getRendererMap() - { - return $this->rendererMap; - } - - /** - * @return LoggerRoot Get the root of this hierarchy. - */ - public function getRootLogger() - { - if (!isset($this->root) or $this->root == null) - $this->root = new LoggerRoot(); - return $this->root; - } - - /** - * @return LoggerLevel Returns the threshold Level. - */ - public function getThreshold() - { - return $this->threshold; - } + /** + * Returns all the currently defined categories in this hierarchy as an array. + * @return array + */ + public function getCurrentLoggers() { + return array_values($this->ht); + } + + /** + * Return a new logger instance named as the first parameter using the default factory. + * + * @param string $name logger name + * @param LoggerFactory $factory a {@link LoggerFactory} instance or null + * @return Logger + */ + public function &getLogger($name, $factory = null) { + if($factory === null) { + $factory = $this->defaultFactory; + } + + if(!isset($this->ht[$name])) { + $this->ht[$name] = $factory->makeNewLoggerInstance($name); + $this->ht[$name]->setHierarchy($this); + $nodes = explode('.', $name); + $firstNode = array_shift($nodes); + + // if name is not a first node but another first node is their + if($firstNode != $name and isset($this->ht[$firstNode])) { + $this->ht[$name]->setParent($this->ht[$firstNode]); + } else { + // if there is no father, set root logger as father + $this->ht[$name]->setParent($this->root); + } + + // if there are more nodes than one + if(count($nodes) > 0) { + // find parent node + foreach($nodes as $node) { + $parentNode = "$firstNode.$node"; + if(isset($this->ht[$parentNode]) and $parentNode != $name) { + + $this->ht[$name]->setParent($this->ht[$parentNode]); + } + $firstNode .= ".$node"; + } + } + } + + return $this->ht[$name]; + } + + /** + * @return LoggerRendererMap Get the renderer map for this hierarchy. + */ + public function getRendererMap() { + return $this->rendererMap; + } + + /** + * @return LoggerRoot Get the root of this hierarchy. + */ + public function getRootLogger() { + if(!isset($this->root) or $this->root == null) { + $this->root = new LoggerRoot(); + } + return $this->root; + } + + /** + * @return LoggerLevel Returns the threshold Level. + */ + public function getThreshold() { + return $this->threshold; + } - /** - * This method will return true if this repository is disabled - * for level object passed as parameter and false otherwise. - * @return boolean - */ - public function isDisabled($level) - { - return ($this->threshold->level > $level->level); - } - - /** - * @deprecated Deprecated with no replacement. - */ - public function overrideAsNeeded($override) - { - return; - } - - /** - * Reset all values contained in this hierarchy instance to their - * default. - * - * This removes all appenders from all categories, sets - * the level of all non-root categories to null, - * sets their additivity flag to true and sets the level - * of the root logger to {@link LOGGER_LEVEL_DEBUG}. Moreover, - * message disabling is set its default "off" value. - * - *

Existing categories are not removed. They are just reset. - * - *

This method should be used sparingly and with care as it will - * block all logging until it is completed.

- */ - public function resetConfiguration() - { - $root = $this->getRootLogger(); - - $root->setLevel(LoggerLevel::getLevelDebug()); - $this->setThreshold(LoggerLevel::getLevelAll()); - $this->shutDown(); - $loggers = $this->getCurrentLoggers(); - $enumLoggers = sizeof($loggers); - for ($i = 0; $i < $enumLoggers; $i++) { - $loggers[$i]->setLevel(null); - $loggers[$i]->setAdditivity(true); - $loggers[$i]->setResourceBundle(null); - $loggers[$i]->removeAllAppenders(); - } - $this->rendererMap->clear(); - } - - /** - * @deprecated Deprecated with no replacement. - */ - public function setDisableOverride($override) - { - return; - } - - /** - * Used by subclasses to add a renderer to the hierarchy passed as parameter. - * @param string $renderedClass a LoggerRenderer class name - * @param LoggerRenderer $renderer - * - */ - public function setRenderer($renderedClass, $renderer) - { - $this->rendererMap->put($renderedClass, $renderer); - } - - /** - * set a new threshold level - * - * @param LoggerLevel $l - */ - public function setThreshold($l) - { - if ($l !== null) - $this->threshold = $l; - } - - /** - * Shutting down a hierarchy will safely close and remove - * all appenders in all categories including the root logger. - * - *

Some appenders such as {@link LoggerSocketAppender} - * need to be closed before the - * application exists. Otherwise, pending logging events might be - * lost. - * - *

The shutdown method is careful to close nested - * appenders before closing regular appenders. This is allows - * configurations where a regular appender is attached to a logger - * and again to a nested appender. - */ - public function shutdown() - { - $this->root->removeAllAppenders(); - $cats = $this->getCurrentLoggers(); - $enumCats = sizeof($cats); - if ($enumCats > 0) { - for ($i = 0; $i < $enumCats; $i++) { - $cats[$i]->removeAllAppenders(); - } - } - } + /** + * This method will return true if this repository is disabled + * for level object passed as parameter and false otherwise. + * @return boolean + */ + public function isDisabled(LoggerLevel $level) { + return ($this->threshold->toInt() > $level->toInt()); + } + + /** + * Reset all values contained in this hierarchy instance to their + * default. + * + * This removes all appenders from all categories, sets + * the level of all non-root categories to null, + * sets their additivity flag to true and sets the level + * of the root logger to {@link LOGGER_LEVEL_DEBUG}. Moreover, + * message disabling is set its default "off" value. + * + *

Existing categories are not removed. They are just reset. + * + *

This method should be used sparingly and with care as it will + * block all logging until it is completed.

+ */ + public function resetConfiguration() { + $root = $this->getRootLogger(); + + $root->setLevel(LoggerLevel::getLevelDebug()); + $this->setThreshold(LoggerLevel::getLevelAll()); + $this->shutDown(); + $loggers = $this->getCurrentLoggers(); + $enumLoggers = count($loggers); + for($i = 0; $i < $enumLoggers; $i++) { + $loggers[$i]->setLevel(null); + $loggers[$i]->setAdditivity(true); + $loggers[$i]->removeAllAppenders(); + } + $this->rendererMap->clear(); + } + + /** + * Used by subclasses to add a renderer to the hierarchy passed as parameter. + * @param string $renderedClass a LoggerRenderer class name + * @param LoggerRenderer $renderer + * + */ + public function setRenderer($renderedClass, $renderer) { + $this->rendererMap->put($renderedClass, $renderer); + } + + /** + * set a new threshold level + * + * @param LoggerLevel $l + */ + public function setThreshold(LoggerLevel $l) { + if($l !== null) { + $this->threshold = $l; + } + } + + /** + * Shutting down a hierarchy will safely close and remove + * all appenders in all categories including the root logger. + * + *

Some appenders such as {@link LoggerSocketAppender} + * need to be closed before the + * application exists. Otherwise, pending logging events might be + * lost. + * + *

The shutdown method is careful to close nested + * appenders before closing regular appenders. This is allows + * configurations where a regular appender is attached to a logger + * and again to a nested appender. + */ + public function shutdown() { + $this->root->removeAllAppenders(); + $cats = $this->getCurrentLoggers(); + $enumCats = count($cats); + if($enumCats > 0) { + for($i = 0; $i < $enumCats; $i++) { + $cats[$i]->removeAllAppenders(); + } + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerLayout.php b/thirdparty/apache-log4php/src/main/php/LoggerLayout.php index 6fb7070..219a6e7 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerLayout.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerLayout.php @@ -1,13 +1,13 @@ getRenderedMessage(); - } - - /** - * Returns the content type output by this layout. - * @return string - */ - public function getContentType() - { - return "text/plain"; - } - - /** - * Returns the footer for the layout format. - * @return string - */ - public function getFooter() - { - return null; - } + /** + * Override this method to create your own layout format. + * + * @param LoggerLoggingEvent + * @return string + */ + public function format(LoggerLoggingEvent $event) { + return $event->getRenderedMessage(); + } + + /** + * Returns the content type output by this layout. + * @return string + */ + public function getContentType() { + return "text/plain"; + } + + /** + * Returns the footer for the layout format. + * @return string + */ + public function getFooter() { + return null; + } - /** - * Returns the header for the layout format. - * @return string - */ - public function getHeader() - { - return null; - } + /** + * Returns the header for the layout format. + * @return string + */ + public function getHeader() { + return null; + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerLevel.php b/thirdparty/apache-log4php/src/main/php/LoggerLevel.php index e83b9ca..cf2fd20 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerLevel.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerLevel.php @@ -1,13 +1,13 @@ OFF, FATAL, ERROR, * WARN, INFODEBUG and @@ -45,222 +28,230 @@ define('LOG4PHP_LEVEL_ALL_INT', -2147483647); *

The LoggerLevel class may be subclassed to define a larger * level set.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 776571 $ * @package log4php * @since 0.5 */ class LoggerLevel { + + const OFF = 2147483647; + const FATAL = 50000; + const ERROR = 40000; + const WARN = 30000; + const INFO = 20000; + const DEBUG = 10000; + const ALL = -2147483647; - /** - * @var integer - */ - public $level; + /** + * TODO: check if still necessary or to be refactored + * @var integer + */ + private $level; - /** - * @var string - */ - public $levelStr; + /** + * Contains a list of instantiated levels + */ + private static $levelMap; + + /** + * @var string + */ + private $levelStr; - /** - * @var integer - */ - public $syslogEquivalent; + /** + * @var integer + */ + private $syslogEquivalent; - /** - * Constructor - * - * @param integer $level - * @param string $levelStr - * @param integer $syslogEquivalent - */ - public function __construct($level, $levelStr, $syslogEquivalent) - { - $this->level = $level; - $this->levelStr = $levelStr; - $this->syslogEquivalent = $syslogEquivalent; - } + /** + * Constructor + * + * @param integer $level + * @param string $levelStr + * @param integer $syslogEquivalent + */ + private function __construct($level, $levelStr, $syslogEquivalent) { + $this->level = $level; + $this->levelStr = $levelStr; + $this->syslogEquivalent = $syslogEquivalent; + } - /** - * Two priorities are equal if their level fields are equal. - * - * @param object $o - * @return boolean - */ - public function equals($o) - { - if ($o instanceof LoggerLevel) { - return ($this->level == $o->level); - } else { - return false; - } - } - - /** - * Returns an Off Level - * @static - * @return LoggerLevel - */ - public static function getLevelOff() - { - static $level; - if (!isset($level)) $level = new LoggerLevel(LOG4PHP_LEVEL_OFF_INT, 'OFF', 0); - return $level; - } + /** + * Two priorities are equal if their level fields are equal. + * + * @param object $o + * @return boolean + */ + public function equals($o) { + if($o instanceof LoggerLevel) { + if($this->level == $o->level) { + return true; + } + } else { + return false; + } + } + + /** + * Returns an Off Level + * @static + * @return LoggerLevel + */ + public static function getLevelOff() { + if(!isset(self::$levelMap[LoggerLevel::OFF])) { + self::$levelMap[LoggerLevel::OFF] = new LoggerLevel(LoggerLevel::OFF, 'OFF', 0); + } + return self::$levelMap[LoggerLevel::OFF]; + } - /** - * Returns a Fatal Level - * @static - * @return LoggerLevel - */ - public static function getLevelFatal() - { - static $level; - if (!isset($level)) $level = new LoggerLevel(LOG4PHP_LEVEL_FATAL_INT, 'FATAL', 0); - return $level; - } - - /** - * Returns an Error Level - * @static - * @return LoggerLevel - */ - public static function getLevelError() - { - static $level; - if (!isset($level)) $level = new LoggerLevel(LOG4PHP_LEVEL_ERROR_INT, 'ERROR', 3); - return $level; - } - - /** - * Returns a Warn Level - * @static - * @return LoggerLevel - */ - public static function getLevelWarn() - { - static $level; - if (!isset($level)) $level = new LoggerLevel(LOG4PHP_LEVEL_WARN_INT, 'WARN', 4); - return $level; - } + /** + * Returns a Fatal Level + * @static + * @return LoggerLevel + */ + public static function getLevelFatal() { + if(!isset(self::$levelMap[LoggerLevel::FATAL])) { + self::$levelMap[LoggerLevel::FATAL] = new LoggerLevel(LoggerLevel::FATAL, 'FATAL', 0); + } + return self::$levelMap[LoggerLevel::FATAL]; + } + + /** + * Returns an Error Level + * @static + * @return LoggerLevel + */ + public static function getLevelError() { + if(!isset(self::$levelMap[LoggerLevel::ERROR])) { + self::$levelMap[LoggerLevel::ERROR] = new LoggerLevel(LoggerLevel::ERROR, 'ERROR', 3); + } + return self::$levelMap[LoggerLevel::ERROR]; + } + + /** + * Returns a Warn Level + * @static + * @return LoggerLevel + */ + public static function getLevelWarn() { + if(!isset(self::$levelMap[LoggerLevel::WARN])) { + self::$levelMap[LoggerLevel::WARN] = new LoggerLevel(LoggerLevel::WARN, 'WARN', 4); + } + return self::$levelMap[LoggerLevel::WARN]; + } - /** - * Returns an Info Level - * @static - * @return LoggerLevel - */ - public static function getLevelInfo() - { - static $level; - if (!isset($level)) $level = new LoggerLevel(LOG4PHP_LEVEL_INFO_INT, 'INFO', 6); - return $level; - } + /** + * Returns an Info Level + * @static + * @return LoggerLevel + */ + public static function getLevelInfo() { + if(!isset(self::$levelMap[LoggerLevel::INFO])) { + self::$levelMap[LoggerLevel::INFO] = new LoggerLevel(LoggerLevel::INFO, 'INFO', 6); + } + return self::$levelMap[LoggerLevel::INFO]; + } - /** - * Returns a Debug Level - * @static - * @return LoggerLevel - */ - public static function getLevelDebug() - { - static $level; - if (!isset($level)) $level = new LoggerLevel(LOG4PHP_LEVEL_DEBUG_INT, 'DEBUG', 7); - return $level; - } + /** + * Returns a Debug Level + * @static + * @return LoggerLevel + */ + public static function getLevelDebug() { + if(!isset(self::$levelMap[LoggerLevel::DEBUG])) { + self::$levelMap[LoggerLevel::DEBUG] = new LoggerLevel(LoggerLevel::DEBUG, 'DEBUG', 7); + } + return self::$levelMap[LoggerLevel::DEBUG]; + } - /** - * Returns an All Level - * @static - * @return LoggerLevel - */ - public static function getLevelAll() - { - static $level; - if (!isset($level)) $level = new LoggerLevel(LOG4PHP_LEVEL_ALL_INT, 'ALL', 7); - return $level; - } - - /** - * Return the syslog equivalent of this priority as an integer. - * @final - * @return integer - */ - public function getSyslogEquivalent() - { - return $this->syslogEquivalent; - } + /** + * Returns an All Level + * @static + * @return LoggerLevel + */ + public static function getLevelAll() { + if(!isset(self::$levelMap[LoggerLevel::ALL])) { + self::$levelMap[LoggerLevel::ALL] = new LoggerLevel(LoggerLevel::ALL, 'ALL', 7); + } + return self::$levelMap[LoggerLevel::ALL]; + } + + /** + * Return the syslog equivalent of this priority as an integer. + * @final + * @return integer + */ + public function getSyslogEquivalent() { + return $this->syslogEquivalent; + } - /** - * Returns true if this level has a higher or equal - * level than the level passed as argument, false - * otherwise. - * - *

You should think twice before overriding the default - * implementation of isGreaterOrEqual method. - * - * @param LoggerLevel $r - * @return boolean - */ - public function isGreaterOrEqual($r) - { - return $this->level >= $r->level; - } + /** + * Returns true if this level has a higher or equal + * level than the level passed as argument, false + * otherwise. + * + *

You should think twice before overriding the default + * implementation of isGreaterOrEqual method. + * + * @param LoggerLevel $r + * @return boolean + */ + public function isGreaterOrEqual($r) { + return $this->level >= $r->level; + } - /** - * Returns the string representation of this priority. - * @return string - * @final - */ - public function toString() - { - return $this->levelStr; - } + /** + * Returns the string representation of this priority. + * @return string + * @final + */ + public function toString() { + return $this->levelStr; + } - /** - * Returns the integer representation of this level. - * @return integer - */ - public function toInt() - { - return $this->level; - } + /** + * Returns the integer representation of this level. + * @return integer + */ + public function toInt() { + return $this->level; + } - /** - * Convert the string passed as argument to a level. If the - * conversion fails, then this method returns a DEBUG Level. - * - * @param mixed $arg - * @param LoggerLevel $default - * @static - */ - public static function toLevel($arg, $defaultLevel = null) - { - if ($defaultLevel === null) { - return self::toLevel($arg, self::getLevelDebug()); - } else { - if (is_int($arg)) { - switch($arg) { - case LOG4PHP_LEVEL_ALL_INT: return self::getLevelAll(); - case LOG4PHP_LEVEL_DEBUG_INT: return self::getLevelDebug(); - case LOG4PHP_LEVEL_INFO_INT: return self::getLevelInfo(); - case LOG4PHP_LEVEL_WARN_INT: return self::getLevelWarn(); - case LOG4PHP_LEVEL_ERROR_INT: return self::getLevelError(); - case LOG4PHP_LEVEL_FATAL_INT: return self::getLevelFatal(); - case LOG4PHP_LEVEL_OFF_INT: return self::getLevelOff(); - default: return $defaultLevel; - } - } else { - switch(strtoupper($arg)) { - case 'ALL': return self::getLevelAll(); - case 'DEBUG': return self::getLevelDebug(); - case 'INFO': return self::getLevelInfo(); - case 'WARN': return self::getLevelWarn(); - case 'ERROR': return self::getLevelError(); - case 'FATAL': return self::getLevelFatal(); - case 'OFF': return self::getLevelOff(); - default: return $defaultLevel; - } - } - } - } + /** + * Convert the string passed as argument to a level. If the + * conversion fails, then this method returns a DEBUG Level. + * + * @param mixed $arg + * @param LoggerLevel $default + * @static + */ + public static function toLevel($arg, $defaultLevel = null) { + if($defaultLevel === null) { + return self::toLevel($arg, self::getLevelDebug()); + } else { + if(is_int($arg)) { + switch($arg) { + case self::ALL: return self::getLevelAll(); + case self::DEBUG: return self::getLevelDebug(); + case self::INFO: return self::getLevelInfo(); + case self::WARN: return self::getLevelWarn(); + case self::ERROR: return self::getLevelError(); + case self::FATAL: return self::getLevelFatal(); + case self::OFF: return self::getLevelOff(); + default: return $defaultLevel; + } + } else { + switch(strtoupper($arg)) { + case 'ALL': return self::getLevelAll(); + case 'DEBUG': return self::getLevelDebug(); + case 'INFO': return self::getLevelInfo(); + case 'WARN': return self::getLevelWarn(); + case 'ERROR': return self::getLevelError(); + case 'FATAL': return self::getLevelFatal(); + case 'OFF': return self::getLevelOff(); + default: return $defaultLevel; + } + } + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/spi/LoggerLocationInfo.php b/thirdparty/apache-log4php/src/main/php/LoggerLocationInfo.php index 941adcf..b60b49f 100644 --- a/thirdparty/apache-log4php/src/main/php/spi/LoggerLocationInfo.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerLocationInfo.php @@ -1,13 +1,13 @@ NA is returned. Current value of this string * constant is ?. */ -define('LOG4PHP_LOGGER_LOCATION_INFO_NA', 'NA'); +define('LOG4PHP_LOGGER_LOCATION_INFO_NA', 'NA'); /** * The internal representation of caller location information. * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771704 $ * @package log4php * @subpackage spi * @since 0.3 */ class LoggerLocationInfo { - /** - * @var string Caller's line number. - */ - protected $lineNumber = null; - - /** - * @var string Caller's file name. - */ - protected $fileName = null; - - /** - * @var string Caller's fully qualified class name. - */ - protected $className = null; - - /** - * @var string Caller's method name. - */ - protected $methodName = null; - - /** - * @var string - */ - protected $fullInfo = null; + /** + * @var string Caller's line number. + */ + protected $lineNumber = null; + + /** + * @var string Caller's file name. + */ + protected $fileName = null; + + /** + * @var string Caller's fully qualified class name. + */ + protected $className = null; + + /** + * @var string Caller's method name. + */ + protected $methodName = null; + + /** + * @var string + */ + protected $fullInfo = null; + + /** + * Instantiate location information based on a {@link PHP_MANUAL#debug_backtrace}. + * + * @param array $trace + * @param mixed $caller + */ + public function __construct($trace, $fqcn = null) { + $this->lineNumber = isset($trace['line']) ? $trace['line'] : null; + $this->fileName = isset($trace['file']) ? $trace['file'] : null; + $this->className = isset($trace['class']) ? $trace['class'] : null; + $this->methodName = isset($trace['function']) ? $trace['function'] : null; + $this->fullInfo = $this->getClassName() . '.' . $this->getMethodName() . + '(' . $this->getFileName() . ':' . $this->getLineNumber() . ')'; + } + + public function getClassName() { + return ($this->className === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->className; + } - /** - * Instantiate location information based on a {@link PHP_MANUAL#debug_backtrace}. - * - * @param array $trace - * @param mixed $caller - */ - public function __construct($trace, $fqcn = null) - { - $this->lineNumber = isset($trace['line']) ? $trace['line'] : null; - $this->fileName = isset($trace['file']) ? $trace['file'] : null; - $this->className = isset($trace['class']) ? $trace['class'] : null; - $this->methodName = isset($trace['function']) ? $trace['function'] : null; - - $this->fullInfo = $this->getClassName() . '.' . $this->getMethodName() . - '(' . $this->getFileName() . ':' . $this->getLineNumber() . ')'; - } + /** + * Return the file name of the caller. + *

This information is not always available. + */ + public function getFileName() { + return ($this->fileName === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->fileName; + } - public function getClassName() - { - return ($this->className === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->className; - } + /** + * Returns the line number of the caller. + *

This information is not always available. + */ + public function getLineNumber() { + return ($this->lineNumber === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->lineNumber; + } - /** - * Return the file name of the caller. - *

This information is not always available. - */ - public function getFileName() - { - return ($this->fileName === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->fileName; - } + /** + * Returns the method name of the caller. + */ + public function getMethodName() { + return ($this->methodName === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->methodName; + } - /** - * Returns the line number of the caller. - *

This information is not always available. - */ - public function getLineNumber() - { - return ($this->lineNumber === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->lineNumber; - } + /** + * Returns the full information of the caller. + */ + public function getFullInfo() { + return ($this->fullInfo === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->fullInfo; + } - /** - * Returns the method name of the caller. - */ - public function getMethodName() - { - return ($this->methodName === null) ? LOG4PHP_LOGGER_LOCATION_INFO_NA : $this->methodName; - } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerLog.php b/thirdparty/apache-log4php/src/main/php/LoggerLog.php deleted file mode 100644 index 60273b6..0000000 --- a/thirdparty/apache-log4php/src/main/php/LoggerLog.php +++ /dev/null @@ -1,101 +0,0 @@ -It uses php {@link PHP_MANUAL#trigger_error trigger_error()} function - * to output messages.

- *

You need to recode methods to output messages in a different way.

- * - * @author Marco Vassura - * @version $Revision: 635069 $ - * @package log4php - */ -class LoggerLog { - - protected static $debug = false; - - /** - * Log if debug is enabled. - * - * Log using php {@link PHP_MANUAL#trigger_error trigger_error()} function - * with E_USER_NOTICE level by default. - * - * @param string $message log message - * @param integer $errLevel level to log - * @static - */ - public static function log($message, $errLevel = E_USER_NOTICE) - { - if (LoggerLog::internalDebugging()) - trigger_error($message, $errLevel); - } - - public static function internalDebugging($value = null) - { - if (is_bool($value)) - self::$debug = $value; - return self::$debug; - } - - /** - * Report a debug message. - * - * @param string $message log message - * @static - * @since 0.3 - */ - public static function debug($message) - { - LoggerLog::log($message, E_USER_NOTICE); - } - - /** - * Report an error message. - * - * @param string $message log message - * @static - * @since 0.3 - */ - public static function error($message) - { - trigger_error($message, E_USER_ERROR); - } - - /** - * Report a warning message. - * - * @param string $message log message - * @static - * @since 0.3 - */ - public static function warn($message) - { - trigger_error($message, E_USER_WARNING); - } - -} diff --git a/thirdparty/apache-log4php/src/main/php/spi/LoggerLoggingEvent.php b/thirdparty/apache-log4php/src/main/php/LoggerLoggingEvent.php index e0b039a..7865570 100644 --- a/thirdparty/apache-log4php/src/main/php/spi/LoggerLoggingEvent.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerLoggingEvent.php @@ -1,13 +1,13 @@ This field should not be accessed directly. You shoud use the - * {@link getLevel()} method instead. - * - * @deprecated - * @var LoggerLevel - */ - protected $level; - - /** - * @var string The nested diagnostic context (NDC) of logging event. - */ - var $ndc; - - /** - * Have we tried to do an NDC lookup? If we did, there is no need - * to do it again. Note that its value is always false when - * serialized. Thus, a receiving SocketNode will never use it's own - * (incorrect) NDC. See also writeObject method. - * @var boolean - */ - var $ndcLookupRequired = true; - - /** - * Have we tried to do an MDC lookup? If we did, there is no need - * to do it again. Note that its value is always false when - * serialized. See also the getMDC and getMDCCopy methods. - * @var boolean - */ - var $mdcCopyLookupRequired = true; - - /** - * @var mixed The application supplied message of logging event. - */ - var $message; - - /** - * The application supplied message rendered through the log4php - * objet rendering mechanism. At present renderedMessage == message. - * @var string - */ - var $renderedMessage = null; - - /** - * The name of thread in which this logging event was generated. - * log4php saves here the process id via {@link PHP_MANUAL#getmypid getmypid()} - * @var mixed - */ - var $threadName = null; - - /** - * The number of seconds elapsed from 1/1/1970 until logging event - * was created plus microseconds if available. - * @var float - */ - public $timeStamp; - - /** - * @var LoggerLocationInfo Location information for the caller. - */ - var $locationInfo = null; - - /** - * Instantiate a LoggingEvent from the supplied parameters. - * - *

Except {@link $timeStamp} all the other fields of - * LoggerLoggingEvent are filled when actually needed. - * - * @param string $fqcn name of the caller class. - * @param mixed $logger The {@link Logger} category of this event or the logger name. - * @param LoggerLevel $priority The level of this event. - * @param mixed $message The message of this event. - * @param integer $timeStamp the timestamp of this logging event. - */ - public function __construct($fqcn, $logger, $priority, $message, $timeStamp = null) - { - $this->fqcn = $fqcn; - if ($logger instanceof Logger) { - $this->logger = $logger; - $this->categoryName = $logger->getName(); - } else { - $this->categoryName = strval($logger); - } - $this->level = $priority; - $this->message = $message; - if ($timeStamp !== null && is_float($timeStamp)) { - $this->timeStamp = $timeStamp; - } else { - if (function_exists('microtime')) { - // get microtime as float - $this->timeStamp = microtime(true); - } else { - $this->timeStamp = floatval(time()); - } - } - } + /** + * @var string Fully Qualified Class Name of the calling category class. + */ + var $fqcn; + + /** + * @var Logger reference + */ + var $logger = null; + + /** + * The category (logger) name. + * This field will be marked as private in future + * releases. Please do not access it directly. + * Use the {@link getLoggerName()} method instead. + * @deprecated + */ + var $categoryName; + + /** + * Level of logging event. + *

This field should not be accessed directly. You shoud use the + * {@link getLevel()} method instead. + * + * @deprecated + * @var LoggerLevel + */ + protected $level; + + /** + * @var string The nested diagnostic context (NDC) of logging event. + */ + var $ndc; + + /** + * Have we tried to do an NDC lookup? If we did, there is no need + * to do it again. Note that its value is always false when + * serialized. Thus, a receiving SocketNode will never use it's own + * (incorrect) NDC. See also writeObject method. + * @var boolean + */ + var $ndcLookupRequired = true; + + /** + * Have we tried to do an MDC lookup? If we did, there is no need + * to do it again. Note that its value is always false when + * serialized. See also the getMDC and getMDCCopy methods. + * @var boolean + */ + var $mdcCopyLookupRequired = true; + + /** + * @var mixed The application supplied message of logging event. + */ + var $message; + + /** + * The application supplied message rendered through the log4php + * objet rendering mechanism. At present renderedMessage == message. + * @var string + */ + var $renderedMessage = null; + + /** + * The name of thread in which this logging event was generated. + * log4php saves here the process id via {@link PHP_MANUAL#getmypid getmypid()} + * @var mixed + */ + var $threadName = null; + + /** + * The number of seconds elapsed from 1/1/1970 until logging event + * was created plus microseconds if available. + * @var float + */ + public $timeStamp; + + /** + * @var LoggerLocationInfo Location information for the caller. + */ + var $locationInfo = null; + + /** + * Instantiate a LoggingEvent from the supplied parameters. + * + *

Except {@link $timeStamp} all the other fields of + * LoggerLoggingEvent are filled when actually needed. + * + * @param string $fqcn name of the caller class. + * @param mixed $logger The {@link Logger} category of this event or the logger name. + * @param LoggerLevel $priority The level of this event. + * @param mixed $message The message of this event. + * @param integer $timeStamp the timestamp of this logging event. + */ + public function __construct($fqcn, $logger, $priority, $message, $timeStamp = null) { + $this->fqcn = $fqcn; + if($logger instanceof Logger) { + $this->logger = $logger; + $this->categoryName = $logger->getName(); + } else { + $this->categoryName = strval($logger); + } + $this->level = $priority; + $this->message = $message; + if($timeStamp !== null && is_float($timeStamp)) { + $this->timeStamp = $timeStamp; + } else { + if(function_exists('microtime')) { + // get microtime as float + $this->timeStamp = microtime(true); + } else { + $this->timeStamp = floatval(time()); + } + } + } - /** - * Set the location information for this logging event. The collected - * information is cached for future use. - * - *

This method uses {@link PHP_MANUAL#debug_backtrace debug_backtrace()} function (if exists) - * to collect informations about caller.

- *

It only recognize informations generated by {@link Logger} and its subclasses.

- * @return LoggerLocationInfo - */ - public function getLocationInformation() - { - if($this->locationInfo === null) { + /** + * Set the location information for this logging event. The collected + * information is cached for future use. + * + *

This method uses {@link PHP_MANUAL#debug_backtrace debug_backtrace()} function (if exists) + * to collect informations about caller.

+ *

It only recognize informations generated by {@link Logger} and its subclasses.

+ * @return LoggerLocationInfo + */ + public function getLocationInformation() { + if($this->locationInfo === null) { - $locationInfo = array(); + $locationInfo = array(); - if (function_exists('debug_backtrace')) { - $trace = debug_backtrace(); - $prevHop = null; - // make a downsearch to identify the caller - $hop = array_pop($trace); - while ($hop !== null) { - $className = @strtolower($hop['class']); - if ( !empty($className) and ($className == 'logger' or $className == 'loggercategory' or - get_parent_class($className) == 'logger') or get_parent_class($className) == 'loggercategory') { - $locationInfo['line'] = $hop['line']; - $locationInfo['file'] = $hop['file']; - break; - } - $prevHop = $hop; - $hop = array_pop($trace); - } - $locationInfo['class'] = isset($prevHop['class']) ? $prevHop['class'] : 'main'; - if (isset($prevHop['function']) and - $prevHop['function'] !== 'include' and - $prevHop['function'] !== 'include_once' and - $prevHop['function'] !== 'require' and - $prevHop['function'] !== 'require_once') { - - $locationInfo['function'] = $prevHop['function']; - } else { - $locationInfo['function'] = 'main'; - } - } - - $this->locationInfo = new LoggerLocationInfo($locationInfo, $this->fqcn); - } - return $this->locationInfo; - } + if(function_exists('debug_backtrace')) { + $trace = debug_backtrace(); + $prevHop = null; + // make a downsearch to identify the caller + $hop = array_pop($trace); + while($hop !== null) { + $className = @strtolower($hop['class']); + if(!empty($className) and ($className == 'logger' or $className == 'loggercategory' or + @strtolower(get_parent_class($className)) == 'logger' or + @strtolower(get_parent_class($className)) == 'loggercategory')) { + $locationInfo['line'] = $hop['line']; + $locationInfo['file'] = $hop['file']; + break; + } + $prevHop = $hop; + $hop = array_pop($trace); + } + $locationInfo['class'] = isset($prevHop['class']) ? $prevHop['class'] : 'main'; + if(isset($prevHop['function']) and + $prevHop['function'] !== 'include' and + $prevHop['function'] !== 'include_once' and + $prevHop['function'] !== 'require' and + $prevHop['function'] !== 'require_once') { + + $locationInfo['function'] = $prevHop['function']; + } else { + $locationInfo['function'] = 'main'; + } + } + + $this->locationInfo = new LoggerLocationInfo($locationInfo, $this->fqcn); + } + return $this->locationInfo; + } - /** - * Return the level of this event. Use this form instead of directly - * accessing the {@link $level} field. - * @return LoggerLevel - */ - public function getLevel() - { - return $this->level; - } + /** + * Return the level of this event. Use this form instead of directly + * accessing the {@link $level} field. + * @return LoggerLevel + */ + public function getLevel() { + return $this->level; + } - /** - * Return the name of the logger. Use this form instead of directly - * accessing the {@link $categoryName} field. - * @return string - */ - public function getLoggerName() - { - return $this->categoryName; - } + /** + * Return the name of the logger. Use this form instead of directly + * accessing the {@link $categoryName} field. + * @return string + */ + public function getLoggerName() { + return $this->categoryName; + } - /** - * Return the message for this logging event. - * - *

Before serialization, the returned object is the message - * passed by the user to generate the logging event. After - * serialization, the returned value equals the String form of the - * message possibly after object rendering. - * @return mixed - */ - public function getMessage() - { - if($this->message !== null) { - return $this->message; - } else { - return $this->getRenderedMessage(); - } - } + /** + * Return the message for this logging event. + * + *

Before serialization, the returned object is the message + * passed by the user to generate the logging event. After + * serialization, the returned value equals the String form of the + * message possibly after object rendering. + * @return mixed + */ + public function getMessage() { + if($this->message !== null) { + return $this->message; + } else { + return $this->getRenderedMessage(); + } + } - /** - * This method returns the NDC for this event. It will return the - * correct content even if the event was generated in a different - * thread or even on a different machine. The {@link LoggerNDC::get()} method - * should never be called directly. - * @return string - */ - public function getNDC() - { - if ($this->ndcLookupRequired) { - $this->ndcLookupRequired = false; - $this->ndc = implode(' ',LoggerNDC::get()); - } - return $this->ndc; - } + /** + * This method returns the NDC for this event. It will return the + * correct content even if the event was generated in a different + * thread or even on a different machine. The {@link LoggerNDC::get()} method + * should never be called directly. + * @return string + */ + public function getNDC() { + if($this->ndcLookupRequired) { + $this->ndcLookupRequired = false; + $this->ndc = implode(' ', LoggerNDC::get()); + } + return $this->ndc; + } + /** + * Returns the the context corresponding to the key + * parameter. + * @return string + */ + public function getMDC($key) { + return LoggerMDC::get($key); + } - /** - * Returns the the context corresponding to the key - * parameter. - * @return string - */ - public function getMDC($key) - { - return LoggerMDC::get($key); - } + /** + * Render message. + * @return string + */ + public function getRenderedMessage() { + if($this->renderedMessage === null and $this->message !== null) { + if(is_string($this->message)) { + $this->renderedMessage = $this->message; + } else { + if($this->logger !== null) { + $repository = $this->logger->getLoggerRepository(); + } else { + $repository = LoggerManager::getLoggerRepository(); + } + if(method_exists($repository, 'getRendererMap')) { + $rendererMap = $repository->getRendererMap(); + $this->renderedMessage= $rendererMap->findAndRender($this->message); + } else { + $this->renderedMessage = (string)$this->message; + } + } + } + return $this->renderedMessage; + } - /** - * Render message. - * @return string - */ - public function getRenderedMessage() - { - if($this->renderedMessage === null and $this->message !== null) { - if (is_string($this->message)) { - $this->renderedMessage = $this->message; - } else { - if ($this->logger !== null) { - $repository = $this->logger->getLoggerRepository(); - } else { - $repository = LoggerManager::getLoggerRepository(); - } - if (method_exists($repository, 'getRendererMap')) { - $rendererMap = $repository->getRendererMap(); - $this->renderedMessage= $rendererMap->findAndRender($this->message); - } else { - $this->renderedMessage = (string)$this->message; - } - } - } - return $this->renderedMessage; - } + /** + * Returns the time when the application started, in seconds + * elapsed since 01.01.1970 plus microseconds if available. + * + * @return float + * @static + */ + public static function getStartTime() { + if(!isset(self::$startTime)) { + if (function_exists('microtime')) { + // microtime as float + self::$startTime = microtime(true); + } else { + self::$startTime = floatval(time()); + } + } + return self::$startTime; + } - /** - * Returns the time when the application started, in seconds - * elapsed since 01.01.1970 plus microseconds if available. - * - * @return float - * @static - */ - public static function getStartTime() { - if (!isset(self::$startTime)) { - if (function_exists('microtime')) { - // microtime as float - self::$startTime = microtime(true); - } else { - self::$startTime = floatval(time()); - } - } - return self::$startTime; - } - - /** - * @return float - */ - public function getTimeStamp() - { - return $this->timeStamp; - } - - /** - * @return mixed - */ - public function getThreadName() - { - if ($this->threadName === null) - $this->threadName = (string)getmypid(); - return $this->threadName; + /** + * @return float + */ + public function getTimeStamp() { + return $this->timeStamp; + } + + /** + * Calculates the time of this event. + * @return the time after event starttime when this event has occured + */ + public function getTime() { + $eventTime = (float)$this->getTimeStamp(); + $eventStartTime = (float)LoggerLoggingEvent::getStartTime(); + return number_format(($eventTime - $eventStartTime) * 1000, 0, '', ''); } + + /** + * @return mixed + */ + public function getThreadName() { + if ($this->threadName === null) { + $this->threadName = (string)getmypid(); + } + return $this->threadName; + } - /** - * @return mixed null - */ - public function getThrowableInformation() - { - return null; - } - - /** - * Serialize this object - * @return string - */ - public function toString() - { - serialize($this); - } - - /** - * Avoid serialization of the {@link $logger} object - */ - public function __sleep() - { - return array( - 'fqcn','categoryName', - 'level', - 'ndc','ndcLookupRequired', - 'message','renderedMessage', - 'threadName', - 'timeStamp', - 'locationInfo' - ); - } + /** + * @return mixed null + */ + public function getThrowableInformation() { + return null; + } + + /** + * Serialize this object + * @return string + */ + public function toString() { + serialize($this); + } + + /** + * Avoid serialization of the {@link $logger} object + */ + public function __sleep() { + return array( + 'fqcn', + 'categoryName', + 'level', + 'ndc', + 'ndcLookupRequired', + 'message', + 'renderedMessage', + 'threadName', + 'timeStamp', + 'locationInfo', + ); + } } LoggerLoggingEvent::getStartTime(); - diff --git a/thirdparty/apache-log4php/src/main/php/LoggerMDC.php b/thirdparty/apache-log4php/src/main/php/LoggerMDC.php index ccaca4c..d54b244 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerMDC.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerMDC.php @@ -1,13 +1,13 @@ The MDC is managed on a per thread basis. * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771183 $ * @since 0.3 * @package log4php */ class LoggerMDC { - /** - * Put a context value as identified with the key parameter into the current thread's - * context map. - * - *

If the current thread does not have a context map it is - * created as a side effect.

- * - *

Note that you cannot put more than {@link LOGGER_MDC_HT_SIZE} keys.

- * - * @param string $key the key - * @param string $value the value - * @static - */ - public static function put($key, $value) - { - if ( sizeof($GLOBALS['log4php.LoggerMDC.ht']) < LOGGER_MDC_HT_SIZE ) - $GLOBALS['log4php.LoggerMDC.ht'][$key] = $value; - } + /** + * Put a context value as identified with the key parameter into the current thread's + * context map. + * + *

If the current thread does not have a context map it is + * created as a side effect.

+ * + *

Note that you cannot put more than {@link LOGGER_MDC_HT_SIZE} keys.

+ * + * @param string $key the key + * @param string $value the value + * @static + */ + public static function put($key, $value) { + if(count($GLOBALS['log4php.LoggerMDC.ht']) < LOGGER_MDC_HT_SIZE) { + $GLOBALS['log4php.LoggerMDC.ht'][$key] = $value; + } + } - /** - * Get the context identified by the key parameter. - * - *

You can use special key identifiers to map values in - * PHP $_SERVER and $_ENV vars. Just put a 'server.' or 'env.' - * followed by the var name you want to refer.

- * - *

This method has no side effects.

- * - * @param string $key - * @return string - * @static - */ - public static function get($key) - { - LoggerLog::debug("LoggerMDC::get() key='$key'"); - - if (!empty($key)) { - if (strpos($key, 'server.') === 0) { - $varName = substr($key, 7); - - LoggerLog::debug("LoggerMDC::get() a _SERVER[$varName] is requested."); - - return @$_SERVER[$varName]; - } elseif (strpos($key, 'env.') === 0) { - - $varName = substr($key, 4); - - LoggerLog::debug("LoggerMDC::get() a _ENV[$varName] is requested."); - - return @$_ENV[$varName]; - } elseif (isset($GLOBALS['log4php.LoggerMDC.ht'][$key])) { - - LoggerLog::debug("LoggerMDC::get() a user key is requested."); - - return $GLOBALS['log4php.LoggerMDC.ht'][$key]; - } - } - return ''; - } + /** + * Get the context identified by the key parameter. + * + *

You can use special key identifiers to map values in + * PHP $_SERVER and $_ENV vars. Just put a 'server.' or 'env.' + * followed by the var name you want to refer.

+ * + *

This method has no side effects.

+ * + * @param string $key + * @return string + * @static + */ + public static function get($key) { + if(!empty($key)) { + if(strpos($key, 'server.') === 0) { + $varName = substr($key, 7); + return @$_SERVER[$varName]; + } else if(strpos($key, 'env.') === 0) { + $varName = substr($key, 4); + return @$_ENV[$varName]; + } else if (isset($GLOBALS['log4php.LoggerMDC.ht'][$key])) { + return $GLOBALS['log4php.LoggerMDC.ht'][$key]; + } + } + return ''; + } - /** - * Remove the the context identified by the key parameter. - * - * It only affects user mappings. - * - * @param string $key - * @return string - * @static - */ - public static function remove($key) - { - unset($GLOBALS['log4php.LoggerMDC.ht'][$key]); - } + /** + * Remove the the context identified by the key parameter. + * + * It only affects user mappings. + * + * @param string $key + * @return string + * @static + */ + public static function remove($key) { + unset($GLOBALS['log4php.LoggerMDC.ht'][$key]); + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerManager.php b/thirdparty/apache-log4php/src/main/php/LoggerManager.php index c17c8b2..1a4866d 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerManager.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerManager.php @@ -1,13 +1,13 @@ exists($name); - } + private static $_classes = array( + 'Logger' => '/Logger.php', + 'LoggerHierarchy' => '/LoggerHierarchy.php', + 'LoggerDefaultCategoryFactory' => '/LoggerDefaultCategoryFactory.php', + 'LoggerHierarchy' => '/LoggerHierarchy.php', + 'LoggerLayout' => '/LoggerLayout.php', + 'LoggerLevel' => '/LoggerLevel.php', + 'LoggerMDC' => '/LoggerMDC.php', + 'LoggerNDC' => '/LoggerNDC.php', + 'LoggerReflectionUtils' => '/LoggerReflectionUtils.php', + 'LoggerConfigurator' => '/LoggerConfigurator.php', + 'LoggerConfiguratorBasic' => '/configurators/LoggerConfiguratorBasic.php', + 'LoggerConfiguratorIni' => '/configurators/LoggerConfiguratorIni.php', + 'LoggerConfiguratorPhp' => '/configurators/LoggerConfiguratorPhp.php', + 'LoggerConfiguratorXml' => '/configurators/LoggerConfiguratorXml.php', + 'LoggerRoot' => '/LoggerRoot.php', + 'LoggerAppender' => '/LoggerAppender.php', + 'LoggerAppenderAdodb' => '/appenders/LoggerAppenderAdodb.php', + 'LoggerAppenderPDO' => '/appenders/LoggerAppenderPDO.php', + 'LoggerAppenderConsole' => '/appenders/LoggerAppenderConsole.php', + 'LoggerAppenderDailyFile' => '/appenders/LoggerAppenderDailyFile.php', + 'LoggerAppenderEcho' => '/appenders/LoggerAppenderEcho.php', + 'LoggerAppenderFile' => '/appenders/LoggerAppenderFile.php', + 'LoggerAppenderMail' => '/appenders/LoggerAppenderMail.php', + 'LoggerAppenderMailEvent' => '/appenders/LoggerAppenderMailEvent.php', + 'LoggerAppenderNull' => '/appenders/LoggerAppenderNull.php', + 'LoggerAppenderPhp' => '/appenders/LoggerAppenderPhp.php', + 'LoggerAppenderRollingFile' => '/appenders/LoggerAppenderRollingFile.php', + 'LoggerAppenderSocket' => '/appenders/LoggerAppenderSocket.php', + 'LoggerAppenderSyslog' => '/appenders/LoggerAppenderSyslog.php', + 'LoggerFormattingInfo' => '/helpers/LoggerFormattingInfo.php', + 'LoggerOptionConverter' => '/helpers/LoggerOptionConverter.php', + 'LoggerPatternConverter' => '/helpers/LoggerPatternConverter.php', + 'LoggerBasicPatternConverter' => '/helpers/LoggerBasicPatternConverter.php', + 'LoggerCategoryPatternConverter' => '/helpers/LoggerCategoryPatternConverter.php', + 'LoggerClassNamePatternConverter' => '/helpers/LoggerClassNamePatternConverter.php', + 'LoggerDatePatternConverter' => '/helpers/LoggerDatePatternConverter.php', + 'LoggerLiteralPatternConverter' => '/helpers/LoggerLiteralPatternConverter.php', + 'LoggerLocationPatternConverter' => '/helpers/LoggerLocationPatternConverter.php', + 'LoggerMDCPatternConverter' => '/helpers/LoggerMDCPatternConverter.php', + 'LoggerNamedPatternConverter' => '/helpers/LoggerNamedPatternConverter.php', + 'LoggerBasicPatternConverter' => '/helpers/LoggerBasicPatternConverter.php', + 'LoggerLiteralPatternConverter' => '/helpers/LoggerLiteralPatternConverter.php', + 'LoggerDatePatternConverter' => '/helpers/LoggerDatePatternConverter.php', + 'LoggerMDCPatternConverter' => '/helpers/LoggerMDCPatternConverter.php', + 'LoggerLocationPatternConverter' => '/helpers/LoggerLocationPatternConverter.php', + 'LoggerNamedPatternConverter' => '/helpers/LoggerNamedPatternConverter.php', + 'LoggerClassNamePatternConverter' => '/helpers/LoggerClassNamePatternConverter.php', + 'LoggerCategoryPatternConverter' => '/helpers/LoggerCategoryPatternConverter.php', + 'LoggerPatternParser' => '/helpers/LoggerPatternParser.php', + 'LoggerLayoutHtml' => '/layouts/LoggerLayoutHtml.php', + 'LoggerLayoutSimple' => '/layouts/LoggerLayoutSimple.php', + 'LoggerLayoutTTCC' => '/layouts/LoggerLayoutTTCC.php', + 'LoggerLayoutPattern' => '/layouts/LoggerLayoutPattern.php', + 'LoggerLayoutXml' => '/layouts/LoggerLayoutXml.php', + 'LoggerRendererDefault' => '/renderers/LoggerRendererDefault.php', + 'LoggerRendererObject' => '/renderers/LoggerRendererObject.php', + 'LoggerRendererMap' => '/renderers/LoggerRendererMap.php', + 'LoggerFactory' => '/LoggerFactory.php', + 'LoggerLocationInfo' => '/LoggerLocationInfo.php', + 'LoggerLoggingEvent' => '/LoggerLoggingEvent.php', + 'LoggerFilter' => '/LoggerFilter.php', + 'LoggerFilterDenyAll' => '/filters/LoggerFilterDenyAll.php', + 'LoggerFilterLevelMatch' => '/filters/LoggerFilterLevelMatch.php', + 'LoggerFilterLevelRange' => '/filters/LoggerFilterLevelRange.php', + 'LoggerFilterStringMatch' => '/filters/LoggerFilterStringMatch.php', + ); - /** - * Returns an array this whole Logger instances. - * - * @static - * @see Logger - * @return array - */ - public static function getCurrentLoggers() - { - return self::getLoggerRepository()->getCurrentLoggers(); - } - - /** - * Returns the root logger. - * - * @static - * @return object - * @see LoggerRoot - */ - public static function getRootLogger() - { - return self::getLoggerRepository()->getRootLogger(); - } - - /** - * Returns the specified Logger. - * - * @param string $name logger name - * @param LoggerFactory $factory a {@link LoggerFactory} instance or null - * @static - * @return Logger - */ - public static function getLogger($name, $factory = null) - { - return self::getLoggerRepository()->getLogger($name, $factory); - } - - /** - * Returns the LoggerHierarchy. - * - * @static - * @return LoggerHierarchy - */ - public static function getLoggerRepository() - { - return LoggerHierarchy::singleton(); - } - + /** + * Class autoloader + * This method is provided to be invoked within an __autoload() magic method. + * @param string class name + */ + public static function autoload($className) { + if(isset(self::$_classes[$className])) { + include LOG4PHP_DIR.self::$_classes[$className]; + } + } - /** - * Destroy loggers object tree. - * - * @static - * @return boolean - */ - public static function resetConfiguration() - { - return self::getLoggerRepository()->resetConfiguration(); - } - - /** - * Does nothing. - * @static - */ - public static function setRepositorySelector($selector, $guard) - { - return; - } - - /** - * Safely close all appenders. - * @static - */ - public static function shutdown() - { - return self::getLoggerRepository()->shutdown(); - } + /** + * check if a given logger exists. + * + * @param string $name logger name + * @static + * @return boolean + */ + public static function exists($name) { + return self::getLoggerRepository()->exists($name); + } + + /** + * Returns an array this whole Logger instances. + * + * @static + * @see Logger + * @return array + */ + public static function getCurrentLoggers() { + return self::getLoggerRepository()->getCurrentLoggers(); + } + + /** + * Returns the root logger. + * + * @static + * @return object + * @see LoggerRoot + */ + public static function getRootLogger() { + return self::getLoggerRepository()->getRootLogger(); + } + + /** + * Returns the specified Logger. + * + * @param string $name logger name + * @param LoggerFactory $factory a {@link LoggerFactory} instance or null + * @static + * @return Logger + */ + public static function getLogger($name, $factory = null) { + return self::getLoggerRepository()->getLogger($name, $factory); + } + + /** + * Returns the LoggerHierarchy. + * + * @static + * @return LoggerHierarchy + */ + public static function getLoggerRepository() { + return LoggerHierarchy::singleton(); + } + + + /** + * Destroy loggers object tree. + * + * @static + * @return boolean + */ + public static function resetConfiguration() { + return self::getLoggerRepository()->resetConfiguration(); + } + + /** + * Does nothing. + * @static + * + * TODO: remove this method? + */ + public static function setRepositorySelector($selector, $guard) { + return; + } + + /** + * Safely close all appenders. + * @static + */ + public static function shutdown() { + return self::getLoggerRepository()->shutdown(); + } } // --------------------------------------------------------------------------- @@ -138,94 +213,95 @@ class LoggerManager { // --------------------------------------------------------------------------- if (!defined('LOG4PHP_DEFAULT_INIT_OVERRIDE')) { - if (isset($_ENV['log4php.defaultInitOverride'])) { - /** - * @ignore - */ - define('LOG4PHP_DEFAULT_INIT_OVERRIDE', - LoggerOptionConverter::toBoolean($_ENV['log4php.defaultInitOverride'], false) - ); - } elseif (isset($GLOBALS['log4php.defaultInitOverride'])) { - /** - * @ignore - */ - define('LOG4PHP_DEFAULT_INIT_OVERRIDE', - LoggerOptionConverter::toBoolean($GLOBALS['log4php.defaultInitOverride'], false) - ); - } else { - /** - * Controls init execution - * - * With this constant users can skip the default init procedure that is - * called when this file is included. - * - *

If it is not user defined, log4php tries to autoconfigure using (in order):

- * - * - the $_ENV['log4php.defaultInitOverride'] variable. - * - the $GLOBALS['log4php.defaultInitOverride'] global variable. - * - defaults to false - * - * @var boolean - */ - define('LOG4PHP_DEFAULT_INIT_OVERRIDE', false); - } + if (isset($_ENV['log4php.defaultInitOverride'])) { + /** + * @ignore + */ + define('LOG4PHP_DEFAULT_INIT_OVERRIDE', + LoggerOptionConverter::toBoolean($_ENV['log4php.defaultInitOverride'], false) + ); + } elseif (isset($GLOBALS['log4php.defaultInitOverride'])) { + /** + * @ignore + */ + define('LOG4PHP_DEFAULT_INIT_OVERRIDE', + LoggerOptionConverter::toBoolean($GLOBALS['log4php.defaultInitOverride'], false) + ); + } else { + /** + * Controls init execution + * + * With this constant users can skip the default init procedure that is + * called when this file is included. + * + *

If it is not user defined, log4php tries to autoconfigure using (in order):

+ * + * - the $_ENV['log4php.defaultInitOverride'] variable. + * - the $GLOBALS['log4php.defaultInitOverride'] global variable. + * - defaults to false + * + * @var boolean + */ + define('LOG4PHP_DEFAULT_INIT_OVERRIDE', false); + } } if (!defined('LOG4PHP_CONFIGURATION')) { - if (isset($_ENV['log4php.configuration'])) { - /** - * @ignore - */ - define('LOG4PHP_CONFIGURATION', trim($_ENV['log4php.configuration'])); - } else { - /** - * Configuration file. - * - *

This constant tells configurator classes where the configuration - * file is located.

- *

If not set by user, log4php tries to set it automatically using - * (in order):

- * - * - the $_ENV['log4php.configuration'] enviroment variable. - * - defaults to 'log4php.properties'. - * - * @var string - */ - define('LOG4PHP_CONFIGURATION', 'log4php.properties'); - } + if (isset($_ENV['log4php.configuration'])) { + /** + * @ignore + */ + define('LOG4PHP_CONFIGURATION', trim($_ENV['log4php.configuration'])); + } else { + /** + * Configuration file. + * + *

This constant tells configurator classes where the configuration + * file is located.

+ *

If not set by user, log4php tries to set it automatically using + * (in order):

+ * + * - the $_ENV['log4php.configuration'] enviroment variable. + * - defaults to 'log4php.properties'. + * + * @var string + */ + define('LOG4PHP_CONFIGURATION', 'log4php.properties'); + } } if (!defined('LOG4PHP_CONFIGURATOR_CLASS')) { - if ( strtolower(substr( LOG4PHP_CONFIGURATION, -4 )) == '.xml') { - /** - * @ignore - */ - define('LOG4PHP_CONFIGURATOR_CLASS', LOG4PHP_DIR . '/xml/LoggerDOMConfigurator'); - } else { - /** - * Holds the configurator class name. - * - *

This constant is set with the fullname (path included but non the - * .php extension) of the configurator class that init procedure will use.

- *

If not set by user, log4php tries to set it automatically.

- *

If {@link LOG4PHP_CONFIGURATION} has '.xml' extension set the - * constants to '{@link LOG4PHP_DIR}/xml/{@link LoggerDOMConfigurator}'.

- *

Otherwise set the constants to - * '{@link LOG4PHP_DIR}/{@link LoggerPropertyConfigurator}'.

- * - *

Security Note: classfile pointed by this constant will be brutally - * included with a: - * @include_once(LOG4PHP_CONFIGURATOR_CLASS . ".php");

- * - * @var string - */ - define('LOG4PHP_CONFIGURATOR_CLASS', LOG4PHP_DIR . '/LoggerPropertyConfigurator'); - } + if ( strtolower(substr( LOG4PHP_CONFIGURATION, -4 )) == '.xml') { + /** + * @ignore + */ + define('LOG4PHP_CONFIGURATOR_CLASS', 'LoggerConfiguratorXml'); + } else { + /** + * Holds the configurator class name. + * + *

This constant is set with the fullname (path included but non the + * .php extension) of the configurator class that init procedure will use.

+ *

If not set by user, log4php tries to set it automatically.

+ *

If {@link LOG4PHP_CONFIGURATION} has '.xml' extension set the + * constants to '{@link LOG4PHP_DIR}/xml/{@link LoggerConfiguratorXml}'.

+ *

Otherwise set the constants to + * '{@link LOG4PHP_DIR}/{@link LoggerConfiguratorIni}'.

+ * + *

Security Note: classfile pointed by this constant will be brutally + * included with a: + * @include_once(LOG4PHP_CONFIGURATOR_CLASS . ".php");

+ * + * @var string + */ + define('LOG4PHP_CONFIGURATOR_CLASS', 'LoggerConfiguratorIni'); + } } if (!LOG4PHP_DEFAULT_INIT_OVERRIDE) { - if (!LoggerManagerDefaultInit()) - LoggerLog::warn("LOG4PHP main() Default Init failed."); + if (!LoggerManagerDefaultInit()) { +// LoggerLog::warn("LOG4PHP main() Default Init failed."); + } } /** @@ -240,19 +316,8 @@ if (!LOG4PHP_DEFAULT_INIT_OVERRIDE) { * * @return boolean */ -function LoggerManagerDefaultInit() -{ - $configuratorClass = basename(LOG4PHP_CONFIGURATOR_CLASS); - if (!class_exists($configuratorClass)) { - include_once(LOG4PHP_CONFIGURATOR_CLASS . ".php"); - } - if (class_exists($configuratorClass)) { - - return call_user_func(array($configuratorClass, 'configure'), LOG4PHP_CONFIGURATION); - - } else { - LoggerLog::warn("LoggerManagerDefaultInit() Configurator '{$configuratorClass}' doesnt exists"); - return false; - } +function LoggerManagerDefaultInit() { + $configuratorClass = basename(LOG4PHP_CONFIGURATOR_CLASS); + return call_user_func(array($configuratorClass, 'configure'), LOG4PHP_CONFIGURATION); } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerNDC.php b/thirdparty/apache-log4php/src/main/php/LoggerNDC.php index 3b76a37..dd5e0fc 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerNDC.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerNDC.php @@ -1,13 +1,13 @@ LoggerNDC::push() - * As a side effect, if there is no nested diagnostic context for the - * current thread, this method will create it. + * LoggerNDC::push() + * As a side effect, if there is no nested diagnostic context for the + * current thread, this method will create it. * - When leaving a context, call - * LoggerNDC::pop() + * LoggerNDC::pop() * - When exiting a thread make sure to call {@link remove()} - * + * *

There is no penalty for forgetting to match each * push operation with a corresponding pop, * except the obvious mismatch between the real application context @@ -92,151 +83,129 @@ $GLOBALS['log4php.LoggerNDC.maxDepth'] = LOGGER_NDC_HT_SIZE; * the same category) can still be distinguished because each client * request will have a different NDC tag.

* - * - * @author Marco Vassura - * @version $Revision: 635069 $ + * + * @version $Revision: 777447 $ * @package log4php * @since 0.3 */ class LoggerNDC { - /** - * Clear any nested diagnostic information if any. This method is - * useful in cases where the same thread can be potentially used - * over and over in different unrelated contexts. - * - *

This method is equivalent to calling the {@link setMaxDepth()} - * method with a zero maxDepth argument. - * - * @static - */ - public static function clear() - { - LoggerLog::debug("LoggerNDC::clear()"); - - $GLOBALS['log4php.LoggerNDC.ht'] = array(); - } + /** + * Clear any nested diagnostic information if any. This method is + * useful in cases where the same thread can be potentially used + * over and over in different unrelated contexts. + * + *

This method is equivalent to calling the {@link setMaxDepth()} + * method with a zero maxDepth argument. + * + * @static + */ + public static function clear() { + $GLOBALS['log4php.LoggerNDC.ht'] = array(); + } - /** - * Never use this method directly, use the {@link LoggerLoggingEvent::getNDC()} method instead. - * @static - * @return array - */ - public static function get() - { - LoggerLog::debug("LoggerNDC::get()"); - - return $GLOBALS['log4php.LoggerNDC.ht']; - } + /** + * Never use this method directly, use the {@link LoggerLoggingEvent::getNDC()} method instead. + * @static + * @return array + */ + public static function get() { + if(!array_key_exists('log4php.LoggerNDC.ht', $GLOBALS)) { + LoggerNDC::clear(); + } + return $GLOBALS['log4php.LoggerNDC.ht']; + } - /** - * Get the current nesting depth of this diagnostic context. - * - * @see setMaxDepth() - * @return integer - * @static - */ - public static function getDepth() - { - LoggerLog::debug("LoggerNDC::getDepth()"); - - return sizeof($GLOBALS['log4php.LoggerNDC.ht']); - } + /** + * Get the current nesting depth of this diagnostic context. + * + * @see setMaxDepth() + * @return integer + * @static + */ + public static function getDepth() { + return count($GLOBALS['log4php.LoggerNDC.ht']); + } - /** - * Clients should call this method before leaving a diagnostic - * context. - * - *

The returned value is the value that was pushed last. If no - * context is available, then the empty string "" is returned.

- * - * @return string The innermost diagnostic context. - * @static - */ - public static function pop() - { - LoggerLog::debug("LoggerNDC::pop()"); - - if (sizeof($GLOBALS['log4php.LoggerNDC.ht']) > 0) { - return array_pop($GLOBALS['log4php.LoggerNDC.ht']); - } else { - return ''; - } - } + /** + * Clients should call this method before leaving a diagnostic + * context. + * + *

The returned value is the value that was pushed last. If no + * context is available, then the empty string "" is returned.

+ * + * @return string The innermost diagnostic context. + * @static + */ + public static function pop() { + if(count($GLOBALS['log4php.LoggerNDC.ht']) > 0) { + return array_pop($GLOBALS['log4php.LoggerNDC.ht']); + } else { + return ''; + } + } - /** - * Looks at the last diagnostic context at the top of this NDC - * without removing it. - * - *

The returned value is the value that was pushed last. If no - * context is available, then the empty string "" is returned.

- * @return string The innermost diagnostic context. - * @static - */ - public static function peek() - { - LoggerLog::debug("LoggerNDC::peek()"); - - if (sizeof($GLOBALS['log4php.LoggerNDC.ht']) > 0) { - return end($GLOBALS['log4php.LoggerNDC.ht']); - } else { - return ''; - } - } + /** + * Looks at the last diagnostic context at the top of this NDC + * without removing it. + * + *

The returned value is the value that was pushed last. If no + * context is available, then the empty string "" is returned.

+ * @return string The innermost diagnostic context. + * @static + */ + public static function peek(){ + if(count($GLOBALS['log4php.LoggerNDC.ht']) > 0) { + return end($GLOBALS['log4php.LoggerNDC.ht']); + } else { + return ''; + } + } - /** - * Push new diagnostic context information for the current thread. - * - *

The contents of the message parameter is - * determined solely by the client. - * - * @param string $message The new diagnostic context information. - * @static - */ - public static function push($message) - { - LoggerLog::debug("LoggerNDC::push()"); - - array_push($GLOBALS['log4php.LoggerNDC.ht'], (string)$message); - } + /** + * Push new diagnostic context information for the current thread. + * + *

The contents of the message parameter is + * determined solely by the client. + * + * @param string $message The new diagnostic context information. + * @static + */ + public static function push($message) { + array_push($GLOBALS['log4php.LoggerNDC.ht'], (string)$message); + } - /** - * Remove the diagnostic context for this thread. - * @static - */ - public static function remove() - { - LoggerLog::debug("LoggerNDC::remove()"); - - LoggerNDC::clear(); - } + /** + * Remove the diagnostic context for this thread. + * @static + */ + public static function remove() { + LoggerNDC::clear(); + } + + /** + * Set maximum depth of this diagnostic context. If the current + * depth is smaller or equal to maxDepth, then no + * action is taken. + * + *

This method is a convenient alternative to multiple + * {@link pop()} calls. Moreover, it is often the case that at + * the end of complex call sequences, the depth of the NDC is + * unpredictable. The {@link setMaxDepth()} method circumvents + * this problem. + * + * @param integer $maxDepth + * @see getDepth() + * @static + */ + public static function setMaxDepth($maxDepth) { + $maxDepth = (int)$maxDepth; + if($maxDepth <= LOGGER_NDC_HT_SIZE) { + if(LoggerNDC::getDepth() > $maxDepth) { + $GLOBALS['log4php.LoggerNDC.ht'] = array_slice($GLOBALS['log4php.LoggerNDC.ht'], $maxDepth); + } + $GLOBALS['log4php.LoggerNDC.maxDepth'] = $maxDepth; + } + } - /** - * Set maximum depth of this diagnostic context. If the current - * depth is smaller or equal to maxDepth, then no - * action is taken. - * - *

This method is a convenient alternative to multiple - * {@link pop()} calls. Moreover, it is often the case that at - * the end of complex call sequences, the depth of the NDC is - * unpredictable. The {@link setMaxDepth()} method circumvents - * this problem. - * - * @param integer $maxDepth - * @see getDepth() - * @static - */ - public static function setMaxDepth($maxDepth) - { - LoggerLog::debug("LoggerNDC::setMaxDepth() maxDepth='$maxDepth'"); - - $maxDepth = (int)$maxDepth; - if ($maxDepth <= LOGGER_NDC_HT_SIZE) { - if (LoggerNDC::getDepth() > $maxDepth) { - $GLOBALS['log4php.LoggerNDC.ht'] = array_slice($GLOBALS['log4php.LoggerNDC.ht'], $maxDepth); - } - $GLOBALS['log4php.LoggerNDC.maxDepth'] = $maxDepth; - } - } - } diff --git a/thirdparty/apache-log4php/src/main/php/config/LoggerPropertySetter.php b/thirdparty/apache-log4php/src/main/php/LoggerReflectionUtils.php index da57374..7ad3474 100644 --- a/thirdparty/apache-log4php/src/main/php/config/LoggerPropertySetter.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerReflectionUtils.php @@ -1,13 +1,13 @@ obj =& $obj; + } + + /** + * Set the properties of an object passed as a parameter in one + * go. The properties are parsed relative to a + * prefix. + * + * @param object &$obj The object to configure. + * @param array $properties An array containing keys and values. + * @param string $prefix Only keys having the specified prefix will be set. + * @static + */ + // TODO: check, if this is really useful + public static function setPropertiesByObject(&$obj, $properties, $prefix) { + $pSetter = new LoggerReflectionUtils($obj); + return $pSetter->setProperties($properties, $prefix); + } + -/** - * @ignore - */ -if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..'); - -require_once(LOG4PHP_DIR . '/LoggerLog.php'); -require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php'); - -/** - * General purpose Object property setter. Clients repeatedly invokes - * {@link setProperty()} in order to invoke setters - * on the Object specified in the constructor. - * - * Usage: - * - * $ps = new LoggerPropertySetter($anObject); - * $ps->set("name", "Joe"); - * $ps->set("age", 32); - * $ps->set("isMale", true); - * - * will cause the invocations - * - * $anObject->setName("Joe"); - * $anObject->setAge(32); - * $anObject->setMale(true) - * - * if such methods exist. - * - * @author Marco Vassura - * @version $Revision: 635069 $ - * @package log4php - * @subpackage config - * @since 0.5 - */ -class LoggerPropertySetter { - - /** - * @var object the target object - * @access private + /** + * Set the properites for the object that match the + * prefix passed as parameter. + * + * Example: + * + * $arr['xxxname'] = 'Joe'; + * $arr['xxxmale'] = true; + * and prefix xxx causes setName and setMale. + * + * @param array $properties An array containing keys and values. + * @param string $prefix Only keys having the specified prefix will be set. + */ + // TODO: check, if this is really useful + public function setProperties($properties, $prefix) { + $len = strlen($prefix); + while(list($key,) = each($properties)) { + if(strpos($key, $prefix) === 0) { + if(strpos($key, '.', ($len + 1)) > 0) { + continue; + } + $value = LoggerOptionConverter::findAndSubst($key, $properties); + $key = substr($key, $len); + if($key == 'layout' and ($this->obj instanceof LoggerAppender)) { + continue; + } + $this->setProperty($key, $value); + } + } + $this->activate(); + } + + /** + * Set a property on this PropertySetter's Object. If successful, this + * method will invoke a setter method on the underlying Object. The + * setter is the one for the specified property name and the value is + * determined partly from the setter argument type and partly from the + * value specified in the call to this method. + * + *

If the setter expects a String no conversion is necessary. + * If it expects an int, then an attempt is made to convert 'value' + * to an int using new Integer(value). If the setter expects a boolean, + * the conversion is by new Boolean(value). + * + * @param string $name name of the property + * @param string $value String value of the property + */ + public function setProperty($name, $value) { + if($value === null) { + return; + } + + $method = "set" . ucfirst($name); + + if(!method_exists($this->obj, $method)) { + // no such setter method + return; + } else { + return call_user_func(array(&$this->obj, $method), $value); + } + } + + public function activate() { + if(method_exists($this->obj, 'activateoptions')) { + return call_user_func(array(&$this->obj, 'activateoptions')); + } + } + + /** + * Creates an instances from the given class name. + * + * @param string $classname + * @return an object from the class with the given classname + */ + public static function createObject($class) { + if(!empty($class)) { + $class = basename($class); + return new $class(); + } + return null; + } + + /** + * @param object $object + * @param string $name + * @param mixed $value */ - var $obj; - - /** - * Create a new LoggerPropertySetter for the specified Object. - * This is done in prepartion for invoking {@link setProperty()} - * one or more times. - * @param object &$obj the object for which to set properties - */ - function LoggerPropertySetter(&$obj) - { - $this->obj =& $obj; - } - - /** - * Set the properties of an object passed as a parameter in one - * go. The properties are parsed relative to a - * prefix. - * - * @param object &$obj The object to configure. - * @param array $properties An array containing keys and values. - * @param string $prefix Only keys having the specified prefix will be set. - * @static - */ - public static - function setPropertiesByObject(&$obj, $properties, $prefix) - { - $pSetter = new LoggerPropertySetter($obj); - return $pSetter->setProperties($properties, $prefix); - } - - - /** - * Set the properites for the object that match the - * prefix passed as parameter. - * - * @param array $properties An array containing keys and values. - * @param string $prefix Only keys having the specified prefix will be set. - */ - function setProperties($properties, $prefix) - { - LoggerLog::debug("LoggerOptionConverter::setProperties():prefix=[{$prefix}]"); - - $len = strlen($prefix); - while (list($key,) = each($properties)) { - if (strpos($key, $prefix) === 0) { - if (strpos($key, '.', ($len + 1)) > 0) - continue; - $value = LoggerOptionConverter::findAndSubst($key, $properties); - $key = substr($key, $len); - if ($key == 'layout' and $this->obj instanceof loggerappender) { - continue; - } - $this->setProperty($key, $value); - } - } - $this->activate(); - } - - /** - * Set a property on this PropertySetter's Object. If successful, this - * method will invoke a setter method on the underlying Object. The - * setter is the one for the specified property name and the value is - * determined partly from the setter argument type and partly from the - * value specified in the call to this method. - * - *

If the setter expects a String no conversion is necessary. - * If it expects an int, then an attempt is made to convert 'value' - * to an int using new Integer(value). If the setter expects a boolean, - * the conversion is by new Boolean(value). - * - * @param string $name name of the property - * @param string $value String value of the property - */ - function setProperty($name, $value) - { - LoggerLog::debug("LoggerOptionConverter::setProperty():name=[{$name}]:value=[{$value}]"); - - if ($value === null) return; - - $method = "set" . ucfirst($name); - - if (!method_exists($this->obj, $method)) { - LoggerLog::warn( - "LoggerOptionConverter::setProperty() No such setter method for [{$name}] property in " . - get_class($this->obj) . "." - ); - } else { - return call_user_func(array(&$this->obj, $method), $value); + function setter(&$object, $name, $value) { + if (empty($name)) { + return false; } - } - - function activate() - { - LoggerLog::debug("LoggerOptionConverter::activate()"); - - if (method_exists($this->obj, 'activateoptions')) { - return call_user_func(array(&$this->obj, 'activateoptions')); + $methodName = 'set'.ucfirst($name); + if (method_exists($object, $methodName)) { + return call_user_func(array(&$object, $methodName), $value); } else { - LoggerLog::debug("LoggerOptionConverter::activate() Nothing to activate."); + return false; } } + } + + ?> \ No newline at end of file diff --git a/thirdparty/apache-log4php/src/main/php/LoggerRoot.php b/thirdparty/apache-log4php/src/main/php/LoggerRoot.php index 16b70ec..abc74f6 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerRoot.php +++ b/thirdparty/apache-log4php/src/main/php/LoggerRoot.php @@ -1,13 +1,13 @@ name); + if($level == null) { + $level = LoggerLevel::getLevelAll(); + } + $this->setLevel($level); + } + + /** + * @return LoggerLevel the level + */ + public function getChainedLevel() { + return parent::getLevel(); + } + + /** + * Setting a null value to the level of the root category may have catastrophic results. + * @param LoggerLevel $level + */ + public function setLevel($level) { + if($level != null) { + parent::setLevel($level); + } + } + + /** + * Always returns false. + * Because LoggerRoot has no parents, it returns false. + * @param Logger $parent + * @return boolean + */ + public function setParent(Logger $parent) { + return false; + } - /** - * Constructor - * - * @param integer $level initial log level - */ - public function __construct($level = null) - { - parent::__construct($this->name); - if ($level == null) - $level = LoggerLevel::getLevelAll(); - $this->setLevel($level); - } - - /** - * @return LoggerLevel the level - */ - public function getChainedLevel() - { - return $this->level; - } - - /** - * Setting a null value to the level of the root category may have catastrophic results. - * @param LoggerLevel $level - */ - public function setLevel($level) - { - if ($level != null) { - $this->level = $level; - } - } - - /** - * Please use setLevel() instead. - * @param LoggerLevel $level - * @deprecated - */ - public function setPriority($level) - { - $this->setLevel($level); - } - - /** - * Always returns false. - * Because LoggerRoot has no parents, it returns false. - * @param Logger $parent - * @return boolean - */ - public function setParent($parent) - { - return false; - } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderAdodb.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderAdodb.php index 531fade..ad6feca 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderAdodb.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderAdodb.php @@ -20,15 +20,6 @@ * @subpackage appenders */ -/** - * @ignore - */ -if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..'); - -require_once(LOG4PHP_DIR . '/LoggerAppenderSkeleton.php'); -require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php'); -require_once(LOG4PHP_DIR . '/LoggerLog.php'); - require_once(ADODB_DIR . '/adodb.inc.php'); /** @@ -39,12 +30,12 @@ require_once(ADODB_DIR . '/adodb.inc.php'); * {@link $database}, {@link $createTable}, {@link $table} and {@link $sql}.

*

See examples in test directory.

* - * @author sbw + * @deprecated Use LoggerAppenderPDO instead * @package log4php * @subpackage appenders * @since 0.9 */ -class LoggerAppenderAdodb extends LoggerAppenderSkeleton { +class LoggerAppenderAdodb extends LoggerAppender { /** * Create the log table if it does not exists (optional). @@ -116,9 +107,9 @@ class LoggerAppenderAdodb extends LoggerAppenderSkeleton { * * @param string $name appender name */ - function LoggerAppenderDb($name) + function __construct($name) { - $this->LoggerAppenderSkeleton($name); + parent::__construct($name); } /** @@ -131,14 +122,13 @@ class LoggerAppenderAdodb extends LoggerAppenderSkeleton { { $this->db = &ADONewConnection($this->type); if (! $this->db->PConnect($this->host, $this->user, $this->password, $this->database)) { - LoggerLog::debug("LoggerAppenderAdodb::activateOptions() DB Connect Error [".$this->db->ErrorMsg()."]"); $this->db = null; $this->closed = true; $this->canAppend = false; return; } - $this->layout = LoggerLayout::factory('LoggerPatternLayout'); + $this->layout = LoggerReflectionUtils::createObject('LoggerLayoutPattern'); $this->layout->setConversionPattern($this->getSql()); // test if log table exists @@ -147,11 +137,9 @@ class LoggerAppenderAdodb extends LoggerAppenderSkeleton { if ($dbrs == false and $this->getCreateTable()) { $query = "CREATE TABLE {$this->table} (timestamp varchar(32),logger varchar(32),level varchar(32),message varchar(64),thread varchar(32),file varchar(64),line varchar(4) );"; - LoggerLog::debug("LoggerAppenderAdodb::activateOptions() creating table '{$this->table}'... using sql='$query'"); $result = $this->db->Execute($query); if (! $result) { - LoggerLog::debug("LoggerAppenderAdodb::activateOptions() error while creating '{$this->table}'. Error is ".$this->db->ErrorMsg()); $this->canAppend = false; return; } @@ -159,14 +147,9 @@ class LoggerAppenderAdodb extends LoggerAppenderSkeleton { $this->canAppend = true; } - function append($event) - { + function append($event) { if ($this->canAppend) { - $query = $this->layout->format($event); - - LoggerLog::debug("LoggerAppenderAdodb::append() query='$query'"); - $this->db->Execute($query); } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderConsole.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderConsole.php index b4d824e..6c36e28 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderConsole.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderConsole.php @@ -1,13 +1,13 @@ Optional parameter is {@link $target}. The default target is Stdout.

*

Note: Use this Appender with command-line php scripts. * On web scripts this appender has no effects.

- *

This appender requires a layout.

+ *

This appender requires a layout.

* - * @author Marco Vassura - * @author Knut Urdalen - * @version $Revision: 635069 $ + * @version $Revision: 772568 $ * @package log4php * @subpackage appender */ -class LoggerAppenderConsole extends LoggerAppenderSkeleton { - - const STDOUT = 'php://stdout'; - const STDERR = 'php://stderr'; +class LoggerAppenderConsole extends LoggerAppender { - /** - * Can be 'php://stdout' or 'php://stderr'. But it's better to use keywords STDOUT and STDERR (case insensitive). - * Default is STDOUT - * @var string - */ - protected $target = 'php://stdout'; - - /** - * @var boolean - * @access private - */ - protected $requiresLayout = true; + const STDOUT = 'php://stdout'; + const STDERR = 'php://stderr'; - /** - * @var mixed the resource used to open stdout/stderr - * @access private - */ - protected $fp = false; + /** + * Can be 'php://stdout' or 'php://stderr'. But it's better to use keywords STDOUT and STDERR (case insensitive). + * Default is STDOUT + * @var string + */ + private $target = self::STDOUT; + + /** + * @var boolean + * @access private + */ + protected $requiresLayout = true; - /** - * Set console target. - * @param mixed $value a constant or a string - */ - public function setTarget($value) { - $v = trim($value); - if ($v == self::STDOUT || strtoupper($v) == 'STDOUT') { - $this->target = self::STDOUT; - } elseif ($v == self::STDERR || strtoupper($v) == 'STDERR') { - $target = self::STDERR; - } else { - LoggerLog::debug("Invalid target. Using '".self::STDOUT."' by default."); - } - } + /** + * @var mixed the resource used to open stdout/stderr + * @access private + */ + protected $fp = false; - public function getTarget() { - return $this->target; - } + /** + * Set console target. + * @param mixed $value a constant or a string + */ + public function setTarget($value) { + $v = trim($value); + if ($v == self::STDOUT || strtoupper($v) == 'STDOUT') { + $this->target = self::STDOUT; + } elseif ($v == self::STDERR || strtoupper($v) == 'STDERR') { + $this->target = self::STDERR; + } + } - public function activateOptions() { - $this->fp = fopen($this->getTarget(), 'w'); - if($this->fp !== false && $this->layout !== null) { - fwrite($this->fp, $this->layout->getHeader()); - } - $this->closed = (bool)($this->fp === false); - } - - /** - * @see LoggerAppender::close() - */ - public function close() { - if ($this->fp && $this->layout !== null) { - fwrite($this->fp, $this->layout->getFooter()); - fclose($this->fp); - } - $this->closed = true; - } + public function activateOptions() { + $this->fp = fopen($this->target, 'w'); + if($this->fp !== false && $this->layout !== null) { + fwrite($this->fp, $this->layout->getHeader()); + } + $this->closed = (bool)($this->fp === false); + } + + /** + * @see LoggerAppender::close() + */ + public function close() { + if ($this->fp && $this->layout !== null) { + fwrite($this->fp, $this->layout->getFooter()); + fclose($this->fp); + } + $this->closed = true; + } - protected function append($event) { - if ($this->fp && $this->layout !== null) { - fwrite($this->fp, $this->layout->format($event)); - } - } + public function append($event) { + if ($this->fp && $this->layout !== null) { + fwrite($this->fp, $this->layout->format($event)); + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderDailyFile.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderDailyFile.php index 8a3a909..e8ab904 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderDailyFile.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderDailyFile.php @@ -1,13 +1,13 @@ * - * @author Abel Gonzalez - * @author Knut Urdalen - * @version $Revision: 635069 $ + * @version $Revision: 771699 $ * @package log4php * @subpackage appenders - */ + */ class LoggerAppenderDailyFile extends LoggerAppenderFile { - /** - * Format date. - * It follows the {@link PHP_MANUAL#date()} formatting rules and should always be set before {@link $file} param. - * @var string - */ - public $datePattern = "Ymd"; - - /** - * Sets date format for the file name. - * @param string $format a regular date() string format - */ - public function setDatePattern($format) { - $this->datePattern = $format; - } - - /** - * @return string returns date format for the filename - */ - public function getDatePattern() { - return $this->datePattern; - } - - /** - * The File property takes a string value which should be the name of the file to append to. - * Sets and opens the file where the log output will go. - * - * @see LoggerAppenderFile::setFile() - */ - public function setFile() { - $numargs = func_num_args(); - $args = func_get_args(); - - if ($numargs == 1 and is_string($args[0])) { - parent::setFile( sprintf((string)$args[0], date($this->getDatePattern())) ); - } elseif ($numargs == 2 and is_string($args[0]) and is_bool($args[1])) { - parent::setFile( sprintf((string)$args[0], date($this->getDatePattern())), $args[1] ); - } - } + /** + * Format date. + * It follows the {@link PHP_MANUAL#date()} formatting rules and should always be set before {@link $file} param. + * @var string + */ + public $datePattern = "Ymd"; + + /** + * Sets date format for the file name. + * @param string $format a regular date() string format + */ + public function setDatePattern($format) { + $this->datePattern = $format; + } + + /** + * @return string returns date format for the filename + */ + public function getDatePattern() { + return $this->datePattern; + } + + /** + * The File property takes a string value which should be the name of the file to append to. + * Sets and opens the file where the log output will go. + * + * @see LoggerAppenderFile::setFile() + */ + public function setFile() { + $numargs = func_num_args(); + $args = func_get_args(); + + if($numargs == 1 and is_string($args[0])) { + parent::setFile( sprintf((string)$args[0], date($this->getDatePattern())) ); + } else if ($numargs == 2 and is_string($args[0]) and is_bool($args[1])) { + parent::setFile( sprintf((string)$args[0], date($this->getDatePattern())), $args[1] ); + } + } } - diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderDb.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderDb.php deleted file mode 100644 index bf307cc..0000000 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderDb.php +++ /dev/null @@ -1,213 +0,0 @@ -This appender uses a table in a database to log events.

- *

Parameters are {@link $dsn}, {@link $createTable}, {@link table} and {@link $sql}.

- *

See examples in test directory.

- * - * @author Marco Vassura - * @version $Revision: 635069 $ - * @package log4php - * @subpackage appenders - * @since 0.3 - */ -class LoggerAppenderDb extends LoggerAppenderSkeleton { - - /** - * Create the log table if it does not exists (optional). - * @var boolean - */ - var $createTable = true; - - /** - * PEAR::Db Data source name. Read PEAR::Db for dsn syntax (mandatory). - * @var string - */ - var $dsn; - - /** - * A {@link LoggerPatternLayout} string used to format a valid insert query (mandatory). - * @var string - */ - var $sql; - - /** - * Table name to write events. Used only if {@link $createTable} is true. - * @var string - */ - var $table; - - /** - * @var object PEAR::Db instance - * @access private - */ - var $db = null; - - /** - * @var boolean used to check if all conditions to append are true - * @access private - */ - var $canAppend = true; - - /** - * @access private - */ - var $requiresLayout = false; - - /** - * Constructor. - * - * @param string $name appender name - */ - function LoggerAppenderDb($name) - { - $this->LoggerAppenderSkeleton($name); - } - - /** - * Setup db connection. - * Based on defined options, this method connects to db defined in {@link $dsn} - * and creates a {@link $table} table if {@link $createTable} is true. - * @return boolean true if all ok. - */ - function activateOptions() - { - $this->db = DB::connect($this->dsn); - - if (DB::isError($this->db)) { - LoggerLog::debug("LoggerAppenderDb::activateOptions() DB Connect Error [".$this->db->getMessage()."]"); - $this->db = null; - $this->closed = true; - $this->canAppend = false; - - } else { - - $this->layout = LoggerLayout::factory('LoggerPatternLayout'); - $this->layout->setConversionPattern($this->getSql()); - - // test if log table exists - $tableInfo = $this->db->tableInfo($this->table, $mode = null); - if (DB::isError($tableInfo) and $this->getCreateTable()) { - $query = "CREATE TABLE {$this->table} (timestamp varchar(32),logger varchar(32),level varchar(32),message varchar(64),thread varchar(32),file varchar(64),line varchar(4) );"; - - LoggerLog::debug("LoggerAppenderDb::activateOptions() creating table '{$this->table}'... using sql='$query'"); - - $result = $this->db->query($query); - if (DB::isError($result)) { - LoggerLog::debug("LoggerAppenderDb::activateOptions() error while creating '{$this->table}'. Error is ".$result->getMessage()); - $this->closed = true; - $this->canAppend = false; - return; - } - } - $this->canAppend = true; - $this->closed = false; - } - - } - - function append($event) - { - if ($this->canAppend) { - - $query = $this->layout->format($event); - - LoggerLog::debug("LoggerAppenderDb::append() query='$query'"); - - $this->db->query($query); - } - } - - function close() - { - if ($this->db !== null) - $this->db->disconnect(); - $this->closed = true; - } - - /** - * @return boolean - */ - function getCreateTable() - { - return $this->createTable; - } - - /** - * @return string the defined dsn - */ - function getDsn() - { - return $this->dsn; - } - - /** - * @return string the sql pattern string - */ - function getSql() - { - return $this->sql; - } - - /** - * @return string the table name to create - */ - function getTable() - { - return $this->table; - } - - function setCreateTable($flag) - { - $this->createTable = LoggerOptionConverter::toBoolean($flag, true); - } - - function setDsn($newDsn) - { - $this->dsn = $newDsn; - } - - function setSql($sql) - { - $this->sql = $sql; - } - - function setTable($table) - { - $this->table = $table; - } - -} - diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderEcho.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderEcho.php index 3819c21..b9dcf48 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderEcho.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderEcho.php @@ -1,13 +1,13 @@ This appender requires a layout.

+ *

This appender requires a layout.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771557 $ * @package log4php * @subpackage appenders */ -class LoggerAppenderEcho extends LoggerAppenderSkeleton { - - /** - * @access private - */ - var $requiresLayout = true; - - /** - * @var boolean used internally to mark first append - * @access private - */ - var $firstAppend = true; - - function activateOptions() - { - $this->closed = false; - return; - } - - function close() - { - if (!$this->firstAppend) - echo $this->layout->getFooter(); - $this->closed = true; - } +class LoggerAppenderEcho extends LoggerAppender { + /** boolean used internally to mark first append */ + private $firstAppend = true; + + public function __construct($name) { + parent::__construct($name); + $this->requiresLayout = true; + $this->firstAppend = true; + } + + public function activateOptions() { + $this->closed = false; + } + + public function close() { + if(!$this->firstAppend) { + echo $this->layout->getFooter(); + } + $this->closed = true; + } - function append($event) - { - LoggerLog::debug("LoggerAppenderEcho::append()"); - - if ($this->layout !== null) { - if ($this->firstAppend) { - echo $this->layout->getHeader(); - $this->firstAppend = false; - } - echo $this->layout->format($event); - } - } + public function append($event) { + if($this->layout !== null) { + if($this->firstAppend) { + echo $this->layout->getHeader(); + $this->firstAppend = false; + } + echo $this->layout->format($event); + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderFile.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderFile.php index 7df66aa..6a0f07f 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderFile.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderFile.php @@ -1,13 +1,13 @@ file), * {@link $append}. * - * @author Marco Vassura - * @author Knut Urdalen - * @version $Revision: 640255 $ + * @version $Revision: 771547 $ * @package log4php * @subpackage appenders */ -class LoggerAppenderFile extends LoggerAppenderSkeleton { +class LoggerAppenderFile extends LoggerAppender { - /** - * @var boolean if {@link $file} exists, appends events. - */ - private $append = true; - /** - * @var string the file name used to append events - */ + /** + * @var boolean if {@link $file} exists, appends events. + */ + private $append = true; + /** + * @var string the file name used to append events + */ protected $fileName; - /** - * @var mixed file resource - */ + /** + * @var mixed file resource + */ protected $fp = false; - + public function __construct($name) { parent::__construct($name); $this->requiresLayout = true; } - public function activateOptions() { - $fileName = $this->getFile(); - LoggerLog::debug("LoggerAppenderFile::activateOptions() opening file '{$fileName}'"); - $this->fp = fopen($fileName, ($this->getAppend()? 'a':'w')); - if ($this->fp) { - if ($this->getAppend()) - fseek($this->fp, 0, SEEK_END); - fwrite($this->fp, $this->layout->getHeader()); - $this->closed = false; - } else { - $this->closed = true; - } - } - - public function close() { - if($this->fp and $this->layout !== null) { - fwrite($this->fp, $this->layout->getFooter()); - } - - $this->closeFile(); - $this->closed = true; - } + public function activateOptions() { + $fileName = $this->getFile(); - /** - * Closes the previously opened file. - */ - public function closeFile() { - if ($this->fp) - fclose($this->fp); - } - - /** - * @return boolean - */ - public function getAppend() { - return $this->append; - } + if(!is_file($fileName)) { + $dir = dirname($fileName); + if(!is_dir($dir)) { + mkdir($dir, 0777, true); + } + } - /** - * @return string - */ - public function getFile() { - return $this->getFileName(); - } - - /** - * @return string - */ - public function getFileName() { - return $this->fileName; - } + $this->fp = fopen($fileName, ($this->getAppend()? 'a':'w')); + if($this->fp) { + if(flock($this->fp, LOCK_EX)) { + if($this->getAppend()) { + fseek($this->fp, 0, SEEK_END); + } + fwrite($this->fp, $this->layout->getHeader()); + $this->closed = false; + } else { // race condition, unable to lock file + // TODO: should we take some action in this case? + $this->closed = true; + } + } else { + $this->closed = true; + } + } + + public function close() { + if($this->fp and $this->layout !== null) { + fwrite($this->fp, $this->layout->getFooter()); + } + + $this->closeFile(); + $this->closed = true; + } + + /** + * Closes the previously opened file. + */ + public function closeFile() { + if($this->fp) { + fclose($this->fp); + } + } + + /** + * @return boolean + */ + public function getAppend() { + return $this->append; + } + + /** + * @return string + */ + public function getFile() { + return $this->getFileName(); + } + + /** + * @return string + */ + public function getFileName() { + return $this->fileName; + } - /** - * Close any previously opened file and call the parent's reset. - */ - public function reset() { - $this->closeFile(); - $this->fileName = null; - parent::reset(); - } + /** + * Close any previously opened file and call the parent's reset. + */ + public function reset() { + $this->closeFile(); + $this->fileName = null; + parent::reset(); + } - public function setAppend($flag) { - $this->append = LoggerOptionConverter::toBoolean($flag, true); - } + public function setAppend($flag) { + $this->append = LoggerOptionConverter::toBoolean($flag, true); + } - /** - * Sets and opens the file where the log output will go. - * - * This is an overloaded method. It can be called with: - * - setFile(string $fileName) to set filename. - * - setFile(string $fileName, boolean $append) to set filename and append. - */ - public function setFile() { - $numargs = func_num_args(); - $args = func_get_args(); + /** + * Sets and opens the file where the log output will go. + * + * This is an overloaded method. It can be called with: + * - setFile(string $fileName) to set filename. + * - setFile(string $fileName, boolean $append) to set filename and append. + */ + public function setFile() { + $numargs = func_num_args(); + $args = func_get_args(); - if ($numargs == 1 and is_string($args[0])) { - $this->setFileName($args[0]); - } elseif ($numargs >=2 and is_string($args[0]) and is_bool($args[1])) { - $this->setFile($args[0]); - $this->setAppend($args[1]); - } - } - - public function setFileName($fileName) { - $this->fileName = $fileName; - } + if($numargs == 1 and is_string($args[0])) { + $this->setFileName($args[0]); + } else if ($numargs >=2 and is_string($args[0]) and is_bool($args[1])) { + $this->setFile($args[0]); + $this->setAppend($args[1]); + } + } + + public function setFileName($fileName) { + $this->fileName = $fileName; + } - public function append($event) { - if ($this->fp and $this->layout !== null) { - LoggerLog::debug("LoggerAppenderFile::append()"); - fwrite($this->fp, $this->layout->format($event)); - } - } + public function append($event) { + if($this->fp and $this->layout !== null) { + fwrite($this->fp, $this->layout->format($event)); + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMail.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMail.php index 154980f..44efa62 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMail.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMail.php @@ -1,13 +1,13 @@ Parameters are {@link $from}, {@link $to}, {@link $subject}.

*

This appender requires a layout.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771547 $ * @package log4php * @subpackage appenders */ -class LoggerAppenderMail extends LoggerAppenderSkeleton { +class LoggerAppenderMail extends LoggerAppender { - /** - * @var string 'from' field - */ - var $from = null; + /** + * @var string 'from' field + */ + var $from = null; - /** - * @var string 'subject' field - */ - var $subject = 'Log4php Report'; - - /** - * @var string 'to' field - */ - var $to = null; + /** + * @var string 'subject' field + */ + var $subject = 'Log4php Report'; + + /** + * @var string 'to' field + */ + var $to = null; - /** - * @var string used to create mail body - * @access private - */ - var $body = ''; - - /** - * Constructor. - * - * @param string $name appender name - */ - public function __construct($name) { - parent::__construct($name); - $this->requiresLayout = true; - } + /** + * @var string used to create mail body + * @access private + */ + var $body = ''; + + /** + * Constructor. + * + * @param string $name appender name + */ + public function __construct($name) { + parent::__construct($name); + $this->requiresLayout = true; + } - public function activateOptions() { - $this->closed = false; - } - - public function close() { - $from = $this->from; - $to = $this->to; + public function activateOptions() { + $this->closed = false; + } + + public function close() { + $from = $this->from; + $to = $this->to; - if (!empty($this->body) and $from !== null and $to !== null and $this->layout !== null) { - $subject = $this->subject; - LoggerLog::debug("LoggerAppenderMail::close() sending mail from=[{$from}] to=[{$to}] subject=[{$subject}]"); - mail( - $to, $subject, - $this->layout->getHeader() . $this->body . $this->layout->getFooter(), - "From: {$from}\r\n" - ); - } - $this->closed = true; - } - - /** - * @return string - */ - function getFrom() - { - return $this->from; - } - - /** - * @return string - */ - function getSubject() - { - return $this->subject; - } + if(!empty($this->body) and $from !== null and $to !== null and $this->layout !== null) { + $subject = $this->subject; + mail( + $to, $subject, + $this->layout->getHeader() . $this->body . $this->layout->getFooter(), + "From: {$from}\r\n" + ); + } + $this->closed = true; + } + + /** + * @return string + */ + function getFrom() { + return $this->from; + } + + /** + * @return string + */ + function getSubject() { + return $this->subject; + } - /** - * @return string - */ - function getTo() - { - return $this->to; - } - - function setSubject($subject) - { - $this->subject = $subject; - } - - function setTo($to) - { - $this->to = $to; - } + /** + * @return string + */ + function getTo() { + return $this->to; + } + + function setSubject($subject) { + $this->subject = $subject; + } + + function setTo($to) { + $this->to = $to; + } - function setFrom($from) - { - $this->from = $from; - } + function setFrom($from) { + $this->from = $from; + } - function append($event) - { - if ($this->layout !== null) - $this->body .= $this->layout->format($event); - } + function append($event) { + if($this->layout !== null) { + $this->body .= $this->layout->format($event); + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMailEvent.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMailEvent.php index 8405fcb..d735fb3 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMailEvent.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderMailEvent.php @@ -1,13 +1,13 @@ Parameters are @@ -41,132 +31,143 @@ require_once(LOG4PHP_DIR . '/LoggerLog.php'); * {@link $subject} (optional).

*

A layout is required.

* - * @author Domenico Lordi - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771547 $ * @package log4php * @subpackage appenders */ -class LoggerAppenderMailEvent extends LoggerAppenderSkeleton { - - /** - * @var string 'from' field - */ - var $from = null; - - /** - * @var integer 'from' field - */ - var $port = 25; - - /** - * @var string hostname. - */ - var $smtpHost = null; - - /** - * @var string 'subject' field - */ - var $subject = ''; - - /** - * @var string 'to' field - */ - var $to = null; - - /** - * @access private - */ - var $requiresLayout = true; - - /** - * Constructor. - * - * @param string $name appender name - */ - function LoggerAppenderMailEvent($name) - { - $this->LoggerAppenderSkeleton($name); - } - - function activateOptions() - { - $this->closed = false; - } - - function close() - { - $this->closed = true; - } - - /** - * @return string - */ - function getFrom() { return $this->from; } - - /** - * @return integer - */ - function getPort() { return $this->port; } - - /** - * @return string - */ - function getSmtpHost() { return $this->smtpHost; } - - /** - * @return string - */ - function getSubject() { return $this->subject; } - - /** - * @return string - */ - function getTo() { return $this->to; } - - function setFrom($from) { $this->from = $from; } - function setPort($port) { $this->port = (int)$port; } - function setSmtpHost($smtpHost) { $this->smtpHost = $smtpHost; } - function setSubject($subject) { $this->subject = $subject; } - function setTo($to) { $this->to = $to; } - - function append($event) - { - $from = $this->getFrom(); - $to = $this->getTo(); - if (empty($from) or empty($to)) - return; - - $smtpHost = $this->getSmtpHost(); - $prevSmtpHost = ini_get('SMTP'); - if (!empty($smtpHost)) { - ini_set('SMTP', $smtpHost); - } else { - $smtpHost = $prevSmtpHost; - } - - $smtpPort = $this->getPort(); - $prevSmtpPort= ini_get('smtp_port'); - if ($smtpPort > 0 and $smtpPort < 65535) { - ini_set('smtp_port', $smtpPort); - } else { - $smtpPort = $prevSmtpPort; - } - - LoggerLog::debug( - "LoggerAppenderMailEvent::append()" . - ":from=[{$from}]:to=[{$to}]:smtpHost=[{$smtpHost}]:smtpPort=[{$smtpPort}]" - ); - - if (!@mail( $to, $this->getSubject(), - $this->layout->getHeader() . $this->layout->format($event) . $this->layout->getFooter($event), - "From: {$from}\r\n" - )) { - LoggerLog::debug("LoggerAppenderMailEvent::append() mail error"); - } - - ini_set('SMTP', $prevSmtpHost); - ini_set('smtp_port', $prevSmtpPort); - } +class LoggerAppenderMailEvent extends LoggerAppender { + + /** + * @var string 'from' field + */ + var $from = null; + + /** + * @var integer 'from' field + */ + var $port = 25; + + /** + * @var string hostname. + */ + var $smtpHost = null; + + /** + * @var string 'subject' field + */ + var $subject = ''; + + /** + * @var string 'to' field + */ + var $to = null; + + /** + * @access private + */ + var $requiresLayout = true; + + /** + * Constructor. + * + * @param string $name appender name + */ + public function __construct($name) { + parent::__construct($name); + } + + function activateOptions() { + $this->closed = false; + } + + function close() { + $this->closed = true; + } + + /** + * @return string + */ + function getFrom() { + return $this->from; + } + + /** + * @return integer + */ + function getPort() { + return $this->port; + } + + /** + * @return string + */ + function getSmtpHost() { + return $this->smtpHost; + } + + /** + * @return string + */ + function getSubject() { + return $this->subject; + } + + /** + * @return string + */ + function getTo() { + return $this->to; + } + + function setFrom($from) { + $this->from = $from; + } + + function setPort($port) { + $this->port = (int)$port; + } + + function setSmtpHost($smtpHost) { + $this->smtpHost = $smtpHost; + } + + function setSubject($subject) { + $this->subject = $subject; + } + + function setTo($to) { + $this->to = $to; + } + + function append($event) { + $from = $this->getFrom(); + $to = $this->getTo(); + if(empty($from) or empty($to)) { + return; + } + + $smtpHost = $this->getSmtpHost(); + $prevSmtpHost = ini_get('SMTP'); + if(!empty($smtpHost)) { + ini_set('SMTP', $smtpHost); + } else { + $smtpHost = $prevSmtpHost; + } + + $smtpPort = $this->getPort(); + $prevSmtpPort= ini_get('smtp_port'); + if($smtpPort > 0 and $smtpPort < 65535) { + ini_set('smtp_port', $smtpPort); + } else { + $smtpPort = $prevSmtpPort; + } + + @mail($to, $this->getSubject(), + $this->layout->getHeader() . $this->layout->format($event) . $this->layout->getFooter($event), + "From: {$from}\r\n"); + + ini_set('SMTP', $prevSmtpHost); + ini_set('smtp_port', $prevSmtpPort); + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderNull.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderNull.php index b94f89d..63f85cc 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderNull.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderNull.php @@ -1,13 +1,13 @@ closed = false; - } - - public function close() - { - $this->closed = true; - } - - /** - * Do nothing. - * How I Love it !! :) - * - * @param LoggerLoggingEvent $event - */ - protected function append($event) - { - LoggerLog::debug("LoggerAppenderNull::append()"); - } + protected $requiresLayout = false; + + public function __construct($name) { + parent::__construct($name); + } + + public function activateOptions() { + $this->closed = false; + } + + public function close() { + $this->closed = true; + } + + /** + * Do nothing. + * + * @param LoggerLoggingEvent $event + */ + public function append($event) { + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderPDO.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderPDO.php new file mode 100644 index 0000000..73916cd --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderPDO.php @@ -0,0 +1,203 @@ +This appender uses a table in a database to log events.

+ *

Parameters are {@link $host}, {@link $user}, {@link $password}, + * {@link $database}, {@link $createTable}, {@link $table} and {@link $sql}.

+ * + * @package log4php + * @subpackage appenders + * @since 2.0 + */ +class LoggerAppenderPDO extends LoggerAppender { + /** Create the log table if it does not exists (optional). */ + private $createTable = true; + + /** Database user name */ + private $user = ''; + + /** Database password */ + private $password = ''; + + /** DSN string for enabling a connection */ + private $dsn; + + /** A {@link LoggerPatternLayout} string used to format a valid insert query (mandatory) */ + private $sql; + + /** Table name to write events. Used only if {@link $createTable} is true. */ + private $table = 'log4php_log'; + + /** The instance */ + private $db = null; + + /** boolean used to check if all conditions to append are true */ + private $canAppend = true; + + /** + * Constructor. + * This apender doesn't require a layout. + * @param string $name appender name + */ + function __construct($name) { + parent::__construct($name); + $this->requiresLayout = false; + } + + /** + * Setup db connection. + * Based on defined options, this method connects to db defined in {@link $dsn} + * and creates a {@link $table} table if {@link $createTable} is true. + * @return boolean true if all ok. + * @throws a PDOException if the attempt to connect to the requested database fails. + */ + public function activateOptions() { + if($this->user === null) { + $this->db = new PDO($this->dsn); + } else if($this->password === null) { + $this->db = new PDO($this->dsn, $this->user); + } else { + $this->db = new PDO($this->dsn,$this->user,$this->password); + } + + // test if log table exists + $result = $this->db->query('select * from ' . $this->table . ' where 1 = 0'); + if ($result == false and $this->createTable) { + // TODO mysql syntax? + $query = "CREATE TABLE {$this->table} ( timestamp varchar(32)," . + "logger varchar(32)," . + "level varchar(32)," . + "message varchar(64)," . + "thread varchar(32)," . + "file varchar(64)," . + "line varchar(4) );"; + + $result = $this->db->query($query); + if (!$result) { + $this->canAppend = false; + return; + // TODO throw exception? + } + } + + if($this->sql == '' || $this->sql == null) { + $this->sql = "INSERT INTO $this->table ( timestamp, " . + "logger, " . + "level, " . + "message, " . + "thread, " . + "file, " . + "line" . + ") VALUES ('%d','%c','%p','%m','%t','%F','%L')"; + } + + $this->layout = LoggerReflectionUtils::createObject('LoggerLayoutPattern'); + $this->layout->setConversionPattern($this->sql); + $this->canAppend = true; + return true; + } + + /** + * Appends a new event to the database using the sql format. + */ + // TODO:should work with prepared statement + public function append($event) { + if ($this->canAppend) { + $query = $this->layout->format($event); + $this->db->exec($query); + } + } + + /** + * Closes the connection to the logging database + */ + public function close() { + if ($this->db !== null) { + $db = null; + } + $this->closed = true; + } + + /** + * Indicator if the logging table should be created on startup, + * if its not existing. + */ + public function setCreateTable($flag) { + $this->createTable = LoggerOptionConverter::toBoolean($flag, true); + } + + /** + * Sets the username for this connection. + * Defaults to '' + */ + function setUser($user) { + $this->user = $user; + } + + /** + * Sets the password for this connection. + * Defaults to '' + */ + public function setPassword($password) { + $this->password = $password; + } + + /** + * Sets the SQL string into which the event should be transformed. + * Defaults to: + * + * INSERT INTO $this->table + * ( timestamp, logger, level, message, thread, file, line) + * VALUES + * ('%d','%c','%p','%m','%t','%F','%L') + * + * It's not necessary to change this except you have customized logging' + */ + public function setSql($sql) { + $this->sql = $sql; + } + + /** + * Sets the tablename to which this appender should log. + * Defaults to log4php_log + */ + public function setTable($table) { + $this->table = $table; + } + + /** + * Sets the DSN string for this connection. In case of + * SQLite it could look like this: 'sqlite:appenders/pdotest.sqlite' + */ + public function setDSN($dsn) { + $this->dsn = $dsn; + } + + /** + * Sometimes databases allow only one connection to themselves in one thread. + * SQLite has this behaviour. In that case this handle is needed if the database + * must be checked for events + */ + public function getDatabaseHandle() { + return $this->db; + } +} + diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderPhp.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderPhp.php index 8c82ceb..40c9bcd 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderPhp.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderPhp.php @@ -1,13 +1,13 @@ Levels are mapped as follows:

@@ -37,34 +28,35 @@ require_once(LOG4PHP_DIR . '/LoggerLog.php'); * - WARN <= level < ERROR mapped to E_USER_WARNING * - level >= ERROR mapped to E_USER_ERROR * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771547 $ * @package log4php * @subpackage appenders */ -class LoggerAppenderPhp extends LoggerAppenderSkeleton { +class LoggerAppenderPhp extends LoggerAppender { - - public function activateOptions() { - $this->layout = LoggerLayout::factory('LoggerLayoutTTCC'); - $this->closed = false; - } + public function __construct($name) { + parent::__construct($name); + $this->requiresLayout = true; + } + + public function activateOptions() { + $this->closed = false; + } - public function close() { - $this->closed = true; - } + public function close() { + $this->closed = true; + } - public function append($event) { - if ($this->layout !== null) { - LoggerLog::debug("LoggerAppenderPhp::append()"); - $level = $event->getLevel(); - if ($level->isGreaterOrEqual(LoggerLevel::getLevelError())) { - trigger_error($this->layout->format($event), E_USER_ERROR); - } elseif ($level->isGreaterOrEqual(LoggerLevel::getLevelWarn())) { - trigger_error($this->layout->format($event), E_USER_WARNING); - } else { - trigger_error($this->layout->format($event), E_USER_NOTICE); - } - } - } + public function append($event) { + if($this->layout !== null) { + $level = $event->getLevel(); + if($level->isGreaterOrEqual(LoggerLevel::getLevelError())) { + trigger_error($this->layout->format($event), E_USER_ERROR); + } else if ($level->isGreaterOrEqual(LoggerLevel::getLevelWarn())) { + trigger_error($this->layout->format($event), E_USER_WARNING); + } else { + trigger_error($this->layout->format($event), E_USER_NOTICE); + } + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderRollingFile.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderRollingFile.php index 011067a..cbff808 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderRollingFile.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderRollingFile.php @@ -1,13 +1,13 @@ Contributors: Sergio Strampelli.

* - * @author Marco Vassura - * @version $Revision: 640254 $ + * @version $Revision: 771217 $ * @package log4php * @subpackage appenders */ class LoggerAppenderRollingFile extends LoggerAppenderFile { - /** - * Set the maximum size that the output file is allowed to reach - * before being rolled over to backup files. - * - *

In configuration files, the MaxFileSize option takes a - * long integer in the range 0 - 2^63. You can specify the value - * with the suffixes "KB", "MB" or "GB" so that the integer is - * interpreted being expressed respectively in kilobytes, megabytes - * or gigabytes. For example, the value "10KB" will be interpreted - * as 10240.

- *

The default maximum file size is 10MB.

- * - *

Note that MaxFileSize cannot exceed 2 GB.

- * - * @var integer - */ - var $maxFileSize = 10485760; - - /** - * Set the maximum number of backup files to keep around. - * - *

The MaxBackupIndex option determines how many backup - * files are kept before the oldest is erased. This option takes - * a positive integer value. If set to zero, then there will be no - * backup files and the log file will be truncated when it reaches - * MaxFileSize.

- *

There is one backup file by default.

- * - * @var integer - */ - var $maxBackupIndex = 1; - - /** - * @var string the filename expanded - * @access private - */ - var $expandedFileName = null; + /** + * Set the maximum size that the output file is allowed to reach + * before being rolled over to backup files. + * + *

In configuration files, the MaxFileSize option takes a + * long integer in the range 0 - 2^63. You can specify the value + * with the suffixes "KB", "MB" or "GB" so that the integer is + * interpreted being expressed respectively in kilobytes, megabytes + * or gigabytes. For example, the value "10KB" will be interpreted + * as 10240.

+ *

The default maximum file size is 10MB.

+ * + *

Note that MaxFileSize cannot exceed 2 GB.

+ * + * @var integer + */ + var $maxFileSize = 10485760; + + /** + * Set the maximum number of backup files to keep around. + * + *

The MaxBackupIndex option determines how many backup + * files are kept before the oldest is erased. This option takes + * a positive integer value. If set to zero, then there will be no + * backup files and the log file will be truncated when it reaches + * MaxFileSize.

+ *

There is one backup file by default.

+ * + * @var integer + */ + var $maxBackupIndex = 1; + + /** + * @var string the filename expanded + * @access private + */ + var $expandedFileName = null; - /** - * Constructor. - * - * @param string $name appender name - */ - public function __construct($name) { - parent::__construct($name); - } - - /** - * Returns the value of the MaxBackupIndex option. - * @return integer - */ - function getExpandedFileName() { - return $this->expandedFileName; - } + /** + * Constructor. + * + * @param string $name appender name + */ + public function __construct($name) { + parent::__construct($name); + } + + /** + * Returns the value of the MaxBackupIndex option. + * @return integer + */ + function getExpandedFileName() { + return $this->expandedFileName; + } - /** - * Returns the value of the MaxBackupIndex option. - * @return integer - */ - function getMaxBackupIndex() { - return $this->maxBackupIndex; - } + /** + * Returns the value of the MaxBackupIndex option. + * @return integer + */ + function getMaxBackupIndex() { + return $this->maxBackupIndex; + } - /** - * Get the maximum size that the output file is allowed to reach - * before being rolled over to backup files. - * @return integer - */ - function getMaximumFileSize() { - return $this->maxFileSize; - } + /** + * Get the maximum size that the output file is allowed to reach + * before being rolled over to backup files. + * @return integer + */ + function getMaximumFileSize() { + return $this->maxFileSize; + } - /** - * Implements the usual roll over behaviour. - * - *

If MaxBackupIndex is positive, then files File.1, ..., File.MaxBackupIndex -1 are renamed to File.2, ..., File.MaxBackupIndex. - * Moreover, File is renamed File.1 and closed. A new File is created to receive further log output. - * - *

If MaxBackupIndex is equal to zero, then the File is truncated with no backup files created. - */ - function rollOver() - { - // If maxBackups <= 0, then there is no file renaming to be done. - if($this->maxBackupIndex > 0) { - $fileName = $this->getExpandedFileName(); - // Delete the oldest file, to keep Windows happy. - $file = $fileName . '.' . $this->maxBackupIndex; - if (is_writable($file)) - unlink($file); - // Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3, 2} - for ($i = $this->maxBackupIndex - 1; $i >= 1; $i--) { - $file = $fileName . "." . $i; - if (is_readable($file)) { - $target = $fileName . '.' . ($i + 1); - rename($file, $target); - } - } - - // Rename fileName to fileName.1 - $target = $fileName . ".1"; - - $this->closeFile(); // keep windows happy. - - $file = $fileName; - rename($file, $target); - } - - $this->setFile($fileName, false); - unset($this->fp); - $this->activateOptions(); - } - - function setFileName($fileName) - { - $this->fileName = $fileName; - $this->expandedFileName = realpath($fileName); - LoggerLog::debug("LoggerAppenderRollingFile::setFileName():filename=[{$fileName}]:expandedFileName=[{$this->expandedFileName}]"); - } + /** + * Implements the usual roll over behaviour. + * + *

If MaxBackupIndex is positive, then files File.1, ..., File.MaxBackupIndex -1 are renamed to File.2, ..., File.MaxBackupIndex. + * Moreover, File is renamed File.1 and closed. A new File is created to receive further log output. + * + *

If MaxBackupIndex is equal to zero, then the File is truncated with no backup files created. + */ + function rollOver() { + // If maxBackups <= 0, then there is no file renaming to be done. + if($this->maxBackupIndex > 0) { + $fileName = $this->getExpandedFileName(); + // Delete the oldest file, to keep Windows happy. + $file = $fileName . '.' . $this->maxBackupIndex; + if(is_writable($file)) + unlink($file); + // Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3, 2} + for($i = $this->maxBackupIndex - 1; $i >= 1; $i--) { + $file = $fileName . "." . $i; + if(is_readable($file)) { + $target = $fileName . '.' . ($i + 1); + rename($file, $target); + } + } + + // Rename fileName to fileName.1 + $target = $fileName . ".1"; + + $this->closeFile(); // keep windows happy. + + $file = $fileName; + rename($file, $target); + } + + unset($this->fp); + $this->activateOptions(); + $this->setFile($fileName, false); + } + + function setFileName($fileName) { + $this->fileName = $fileName; + $this->expandedFileName = realpath($fileName); + } - /** - * Set the maximum number of backup files to keep around. - * - *

The MaxBackupIndex option determines how many backup - * files are kept before the oldest is erased. This option takes - * a positive integer value. If set to zero, then there will be no - * backup files and the log file will be truncated when it reaches - * MaxFileSize. - * - * @param mixed $maxBackups - */ - function setMaxBackupIndex($maxBackups) - { - if (is_numeric($maxBackups)) - $this->maxBackupIndex = abs((int)$maxBackups); - } + /** + * Set the maximum number of backup files to keep around. + * + *

The MaxBackupIndex option determines how many backup + * files are kept before the oldest is erased. This option takes + * a positive integer value. If set to zero, then there will be no + * backup files and the log file will be truncated when it reaches + * MaxFileSize. + * + * @param mixed $maxBackups + */ + function setMaxBackupIndex($maxBackups) { + if(is_numeric($maxBackups)) { + $this->maxBackupIndex = abs((int)$maxBackups); + } + } - /** - * Set the maximum size that the output file is allowed to reach - * before being rolled over to backup files. - * - * @param mixed $maxFileSize - * @see setMaxFileSize() - */ - function setMaximumFileSize($maxFileSize) - { - $this->setMaxFileSize($maxFileSize); - } + /** + * Set the maximum size that the output file is allowed to reach + * before being rolled over to backup files. + * + * @param mixed $maxFileSize + * @see setMaxFileSize() + */ + function setMaximumFileSize($maxFileSize) { + $this->setMaxFileSize($maxFileSize); + } - /** - * Set the maximum size that the output file is allowed to reach - * before being rolled over to backup files. - *

In configuration files, the MaxFileSize option takes an - * long integer in the range 0 - 2^63. You can specify the value - * with the suffixes "KB", "MB" or "GB" so that the integer is - * interpreted being expressed respectively in kilobytes, megabytes - * or gigabytes. For example, the value "10KB" will be interpreted - * as 10240. - * - * @param mixed $value - */ - function setMaxFileSize($value) - { - $maxFileSize = null; - $numpart = substr($value,0, strlen($value) -2); - $suffix = strtoupper(substr($value, -2)); + /** + * Set the maximum size that the output file is allowed to reach + * before being rolled over to backup files. + *

In configuration files, the MaxFileSize option takes an + * long integer in the range 0 - 2^63. You can specify the value + * with the suffixes "KB", "MB" or "GB" so that the integer is + * interpreted being expressed respectively in kilobytes, megabytes + * or gigabytes. For example, the value "10KB" will be interpreted + * as 10240. + * + * @param mixed $value + */ + function setMaxFileSize($value) { + $maxFileSize = null; + $numpart = substr($value,0, strlen($value) -2); + $suffix = strtoupper(substr($value, -2)); - switch ($suffix) { - case 'KB': $maxFileSize = (int)((int)$numpart * 1024); break; - case 'MB': $maxFileSize = (int)((int)$numpart * 1024 * 1024); break; - case 'GB': $maxFileSize = (int)((int)$numpart * 1024 * 1024 * 1024); break; - default: - if (is_numeric($value)) { - $maxFileSize = (int)$value; - } - } - - if ($maxFileSize === null) { - LoggerLog::debug("LoggerAppenderRollingFile::setMaxFileSize():value=[$value] wrong declaration"); - } else { - $this->maxFileSize = abs($maxFileSize); - } - } + switch($suffix) { + case 'KB': $maxFileSize = (int)((int)$numpart * 1024); break; + case 'MB': $maxFileSize = (int)((int)$numpart * 1024 * 1024); break; + case 'GB': $maxFileSize = (int)((int)$numpart * 1024 * 1024 * 1024); break; + default: + if(is_numeric($value)) { + $maxFileSize = (int)$value; + } + } + + if($maxFileSize === null) { + } else { + $this->maxFileSize = abs($maxFileSize); + } + } - /** - * @param LoggerLoggingEvent $event - */ - function append($event) - { - if ($this->fp) { - parent::append($event); - if (ftell($this->fp) > $this->getMaximumFileSize()) - $this->rollOver(); - } - } + /** + * @param LoggerLoggingEvent $event + */ + function append($event) { + if($this->fp) { + parent::append($event); + if(ftell($this->fp) > $this->getMaximumFileSize()) { + $this->rollOver(); + } + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSocket.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSocket.php index 75bb930..6dddeaa 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSocket.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSocket.php @@ -1,13 +1,13 @@ false. - */ - var $log4jNamespace = false; + /** + * @var mixed socket connection resource + * @access private + */ + var $sp = false; + + /** + * Target host. On how to define remote hostaname see + * {@link PHP_MANUAL#fsockopen} + * @var string + */ + var $remoteHost = ''; + + /** + * @var integer the network port. + */ + var $port = 4446; + + /** + * @var boolean get event's location info. + */ + var $locationInfo = false; + + /** + * @var integer connection timeout + */ + var $timeout = 30; + + /** + * @var boolean output events via {@link LoggerXmlLayout} + */ + var $useXml = false; + + /** + * @var boolean forward this option to {@link LoggerXmlLayout}. + * Ignored if {@link $useXml} is false. + */ + var $log4jNamespace = false; - /** - * @var LoggerXmlLayout - * @access private - */ - var $xmlLayout = null; - - /** - * Create a socket connection using defined parameters - */ - public function activateOptions() { - LoggerLog::debug("LoggerAppenderSocket::activateOptions() creating a socket..."); - $errno = 0; - $errstr = ''; - $this->sp = @fsockopen($this->getRemoteHost(), $this->getPort(), $errno, $errstr, $this->getTimeout()); - if ($errno) { - LoggerLog::debug("LoggerAppenderSocket::activateOptions() socket error [$errno] $errstr"); - $this->closed = true; - } else { - LoggerLog::debug("LoggerAppenderSocket::activateOptions() socket created [".$this->sp."]"); - if ($this->getUseXml()) { - $this->xmlLayout = LoggerLayout::factory('LoggerXmlLayout'); - if ($this->xmlLayout === null) { - LoggerLog::debug("LoggerAppenderSocket::activateOptions() useXml is true but layout is null"); - $this->setUseXml(false); - } else { - $this->xmlLayout->setLocationInfo($this->getLocationInfo()); - $this->xmlLayout->setLog4jNamespace($this->getLog4jNamespace()); - $this->xmlLayout->activateOptions(); - } - } - $this->closed = false; - } - } - - public function close() { - fclose($this->sp); - $this->closed = true; - } + /** + * @var LoggerXmlLayout + * @access private + */ + var $xmlLayout = null; + + /** + * Create a socket connection using defined parameters + */ + public function activateOptions() { + $errno = 0; + $errstr = ''; + $this->sp = @fsockopen($this->getRemoteHost(), $this->getPort(), $errno, $errstr, $this->getTimeout()); + if($errno) { + $this->closed = true; + } else { + if($this->getUseXml()) { + $this->xmlLayout = LoggerReflectionUtils::createObject('LoggerXmlLayout'); + if($this->xmlLayout === null) { + $this->setUseXml(false); + } else { + $this->xmlLayout->setLocationInfo($this->getLocationInfo()); + $this->xmlLayout->setLog4jNamespace($this->getLog4jNamespace()); + $this->xmlLayout->activateOptions(); + } + } + $this->closed = false; + } + } + + public function close() { + fclose($this->sp); + $this->closed = true; + } - /** - * @return string - */ - public function getHostname() { - return $this->getRemoteHost(); - } - - /** - * @return boolean - */ - public function getLocationInfo() { - return $this->locationInfo; - } - - /** - * @return boolean - */ - public function getLog4jNamespace() { - return $this->log4jNamespace; - } + /** + * @return string + */ + public function getHostname() { + return $this->getRemoteHost(); + } + + /** + * @return boolean + */ + public function getLocationInfo() { + return $this->locationInfo; + } + + /** + * @return boolean + */ + public function getLog4jNamespace() { + return $this->log4jNamespace; + } - /** - * @return integer - */ - public function getPort() { - return $this->port; - } - - public function getRemoteHost() { - return $this->remoteHost; - } - - /** - * @return integer - */ - public function getTimeout() { - return $this->timeout; - } - - /** - * @var boolean - */ - public function getUseXml() { - return $this->useXml; - } - - public function reset() { - $this->close(); - parent::reset(); - } + /** + * @return integer + */ + public function getPort() { + return $this->port; + } + + public function getRemoteHost() { + return $this->remoteHost; + } + + /** + * @return integer + */ + public function getTimeout() { + return $this->timeout; + } + + /** + * @var boolean + */ + public function getUseXml() { + return $this->useXml; + } + + public function reset() { + $this->close(); + parent::reset(); + } - /** - * @param mixed - */ - public function setLocationInfo($flag) { - $this->locationInfo = LoggerOptionConverter::toBoolean($flag, $this->getLocationInfo()); - } + /** + * @param mixed + */ + public function setLocationInfo($flag) { + $this->locationInfo = LoggerOptionConverter::toBoolean($flag, $this->getLocationInfo()); + } - /** - * @param mixed - */ - public function setLog4jNamespace($flag) { - $this->log4jNamespace = LoggerOptionConverter::toBoolean($flag, $this->getLog4jNamespace()); - } - - /** - * @param integer - */ - public function setPort($port) { - $port = LoggerOptionConverter::toInt($port, 0); - if ($port > 0 and $port < 65535) - $this->port = $port; - } - - /** - * @param string - */ - public function setRemoteHost($hostname) { - $this->remoteHost = $hostname; - } - - /** - * @param integer - */ - public function setTimeout($timeout) { - $this->timeout = LoggerOptionConverter::toInt($timeout, $this->getTimeout()); - } - - /** - * @param mixed - */ - public function setUseXml($flag) { - $this->useXml = LoggerOptionConverter::toBoolean($flag, $this->getUseXml()); - } + /** + * @param mixed + */ + public function setLog4jNamespace($flag) { + $this->log4jNamespace = LoggerOptionConverter::toBoolean($flag, $this->getLog4jNamespace()); + } + + /** + * @param integer + */ + public function setPort($port) { + $port = LoggerOptionConverter::toInt($port, 0); + if($port > 0 and $port < 65535) { + $this->port = $port; + } + } + + /** + * @param string + */ + public function setRemoteHost($hostname) { + $this->remoteHost = $hostname; + } + + /** + * @param integer + */ + public function setTimeout($timeout) { + $this->timeout = LoggerOptionConverter::toInt($timeout, $this->getTimeout()); + } + + /** + * @param mixed + */ + public function setUseXml($flag) { + $this->useXml = LoggerOptionConverter::toBoolean($flag, $this->getUseXml()); + } - /** - * @param LoggerLoggingEvent - */ - public function append($event) { - if ($this->sp) { - - LoggerLog::debug("LoggerAppenderSocket::append()"); - - if ($this->getLocationInfo()) - $event->getLocationInformation(); - - if (!$this->getUseXml()) { - $sEvent = serialize($event); - fwrite($this->sp, $sEvent, strlen($sEvent)); - } else { - fwrite($this->sp, $this->xmlLayout->format($event)); - } + /** + * @param LoggerLoggingEvent + */ + public function append($event) { + if($this->sp) { + if($this->getLocationInfo()) { + $event->getLocationInformation(); + } + + if(!$this->getUseXml()) { + $sEvent = serialize($event); + fwrite($this->sp, $sEvent, strlen($sEvent)); + } else { + fwrite($this->sp, $this->xmlLayout->format($event)); + } - // not sure about it... - fflush($this->sp); - } - } + // not sure about it... + fflush($this->sp); + } + } } - diff --git a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSyslog.php b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSyslog.php index 04d68eb..2513716 100644 --- a/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSyslog.php +++ b/thirdparty/apache-log4php/src/main/php/appenders/LoggerAppenderSyslog.php @@ -1,13 +1,13 @@ WARN > level >= INFO to LOG_INFO * - INFO > level >= DEBUG to LOG_DEBUG * - * @author VxR - * @version $Revision: 635069 $ + * @version $Revision: 771547 $ * @package log4php * @subpackage appenders */ -class LoggerAppenderSyslog extends LoggerAppenderSkeleton { - - /** - * The ident string is added to each message. Typically the name of your application. - * - * @var string Ident for your application - */ - private $_ident = "Log4PHP Syslog-Event"; +class LoggerAppenderSyslog extends LoggerAppender { + + /** + * The ident string is added to each message. Typically the name of your application. + * + * @var string Ident for your application + */ + private $_ident = "Log4PHP Syslog-Event"; + + /** + * The priority parameter value indicates the level of importance of the message. + * It is passed on to the Syslog daemon. + * + * @var int Syslog priority + */ + private $_priority; + + /** + * The option used when generating a log message. + * It is passed on to the Syslog daemon. + * + * @var int Syslog priority + */ + private $_option; + + /** + * The facility value indicates the source of the message. + * It is passed on to the Syslog daemon. + * + * @var const int Syslog facility + */ + private $_facility; + + /** + * If it is necessary to define logging priority in the .properties-file, + * set this variable to "true". + * + * @var const int value indicating whether the priority of the message is defined in the .properties-file + * (or properties-array) + */ + private $_overridePriority; + + public function __construct($name) { + parent::__construct($name); + $this->requiresLayout = true; + } - /** - * The priority parameter value indicates the level of importance of the message. - * It is passed on to the Syslog daemon. - * - * @var int Syslog priority - */ - private $_priority; - - /** - * The option used when generating a log message. - * It is passed on to the Syslog daemon. - * - * @var int Syslog priority - */ - private $_option; - - /** - * The facility value indicates the source of the message. - * It is passed on to the Syslog daemon. - * - * @var const int Syslog facility - */ - private $_facility; - - /** - * If it is necessary to define logging priority in the .properties-file, - * set this variable to "true". - * - * @var const int value indicating whether the priority of the message is defined in the .properties-file - * (or properties-array) - */ - private $_overridePriority; + /** + * Set the ident of the syslog message. + * + * @param string Ident + */ + public function setIdent($ident) { + $this->_ident = $ident; + } - /** - * Set the ident of the syslog message. - * - * @param string Ident - */ - public function setIdent($ident) { - $this->_ident = $ident; - } + /** + * Set the priority value for the syslog message. + * + * @param const int Priority + */ + public function setPriority($priority) { + $this->_priority = $priority; + } + + + /** + * Set the facility value for the syslog message. + * + * @param const int Facility + */ + public function setFacility($facility) { + $this->_facility = $facility; + } + + /** + * If the priority of the message to be sent can be defined by a value in the properties-file, + * set parameter value to "true". + * + * @param bool Override priority + */ + public function setOverridePriority($overridePriority) { + $this->_overridePriority = $overridePriority; + } + + /** + * Set the option value for the syslog message. + * This value is used as a parameter for php openlog() + * and passed on to the syslog daemon. + * + * @param string $option + */ + public function setOption($option) { + $this->_option = $option; + } + + public function activateOptions() { + define_syslog_variables(); + $this->closed = false; + } - /** - * Set the priority value for the syslog message. - * - * @param const int Priority - */ - public function setPriority($priority) { - $this->_priority = $priority; - } - - - /** - * Set the facility value for the syslog message. - * - * @param const int Facility - */ - public function setFacility($facility) { - $this->_facility = $facility; - } - - /** - * If the priority of the message to be sent can be defined by a value in the properties-file, - * set parameter value to "true". - * - * @param bool Override priority - */ - public function setOverridePriority($overridePriority) { - $this->_overridePriority = $overridePriority; - } - - /** - * Set the option value for the syslog message. - * This value is used as a parameter for php openlog() - * and passed on to the syslog daemon. - * - * @param string $option - */ - public function setOption($option) { - $this->_option = $option; - } - - - public function activateOptions() { - define_syslog_variables(); - $this->closed = false; - } + public function close() { + closelog(); + $this->closed = true; + } - public function close() { - closelog(); - $this->closed = true; - } + public function append($event) { - public function append($event) { + if($this->_option == NULL){ + $this->_option = LOG_PID | LOG_CONS; + } + + // Attach the process ID to the message, use the facility defined in the .properties-file + openlog($this->_ident, $this->_option, $this->_facility); + + $level = $event->getLevel(); + if($this->layout === null) { + $message = $event->getRenderedMessage(); + } else { + $message = $this->layout->format($event); + } - if($this->_option == NULL){ - $this->_option = LOG_PID | LOG_CONS; - } - - // Attach the process ID to the message, use the facility defined in the .properties-file - openlog($this->_ident, $this->_option, $this->_facility); - - $level = $event->getLevel(); - $message = $event->getRenderedMessage(); - - // If the priority of a syslog message can be overridden by a value defined in the properties-file, - // use that value, else use the one that is defined in the code. - if($this->_overridePriority){ - syslog($this->_priority, $message); - } else { - if ($level->isGreaterOrEqual(LoggerLevel::getLevelFatal())) { - syslog(LOG_ALERT, $message); - } elseif ($level->isGreaterOrEqual(LoggerLevel::getLevelError())) { - syslog(LOG_ERR, $message); - } elseif ($level->isGreaterOrEqual(LoggerLevel::getLevelWarn())) { - syslog(LOG_WARNING, $message); - } elseif ($level->isGreaterOrEqual(LoggerLevel::getLevelInfo())) { - syslog(LOG_INFO, $message); - } elseif ($level->isGreaterOrEqual(LoggerLevel::getLevelDebug())) { - syslog(LOG_DEBUG, $message); - } - } - closelog(); - } + // If the priority of a syslog message can be overridden by a value defined in the properties-file, + // use that value, else use the one that is defined in the code. + if($this->_overridePriority){ + syslog($this->_priority, $message); + } else { + if($level->isGreaterOrEqual(LoggerLevel::getLevelFatal())) { + syslog(LOG_ALERT, $message); + } else if ($level->isGreaterOrEqual(LoggerLevel::getLevelError())) { + syslog(LOG_ERR, $message); + } else if ($level->isGreaterOrEqual(LoggerLevel::getLevelWarn())) { + syslog(LOG_WARNING, $message); + } else if ($level->isGreaterOrEqual(LoggerLevel::getLevelInfo())) { + syslog(LOG_INFO, $message); + } else if ($level->isGreaterOrEqual(LoggerLevel::getLevelDebug())) { + syslog(LOG_DEBUG, $message); + } + } + closelog(); + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerBasicConfigurator.php b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorBasic.php index 359591f..f12e542 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerBasicConfigurator.php +++ b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorBasic.php @@ -1,13 +1,13 @@ For file based configuration see {@link LoggerPropertyConfigurator}. - *

For XML based configuration see {@link LoggerDOMConfigurator}. + *

For file based configuration see {@link LoggerConfiguratorIni}. + *

For XML based configuration see {@link LoggerConfiguratorXml}. * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771742 $ * @package log4php */ -class LoggerBasicConfigurator implements LoggerConfigurator { +class LoggerConfiguratorBasic implements LoggerConfigurator { - /** - * Add a {@link LoggerAppenderConsole} that uses - * the {@link LoggerLayoutTTCC} to the root category. - * - * @param string $url not used here - */ - public static function configure($url = null) - { - $root = LoggerManager::getRootLogger(); - $appender = new LoggerAppenderConsole('A1'); - $appender->setLayout( new LoggerLayoutTTCC() ); - $root->addAppender($appender); - } + /** + * Add a {@link LoggerAppenderConsole} that uses + * the {@link LoggerLayoutTTCC} to the root category. + * + * @param string $url not used here + */ + public static function configure($url = null) { + $root = LoggerManager::getRootLogger(); + $appender = new LoggerAppenderConsole('A1'); + $appender->setLayout( new LoggerLayoutTTCC() ); + $root->addAppender($appender); + } - /** - * Reset the default hierarchy to its default. - * It is equivalent to - * - * LoggerManager::resetConfiguration(); - * - * - * @see LoggerHierarchy::resetConfiguration() - * @static - */ - public static function resetConfiguration() - { - LoggerManager::resetConfiguration(); - } + /** + * Reset the default hierarchy to its default. + * It is equivalent to + * + * LoggerManager::resetConfiguration(); + * + * + * @see LoggerHierarchy::resetConfiguration() + * @static + */ + public static function resetConfiguration() { + LoggerManager::resetConfiguration(); + } } diff --git a/thirdparty/apache-log4php/src/main/php/LoggerPropertyConfigurator.php b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorIni.php index 011f23b..440e52f 100644 --- a/thirdparty/apache-log4php/src/main/php/LoggerPropertyConfigurator.php +++ b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorIni.php @@ -1,13 +1,13 @@ It is sometimes useful to see how log4php is reading configuration * files. You can enable log4php internal logging by defining the * log4php.debug variable.

* - *

The LoggerPropertyConfigurator does not handle the - * advanced configuration features supported by the {@link LoggerDOMConfigurator} - * such as support for {@link LoggerFilter}, - custom {@link LoggerErrorHandlers}, nested appenders such as the - {@link Logger AsyncAppender}, + *

The LoggerConfiguratorIni does not handle the + * advanced configuration features supported by the {@link LoggerConfiguratorXml} + * such as support for {@link LoggerFilter}, + custom {@link LoggerErrorHandlers}, nested appenders such as the + {@link Logger AsyncAppender}, * etc. - * + * *

All option values admit variable substitution. The * syntax of variable substitution is similar to that of Unix * shells. The string between an opening "${" and @@ -87,7 +71,7 @@ define('LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME', "root"); * /home/xyz. See {@link LoggerOptionConverter::getSystemProperty()} * for details.

* - *

Please note that boolean values should be quoted otherwise the default + *

Please note that boolean values should be quoted otherwise the default * value will be chosen. E.g.: * * // Does *not* work. Will always result in default value @@ -98,576 +82,489 @@ define('LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME', "root"); * *

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 784933 $ * @package log4php - * @since 0.5 + * @subpackage configurators + * @since 0.5 */ -class LoggerPropertyConfigurator implements LoggerConfigurator { - - /** - * @var LoggerFactory - */ - var $loggerFactory = null; - - /** - * Constructor - */ - public function LoggerPropertyConfigurator() { - $this->loggerFactory = new LoggerDefaultCategoryFactory(); - } - - /** - * Configure the default repository using the resource pointed by url. - * Url is any valid resurce as defined in {@link PHP_MANUAL#file} function. - * Note that the resource will be search with use_include_path parameter - * set to "1". - * - * @param string $url - * @return boolean configuration result - * @static - */ - public static function configure($url = '') { - $configurator = new LoggerPropertyConfigurator(); - $repository =& LoggerManager::getLoggerRepository(); - return $configurator->doConfigure($url, $repository); - } - - /** - * Read configuration from a file. - * - *

The function {@link PHP_MANUAL#parse_ini_file} is used to read the - * file.

- * - * The existing configuration is not cleared nor reset. - * If you require a different behavior, then call - * {@link LoggerManager::resetConfiguration()} - * method before calling {@link doConfigure()}. - * - *

The configuration file consists of statements in the format - * key=value. The syntax of different configuration - * elements are discussed below. - * - *

Repository-wide threshold

- * - *

The repository-wide threshold filters logging requests by level - * regardless of logger. The syntax is: - * - *

-     * log4php.threshold=[level]
-     * 
- * - *

The level value can consist of the string values OFF, FATAL, - * ERROR, WARN, INFO, DEBUG, ALL or a custom level value. A - * custom level value can be specified in the form - * level#classname. By default the repository-wide threshold is set - * to the lowest possible value, namely the level ALL. - *

- * - * - *

Appender configuration

- * - *

Appender configuration syntax is:

- *
-     * ; For appender named appenderName, set its class.
-     * ; Note: The appender name can contain dots.
-     * log4php.appender.appenderName=name_of_appender_class
-     *
-     * ; Set appender specific options.
-     *
-     * log4php.appender.appenderName.option1=value1
-     * log4php.appender.appenderName.optionN=valueN
-     * 
- * - * For each named appender you can configure its {@link LoggerLayout}. The - * syntax for configuring an appender's layout is: - *
-     * log4php.appender.appenderName.layout=name_of_layout_class
-     * log4php.appender.appenderName.layout.option1=value1
-     *  ....
-     * log4php.appender.appenderName.layout.optionN=valueN
-     * 
- * - *

Configuring loggers

- * - *

The syntax for configuring the root logger is: - *

-     * log4php.rootLogger=[level], appenderName, appenderName, ...
-     * 
- * - *

This syntax means that an optional level can be - * supplied followed by appender names separated by commas. - * - *

The level value can consist of the string values OFF, FATAL, - * ERROR, WARN, INFO, DEBUG, ALL or a custom level value. A - * custom level value can be specified in the form

- * - *
level#classname
- * - *

If a level value is specified, then the root level is set - * to the corresponding level. If no level value is specified, - * then the root level remains untouched. - * - *

The root logger can be assigned multiple appenders. - * - *

Each appenderName (separated by commas) will be added to - * the root logger. The named appender is defined using the - * appender syntax defined above. - * - *

For non-root categories the syntax is almost the same: - *

-     * log4php.logger.logger_name=[level|INHERITED|NULL], appenderName, appenderName, ...
-     * 
- * - *

The meaning of the optional level value is discussed above - * in relation to the root logger. In addition however, the value - * INHERITED can be specified meaning that the named logger should - * inherit its level from the logger hierarchy.

- * - *

If no level value is supplied, then the level of the - * named logger remains untouched.

- * - *

By default categories inherit their level from the - * hierarchy. However, if you set the level of a logger and later - * decide that that logger should inherit its level, then you should - * specify INHERITED as the value for the level value. NULL is a - * synonym for INHERITED.

- * - *

Similar to the root logger syntax, each appenderName - * (separated by commas) will be attached to the named logger.

- * - *

See the appender additivity rule in the user manual for - * the meaning of the additivity flag. - * - *

ObjectRenderers

- * - *

You can customize the way message objects of a given type are - * converted to String before being logged. This is done by - * specifying a {@link LoggerObjectRenderer} - * for the object type would like to customize.

- * - *

The syntax is: - * - *

-     * log4php.renderer.name_of_rendered_class=name_of_rendering.class
-     * 
- * - * As in, - *
-     * log4php.renderer.myFruit=myFruitRenderer
-     * 
- * - *

Logger Factories

- * - * The usage of custom logger factories is discouraged and no longer - * documented. - * - *

Example

- * - *

An example configuration is given below. Other configuration - * file examples are given in the tests folder. - * - *

-     * ; Set options for appender named "A1".
-     * ; Appender "A1" will be a LoggerAppenderSyslog
-     * log4php.appender.A1=LoggerAppenderSyslog
-     *
-     * ; The syslog daemon resides on www.abc.net
-     * log4php.appender.A1.ident=log4php-test
-     *
-     * ; A1's layout is a LoggerPatternLayout, using the conversion pattern
-     * ; %r %-5p %c{2} %M.%L %x - %m%n. Thus, the log output will
-     * ; include the relative time since the start of the application in
-     * ; milliseconds, followed by the level of the log request,
-     * ; followed by the two rightmost components of the logger name,
-     * ; followed by the callers method name, followed by the line number,
-     * ; the nested disgnostic context and finally the message itself.
-     * ; Refer to the documentation of LoggerPatternLayout} for further information
-     * ; on the syntax of the ConversionPattern key.
-     * log4php.appender.A1.layout=LoggerPatternLayout
-     * log4php.appender.A1.layout.ConversionPattern="%-4r %-5p %c{2} %M.%L %x - %m%n"
-     *
-     * ; Set options for appender named "A2"
-     * ; A2 should be a LoggerAppenderRollingFile, with maximum file size of 10 MB
-     * ; using at most one backup file. A2's layout is TTCC, using the
-     * ; ISO8061 date format with context printing enabled.
-     * log4php.appender.A2=LoggerAppenderRollingFile
-     * log4php.appender.A2.MaxFileSize=10MB
-     * log4php.appender.A2.MaxBackupIndex=1
-     * log4php.appender.A2.layout=LoggerLayoutTTCC
-     * log4php.appender.A2.layout.ContextPrinting="true"
-     * log4php.appender.A2.layout.DateFormat="%c"
-     *
-     * ; Root logger set to DEBUG using the A2 appender defined above.
-     * log4php.rootLogger=DEBUG, A2
-     *
-     * ; Logger definitions:
-     * ; The SECURITY logger inherits is level from root. However, it's output
-     * ; will go to A1 appender defined above. It's additivity is non-cumulative.
-     * log4php.logger.SECURITY=INHERIT, A1
-     * log4php.additivity.SECURITY=false
-     *
-     * ; Only warnings or above will be logged for the logger "SECURITY.access".
-     * ; Output will go to A1.
-     * log4php.logger.SECURITY.access=WARN
-     *
-     *
-     * ; The logger "class.of.the.day" inherits its level from the
-     * ; logger hierarchy.  Output will go to the appender's of the root
-     * ; logger, A2 in this case.
-     * log4php.logger.class.of.the.day=INHERIT
-     * 
- * - *

Refer to the setOption method in each Appender and - * Layout for class specific options.

- * - *

Use the ";" character at the - * beginning of a line for comments.

- * - * @param string $url The name of the configuration file where the - * configuration information is stored. - * @param LoggerHierarchy &$repository the repository to apply the configuration - */ - function doConfigure($url, &$repository) - { - $properties = @parse_ini_file($url); - if ($properties === false) { - LoggerLog::warn("LoggerPropertyConfigurator::doConfigure() cannot load '$url' configuration."); - return false; - } - return $this->doConfigureProperties($properties, $repository); - } - - - /** - * Read configuration options from properties. - * - * @see doConfigure(). - * @param array $properties - * @param LoggerHierarchy &$hierarchy - */ - function doConfigureProperties($properties, &$hierarchy) - { - $value = null; - - if (isset($properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_DEBUG_KEY])) - { - $value = @$properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_DEBUG_KEY]; - } - - if (!empty($value)) { - LoggerLog::internalDebugging(LoggerOptionConverter::toBoolean($value, LoggerLog::internalDebugging())); - } - - $thresholdStr = ''; - if (isset($properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_THRESHOLD_PREFIX])) - { - $thresholdStr = @$properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_THRESHOLD_PREFIX]; - } - $hierarchy->setThreshold(LoggerOptionConverter::toLevel($thresholdStr, LoggerLevel::getLevelAll())); - - $this->configureRootCategory($properties, $hierarchy); - $this->configureLoggerFactory($properties); - $this->parseCatsAndRenderers($properties, $hierarchy); - - LoggerLog::debug("LoggerPropertyConfigurator::doConfigureProperties() Finished configuring."); - - return true; - } - - // -------------------------------------------------------------------------- - // Internal stuff - // -------------------------------------------------------------------------- - - /** - * Check the provided Properties object for a - * {@link LoggerFactory} entry specified by - * {@link LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY}. - * - * If such an entry exists, an attempt is made to create an instance using - * the default constructor. - * This instance is used for subsequent Category creations - * within this configurator. - * - * @see parseCatsAndRenderers() - * @param array $props array of properties - */ - function configureLoggerFactory($props) - { - $factoryFqcn = null; - if (isset($props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY])) - { - $factoryFqcn = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY]; - } - if(!empty($factoryFqcn)) { - $factoryClassName = basename($factoryFqcn); - LoggerLog::debug( - "LoggerPropertyConfigurator::configureLoggerFactory() Trying to load factory [" . - $factoryClassName . - "]." - ); - - if (!class_exists($factoryClassName)) - @include_once("{$factoryFqcn}.php"); - if (class_exists($factoryClassName)) { - $loggerFactory = new $factoryClassName(); - } else { - LoggerLog::debug( - "LoggerPropertyConfigurator::configureLoggerFactory() Unable to load factory [" . - $factoryClassName . - "]. Using default." - ); - $loggerFactory = $this->loggerFactory; - } - - LoggerLog::debug( - "LoggerPropertyConfigurator::configureLoggerFactory() ". - "Setting properties for category factory [" . get_class($loggerFactory) . "]." - ); - - LoggerPropertySetter::setPropertiesByObject($loggerFactory, $props, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_FACTORY_PREFIX . "."); - } - } - - /** - * @param array $props array of properties - * @param LoggerHierarchy &$hierarchy - */ - function configureRootCategory($props, &$hierarchy) - { - $effectivePrefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_LOGGER_PREFIX; - $value = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_LOGGER_PREFIX]; - - if(empty($value)) { - $value = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_CATEGORY_PREFIX]; - $effectivePrefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_CATEGORY_PREFIX; - } - - if (empty($value)) { - LoggerLog::debug( - "LoggerPropertyConfigurator::configureRootCategory() ". - "Could not find root logger information. Is this OK?" - ); - } else { - $root = $hierarchy->getRootLogger(); - // synchronized(root) { - $this->parseCategory( - $props, - $root, - $effectivePrefix, - LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME, - $value - ); - // } - } - } - - /** - * Parse non-root elements, such non-root categories and renderers. - * - * @param array $props array of properties - * @param LoggerHierarchy &$hierarchy - */ - function parseCatsAndRenderers($props, &$hierarchy) - { - while(list($key,$value) = each($props)) { - if( strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX) === 0 or - strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX) === 0) { - if(strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX) === 0) { - $loggerName = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX)); - } elseif (strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX) === 0) { - $loggerName = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX)); - } - $logger =& $hierarchy->getLogger($loggerName, $this->loggerFactory); - // synchronized(logger) { - $this->parseCategory($props, $logger, $key, $loggerName, $value); - $this->parseAdditivityForLogger($props, $logger, $loggerName); - // } - } elseif (strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_RENDERER_PREFIX) === 0) { - $renderedClass = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_RENDERER_PREFIX)); - $renderingClass = $value; - if (method_exists($hierarchy, 'addrenderer')) { // ? - LoggerRendererMap::addRenderer($hierarchy, $renderedClass, $renderingClass); - } - } - } - } - - /** - * Parse the additivity option for a non-root category. - * - * @param array $props array of properties - * @param Logger &$cat - * @param string $loggerName - */ - function parseAdditivityForLogger($props, &$cat, $loggerName) - { - $value = LoggerOptionConverter::findAndSubst( - LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ADDITIVITY_PREFIX . $loggerName, - $props - ); - LoggerLog::debug( - "LoggerPropertyConfigurator::parseAdditivityForLogger() ". - "Handling " . LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ADDITIVITY_PREFIX . $loggerName . "=[{$value}]" - ); - // touch additivity only if necessary - if(!empty($value)) { - $additivity = LoggerOptionConverter::toBoolean($value, true); - LoggerLog::debug( - "LoggerPropertyConfigurator::parseAdditivityForLogger() ". - "Setting additivity for [{$loggerName}] to [{$additivity}]" - ); - $cat->setAdditivity($additivity); - } - } - - /** - * This method must work for the root category as well. - * - * @param array $props array of properties - * @param Logger &$logger - * @param string $optionKey - * @param string $loggerName - * @param string $value - * @return Logger - */ - public function parseCategory($props, &$logger, $optionKey, $loggerName, $value) { - LoggerLog::debug( - "LoggerPropertyConfigurator::parseCategory() ". - "Parsing for [{$loggerName}] with value=[{$value}]." - ); - - // We must skip over ',' but not white space - $st = explode(',', $value); - - // If value is not in the form ", appender.." or "", then we should set - // the level of the loggeregory. - - if(!(empty($value) || @$value[0] == ',')) { - // just to be on the safe side... - if(sizeof($st) == 0) - return; - - $levelStr = current($st); - LoggerLog::debug( - "LoggerPropertyConfigurator::parseCategory() ". - "Level token is [$levelStr]." - ); - - // If the level value is inherited, set category level value to - // null. We also check that the user has not specified inherited for the - // root category. - if('INHERITED' == strtoupper($levelStr) || 'NULL' == strtoupper($levelStr)) { - if ($loggerName == LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME) { - LoggerLog::warn( - "LoggerPropertyConfigurator::parseCategory() ". - "The root logger cannot be set to null." - ); - } else { - $logger->setLevel(null); - } - } else { - $logger->setLevel(LoggerOptionConverter::toLevel($levelStr, LoggerLevel::getLevelDebug())); - } - } - - // Begin by removing all existing appenders. - $logger->removeAllAppenders(); - while($appenderName = next($st)) { - $appenderName = trim($appenderName); - if(empty($appenderName)) - continue; - LoggerLog::debug( - "LoggerPropertyConfigurator::parseCategory() ". - "Parsing appender named [{$appenderName}]." - ); - $appender = $this->parseAppender($props, $appenderName); - if($appender !== null) { - $logger->addAppender($appender); - } - } - } - - /** - * @param array $props array of properties - * @param string $appenderName - * @return LoggerAppender - */ - function parseAppender($props, $appenderName) - { - $appender = LoggerAppender::singleton($appenderName); - if($appender !== null) { - LoggerLog::debug( - "LoggerPropertyConfigurator::parseAppender() ". - "Appender [{$appenderName}] was already parsed." - ); - return $appender; - } - // Appender was not previously initialized. - $prefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_APPENDER_PREFIX . $appenderName; - $layoutPrefix = $prefix . ".layout"; - $appenderClass = @$props[$prefix]; - if (!empty($appenderClass)) { - $appender = LoggerAppender::singleton($appenderName, $appenderClass); - if($appender === null) { - LoggerLog::warn( - "LoggerPropertyConfigurator::parseAppender() ". - "Could not instantiate appender named [$appenderName]." - ); - return null; - } - } else { - LoggerLog::warn( - "LoggerPropertyConfigurator::parseAppender() ". - "Could not instantiate appender named [$appenderName] with null className." - ); - return null; - } - - $appender->setName($appenderName); - if( $appender->requiresLayout() ) { - LoggerLog::debug( - "LoggerPropertyConfigurator::parseAppender() ". - "Parsing layout section for [$appenderName]." - ); - $layoutClass = @$props[$layoutPrefix]; - $layoutClass = LoggerOptionConverter::substVars($layoutClass, $props); - if (empty($layoutClass)) { - LoggerLog::warn( - "LoggerPropertyConfigurator::parseAppender() ". - "layout class is empty in '$layoutPrefix'. Using Simple layout" - ); - $layout = LoggerLayout::factory('LoggerLayoutSimple'); - } else { - $layout = LoggerLayout::factory($layoutClass); - - if($layout === null) { - LoggerLog::warn( - "LoggerPropertyConfigurator::parseAppender() ". - "cannot create layout '$layoutClass'. Using Simple layout" - ); - $layout = LoggerLayout::factory('LoggerLayoutSimple'); - } - } - - LoggerLog::debug( - "LoggerPropertyConfigurator::parseAppender() ". - "Parsing layout options for [$appenderName]." - ); - LoggerPropertySetter::setPropertiesByObject($layout, $props, $layoutPrefix . "."); - LoggerLog::debug( - "LoggerPropertyConfigurator::parseAppender() ". - "End Parsing layout options for [$appenderName]." - ); - $appender->setLayout($layout); - - } - LoggerPropertySetter::setPropertiesByObject($appender, $props, $prefix . "."); - LoggerLog::debug( - "LoggerPropertyConfigurator::parseAppender() ". - "Parsed [{$appenderName}] options." - ); - return $appender; - } +class LoggerConfiguratorIni implements LoggerConfigurator { + + /** + * @var LoggerFactory + */ + var $loggerFactory = null; + + /** + * Constructor + */ + public function __construct() { + $this->loggerFactory = new LoggerDefaultCategoryFactory(); + } + + /** + * Configure the default repository using the resource pointed by url. + * Url is any valid resurce as defined in {@link PHP_MANUAL#file} function. + * Note that the resource will be search with use_include_path parameter + * set to "1". + * + * @param string $url + * @return boolean configuration result + * @static + */ + public static function configure($url = '') { + $configurator = new LoggerConfiguratorIni(); + $repository = LoggerManager::getLoggerRepository(); + return $configurator->doConfigure($url, $repository); + } + + /** + * Read configuration from a file. + * + *

The function {@link PHP_MANUAL#parse_ini_file} is used to read the + * file.

+ * + * The existing configuration is not cleared nor reset. + * If you require a different behavior, then call + * {@link LoggerManager::resetConfiguration()} + * method before calling {@link doConfigure()}. + * + *

The configuration file consists of statements in the format + * key=value. The syntax of different configuration + * elements are discussed below. + * + *

Repository-wide threshold

+ * + *

The repository-wide threshold filters logging requests by level + * regardless of logger. The syntax is: + * + *

+	 * log4php.threshold=[level]
+	 * 
+ * + *

The level value can consist of the string values OFF, FATAL, + * ERROR, WARN, INFO, DEBUG, ALL or a custom level value. A + * custom level value can be specified in the form + * level#classname. By default the repository-wide threshold is set + * to the lowest possible value, namely the level ALL. + *

+ * + * + *

Appender configuration

+ * + *

Appender configuration syntax is:

+ *
+	 * ; For appender named appenderName, set its class.
+	 * ; Note: The appender name can contain dots.
+	 * log4php.appender.appenderName=name_of_appender_class
+	 * 
+	 * ; Set appender specific options.
+	 * 
+	 * log4php.appender.appenderName.option1=value1
+	 * log4php.appender.appenderName.optionN=valueN
+	 * 
+ * + * For each named appender you can configure its {@link LoggerLayout}. The + * syntax for configuring an appender's layout is: + *
+	 * log4php.appender.appenderName.layout=name_of_layout_class
+	 * log4php.appender.appenderName.layout.option1=value1
+	 *	....
+	 * log4php.appender.appenderName.layout.optionN=valueN
+	 * 
+ * + *

Configuring loggers

+ * + *

The syntax for configuring the root logger is: + *

+	 * log4php.rootLogger=[level], appenderName, appenderName, ...
+	 * 
+ * + *

This syntax means that an optional level can be + * supplied followed by appender names separated by commas. + * + *

The level value can consist of the string values OFF, FATAL, + * ERROR, WARN, INFO, DEBUG, ALL or a custom level value. A + * custom level value can be specified in the form

+ * + *
level#classname
+ * + *

If a level value is specified, then the root level is set + * to the corresponding level. If no level value is specified, + * then the root level remains untouched. + * + *

The root logger can be assigned multiple appenders. + * + *

Each appenderName (separated by commas) will be added to + * the root logger. The named appender is defined using the + * appender syntax defined above. + * + *

For non-root categories the syntax is almost the same: + *

+	 * log4php.logger.logger_name=[level|INHERITED|NULL], appenderName, appenderName, ...
+	 * 
+ * + *

The meaning of the optional level value is discussed above + * in relation to the root logger. In addition however, the value + * INHERITED can be specified meaning that the named logger should + * inherit its level from the logger hierarchy.

+ * + *

If no level value is supplied, then the level of the + * named logger remains untouched.

+ * + *

By default categories inherit their level from the + * hierarchy. However, if you set the level of a logger and later + * decide that that logger should inherit its level, then you should + * specify INHERITED as the value for the level value. NULL is a + * synonym for INHERITED.

+ * + *

Similar to the root logger syntax, each appenderName + * (separated by commas) will be attached to the named logger.

+ * + *

See the appender additivity rule in the user manual for + * the meaning of the additivity flag. + * + *

ObjectRenderers

+ * + *

You can customize the way message objects of a given type are + * converted to String before being logged. This is done by + * specifying a {@link LoggerRendererObject} + * for the object type would like to customize.

+ * + *

The syntax is: + * + *

+	 * log4php.renderer.name_of_rendered_class=name_of_rendering.class
+	 * 
+ * + * As in, + *
+	 * log4php.renderer.myFruit=myFruitRenderer
+	 * 
+ * + *

Logger Factories

+ * + * The usage of custom logger factories is discouraged and no longer + * documented. + * + *

Example

+ * + *

An example configuration is given below. Other configuration + * file examples are given in the tests folder. + * + *

+	 * ; Set options for appender named "A1".
+	 * ; Appender "A1" will be a LoggerAppenderSyslog
+	 * log4php.appender.A1=LoggerAppenderSyslog
+	 * 
+	 * ; The syslog daemon resides on www.abc.net
+	 * log4php.appender.A1.ident=log4php-test
+	 * 
+	 * ; A1's layout is a LoggerPatternLayout, using the conversion pattern
+	 * ; %r %-5p %c{2} %M.%L %x - %m%n. Thus, the log output will
+	 * ; include the relative time since the start of the application in
+	 * ; milliseconds, followed by the level of the log request,
+	 * ; followed by the two rightmost components of the logger name,
+	 * ; followed by the callers method name, followed by the line number,
+	 * ; the nested disgnostic context and finally the message itself.
+	 * ; Refer to the documentation of LoggerPatternLayout} for further information
+	 * ; on the syntax of the ConversionPattern key.
+	 * log4php.appender.A1.layout=LoggerPatternLayout
+	 * log4php.appender.A1.layout.ConversionPattern="%-4r %-5p %c{2} %M.%L %x - %m%n"
+	 * 
+	 * ; Set options for appender named "A2"
+	 * ; A2 should be a LoggerAppenderRollingFile, with maximum file size of 10 MB
+	 * ; using at most one backup file. A2's layout is TTCC, using the
+	 * ; ISO8061 date format with context printing enabled.
+	 * log4php.appender.A2=LoggerAppenderRollingFile
+	 * log4php.appender.A2.MaxFileSize=10MB
+	 * log4php.appender.A2.MaxBackupIndex=1
+	 * log4php.appender.A2.layout=LoggerLayoutTTCC
+	 * log4php.appender.A2.layout.ContextPrinting="true"
+	 * log4php.appender.A2.layout.DateFormat="%c"
+	 * 
+	 * ; Root logger set to DEBUG using the A2 appender defined above.
+	 * log4php.rootLogger=DEBUG, A2
+	 * 
+	 * ; Logger definitions:
+	 * ; The SECURITY logger inherits is level from root. However, it's output
+	 * ; will go to A1 appender defined above. It's additivity is non-cumulative.
+	 * log4php.logger.SECURITY=INHERIT, A1
+	 * log4php.additivity.SECURITY=false
+	 * 
+	 * ; Only warnings or above will be logged for the logger "SECURITY.access".
+	 * ; Output will go to A1.
+	 * log4php.logger.SECURITY.access=WARN
+	 * 
+	 * 
+	 * ; The logger "class.of.the.day" inherits its level from the
+	 * ; logger hierarchy.	Output will go to the appender's of the root
+	 * ; logger, A2 in this case.
+	 * log4php.logger.class.of.the.day=INHERIT
+	 * 
+ * + *

Refer to the setOption method in each Appender and + * Layout for class specific options.

+ * + *

Use the ";" character at the + * beginning of a line for comments.

+ * + * @param string $url The name of the configuration file where the + * configuration information is stored. + * @param LoggerHierarchy &$repository the repository to apply the configuration + */ + function doConfigure($url, &$repository) { + $properties = @parse_ini_file($url); + if($properties === false || count($properties) == 0) { + // as of PHP 5.2.7 parse_ini_file() returns FALSE instead of an empty array + return false; + } + return $this->doConfigureProperties($properties, $repository); + } + + + /** + * Read configuration options from properties. + * + * @see doConfigure(). + * @param array $properties + * @param LoggerHierarchy &$hierarchy + */ + function doConfigureProperties($properties, &$hierarchy) { + /* + $value = @$properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_DEBUG_KEY]; + + if(!empty($value)) { + LoggerLog::internalDebugging(LoggerOptionConverter::toBoolean($value, LoggerLog::internalDebugging())); + } + */ + + + $thresholdStr = @$properties[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_THRESHOLD_PREFIX]; + $hierarchy->setThreshold(LoggerOptionConverter::toLevel($thresholdStr, LoggerLevel::getLevelAll())); + + $this->configureRootCategory($properties, $hierarchy); + $this->configureLoggerFactory($properties); + $this->parseCatsAndRenderers($properties, $hierarchy); + + return true; + } + + // -------------------------------------------------------------------------- + // Internal stuff + // -------------------------------------------------------------------------- + + /** + * Check the provided Properties object for a + * {@link LoggerFactory} entry specified by + * {@link LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY}. + * + * If such an entry exists, an attempt is made to create an instance using + * the default constructor. + * This instance is used for subsequent Category creations + * within this configurator. + * + * @see parseCatsAndRenderers() + * @param array $props array of properties + */ + function configureLoggerFactory($props) { + $factoryFqcn = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_FACTORY_KEY]; + if(!empty($factoryFqcn)) { + $factoryClassName = basename($factoryFqcn); + + if(class_exists($factoryClassName)) { + $loggerFactory = new $factoryClassName(); + } else { + // LoggerPropertyConfigurator::configureLoggerFactory() Unable to load factory + $loggerFactory = $this->loggerFactory; + } + + LoggerReflectionUtils::setPropertiesByObject($loggerFactory, $props, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_FACTORY_PREFIX . "."); + } + } + + /** + * @param array $props array of properties + * @param LoggerHierarchy &$hierarchy + */ + function configureRootCategory($props, &$hierarchy) { + $effectivePrefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_LOGGER_PREFIX; + $value = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_LOGGER_PREFIX]; + + if(empty($value)) { + $value = @$props[LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_CATEGORY_PREFIX]; + $effectivePrefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ROOT_CATEGORY_PREFIX; + } + + if(empty($value)) { +// LoggerLog::debug( +// "LoggerPropertyConfigurator::configureRootCategory() ". +// "Could not find root logger information. Is this OK?" +// ); + } else { + $root = $hierarchy->getRootLogger(); + // synchronized(root) { + $this->parseCategory( + $props, + $root, + $effectivePrefix, + LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME, + $value + ); + // } + } + } + + /** + * Parse non-root elements, such non-root categories and renderers. + * + * @param array $props array of properties + * @param LoggerHierarchy &$hierarchy + */ + function parseCatsAndRenderers($props, &$hierarchy) { + while(list($key,$value) = each($props)) { + if(strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX) === 0 or + strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX) === 0) { + if(strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX) === 0) { + $loggerName = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_CATEGORY_PREFIX)); + } else if(strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX) === 0) { + $loggerName = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_LOGGER_PREFIX)); + } + + $logger = $hierarchy->getLogger($loggerName, $this->loggerFactory); + // synchronized(logger) { + $this->parseCategory($props, $logger, $key, $loggerName, $value); + $this->parseAdditivityForLogger($props, $logger, $loggerName); + // } + } else if(strpos($key, LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_RENDERER_PREFIX) === 0) { + $renderedClass = substr($key, strlen(LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_RENDERER_PREFIX)); + $renderingClass = $value; + if(method_exists($hierarchy, 'addrenderer')) { // ? + LoggerRendererMap::addRenderer($hierarchy, $renderedClass, $renderingClass); + } + } + } + } + + /** + * Parse the additivity option for a non-root category. + * + * @param array $props array of properties + * @param Logger &$cat + * @param string $loggerName + */ + function parseAdditivityForLogger($props, &$cat, $loggerName) { + $value = LoggerOptionConverter::findAndSubst( + LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_ADDITIVITY_PREFIX . $loggerName, + $props + ); + + // touch additivity only if necessary + if(!empty($value)) { + $additivity = LoggerOptionConverter::toBoolean($value, true); + $cat->setAdditivity($additivity); + } + } + + /** + * This method must work for the root category as well. + * + * @param array $props array of properties + * @param Logger &$logger + * @param string $optionKey + * @param string $loggerName + * @param string $value + * @return Logger + */ + public function parseCategory($props, &$logger, $optionKey, $loggerName, $value) { + + // We must skip over ',' but not white space + $st = explode(',', $value); + + // If value is not in the form ", appender.." or "", then we should set + // the level of the loggeregory. + + if(!(empty($value) || @$value[0] == ',')) { + // just to be on the safe side... + if(count($st) == 0) { + return; + } + $levelStr = current($st); + + // If the level value is inherited, set category level value to + // null. We also check that the user has not specified inherited for the + // root category. + if('INHERITED' == strtoupper($levelStr) || 'NULL' == strtoupper($levelStr)) { + if($loggerName == LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_INTERNAL_ROOT_NAME) { +// TODO: throw exception? +// LoggerLog::warn( +// "LoggerPropertyConfigurator::parseCategory() ". +// "The root logger cannot be set to null." +// ); + } else { + $logger->setLevel(null); + } + } else { + $logger->setLevel(LoggerOptionConverter::toLevel($levelStr, LoggerLevel::getLevelDebug())); + } + } + + // Begin by removing all existing appenders. + $logger->removeAllAppenders(); + while($appenderName = next($st)) { + $appenderName = trim($appenderName); + if(empty($appenderName)) { + continue; + } + + $appender =& $this->parseAppender($props, $appenderName); + if($appender !== null) { + $logger->addAppender($appender); + } + } + } + + /** + * @param array $props array of properties + * @param string $appenderName + * @return LoggerAppender + */ + function &parseAppender($props, $appenderName) { + $appender = LoggerAppender::singleton($appenderName); + if($appender !== null) { + return $appender; + } + // Appender was not previously initialized. + $prefix = LOG4PHP_LOGGER_PROPERTY_CONFIGURATOR_APPENDER_PREFIX . $appenderName; + $layoutPrefix = $prefix . ".layout"; + $appenderClass = @$props[$prefix]; + if(!empty($appenderClass)) { + $appender = LoggerAppender::singleton($appenderName, $appenderClass); + if($appender === null) { + return null; + } + } else { + return null; + } + + $appender->setName($appenderName); + if($appender->requiresLayout() ) { + $layoutClass = @$props[$layoutPrefix]; + $layoutClass = LoggerOptionConverter::substVars($layoutClass, $props); + if(empty($layoutClass)) { + $layout = LoggerReflectionUtils::createObject('LoggerLayoutSimple'); + } else { + $layout = LoggerReflectionUtils::createObject($layoutClass); + if($layout === null) { + $layout = LoggerReflectionUtils::createObject('LoggerLayoutSimple'); + } + } + + LoggerReflectionUtils::setPropertiesByObject($layout, $props, $layoutPrefix . "."); + $appender->setLayout($layout); + + } + LoggerReflectionUtils::setPropertiesByObject($appender, $props, $prefix . "."); + return $appender; + } } diff --git a/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorPhp.php b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorPhp.php new file mode 100644 index 0000000..0701f90 --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorPhp.php @@ -0,0 +1,157 @@ + + * 'ALL', + * 'rootLogger' => array( + * 'level' => 'INFO', + * 'appenders' => array('default'), + * ), + * 'loggers' => array( + * 'dev' => array( + * 'level' => 'DEBUG', + * 'appenders' => array('default'), + * ), + * ), + * 'appenders' => array( + * 'default' => array( + * 'class' => 'LoggerAppenderEcho', + * 'layout' => array( + * 'class' => 'LoggerPatternLayout', + * 'conversionPattern' => "%d{Y-m-d H:i:s} %-5p %c %X{username}: %m in %F at %L%n", + * ), + * ), + * ), + * ); + * + * + * @package log4php + * @subpackage configurators + * @since 2.0 + */ +class LoggerConfiguratorPhp implements LoggerConfigurator { + + public static function configure($url = '') { + $configurator = new self(); + $hierarchy = LoggerManager::getLoggerRepository(); + return $configurator->doConfigure($url, $hierarchy); + } + + public function doConfigure($url, &$hierarchy) { + + $config = require $url; + + // set threshold + if(isset($config['threshold'])) { + $hierarchy->setThreshold(LoggerOptionConverter::toLevel($config['threshold'], LoggerLevel::getLevelAll())); + } + + // parse and create appenders + if(isset($config['appenders'])) { + + foreach($config['appenders'] as $appenderName => $appenderProperties) { + + $appender = LoggerAppender::singleton($appenderName, $appenderProperties['class']); + + if($appender->requiresLayout()) { + + if(isset($appenderProperties['layout'])) { + + if(isset($appenderProperties['layout']['class']) and !empty($appenderProperties['layout']['class'])) { + $layoutClass = $appenderProperties['layout']['class']; + } else { + $layoutClass = 'LoggerLayoutSimple'; + } + + $layout = LoggerReflectionUtils::createObject($layoutClass); + if($layout === null) { + $layout = LoggerReflectionUtils::createObject('LoggerLayoutSimple'); + } + + if($layout instanceof LoggerLayoutPattern) { + $layout->setConversionPattern($appenderProperties['layout']['conversionPattern']); + } + + $appender->setLayout($layout); + + } else { + // TODO: throw exception? + } + + } + + } + + } + + // parse and create root logger + if(isset($config['rootLogger'])) { + $rootLogger = $hierarchy->getRootLogger(); + if(isset($config['rootLogger']['level'])) { + $rootLogger->setLevel(LoggerOptionConverter::toLevel($config['rootLogger']['level'], LoggerLevel::getLevelDebug())); + if(isset($config['rootLogger']['appenders'])) { + foreach($config['rootLogger']['appenders'] as $appenderName) { + $appender = LoggerAppender::singleton($appenderName); + if($appender !== null) { + $rootLogger->addAppender($appender); + } + } + } + } + } + + // parse and create loggers + if(isset($config['loggers'])) { + foreach($config['loggers'] as $loggerName => $loggerProperties) { + if(is_string($loggerName)) { + $logger = $hierarchy->getLogger($loggerName); + + if(isset($loggerProperties['level'])) { + $logger->setLevel(LoggerOptionConverter::toLevel($loggerProperties['level'], LoggerLevel::getLevelDebug())); + if(isset($loggerProperties['appenders'])) { + foreach($loggerProperties['appenders'] as $appenderName) { + $appender = LoggerAppender::singleton($appenderName); + if($appender !== null) { + $logger->addAppender($appender); + } + } + } + } + } else { + // TODO: throw exception + } + } + } + + return true; + } + +} diff --git a/thirdparty/apache-log4php/src/main/php/xml/LoggerDOMConfigurator.php b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorXml.php index b5505b3..825cf12 100644 --- a/thirdparty/apache-log4php/src/main/php/xml/LoggerDOMConfigurator.php +++ b/thirdparty/apache-log4php/src/main/php/configurators/LoggerConfiguratorXml.php @@ -17,21 +17,8 @@ * * * @package log4php - * @subpackage xml - */ - -/** - * @ignore + * @subpackage configurators */ -if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..'); - -require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php'); -require_once(LOG4PHP_DIR . '/or/LoggerObjectRenderer.php'); -require_once(LOG4PHP_DIR . '/spi/LoggerConfigurator.php'); -require_once(LOG4PHP_DIR . '/LoggerAppender.php'); -require_once(LOG4PHP_DIR . '/LoggerLayout.php'); -require_once(LOG4PHP_DIR . '/LoggerLog.php'); -require_once(LOG4PHP_DIR . '/LoggerManager.php'); define('LOG4PHP_LOGGER_DOM_CONFIGURATOR_APPENDER_STATE', 1000); define('LOG4PHP_LOGGER_DOM_CONFIGURATOR_LAYOUT_STATE', 1010); @@ -79,14 +66,12 @@ define('LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS', 'HTTP://LOGGING.APACHE.ORG/LOG4P *

There are sample XML files included in the package under tests/ * subdirectories.

* - * @author Marco Vassura - * @author Knut Urdalen - * @version $Revision: 635069 $ + * @version $Revision: 785337 $ * @package log4php * @subpackage xml * @since 0.4 */ -class LoggerDOMConfigurator implements LoggerConfigurator { +class LoggerConfiguratorXml implements LoggerConfigurator { /** * @var LoggerHierarchy @@ -121,8 +106,7 @@ class LoggerDOMConfigurator implements LoggerConfigurator { /** * Constructor */ - function LoggerDOMConfigurator() - { + public function __construct() { $this->state = array(); $this->logger = null; $this->appender = null; @@ -140,8 +124,8 @@ class LoggerDOMConfigurator implements LoggerConfigurator { * @static */ public static function configure($url = '') { - $configurator = new LoggerDOMConfigurator(); - $repository =& LoggerManager::getLoggerRepository(); + $configurator = new self(); + $repository = LoggerManager::getLoggerRepository(); return $configurator->doConfigure($url, $repository); } @@ -199,10 +183,6 @@ class LoggerDOMConfigurator implements LoggerConfigurator { $errorCode = xml_get_error_code($parser); $errorStr = xml_error_string($errorCode); $errorLine = xml_get_current_line_number($parser); - LoggerLog::warn( - "LoggerDOMConfigurator::parse() ". - "Parsing error [{$errorCode}] {$errorStr}, line {$errorLine}" - ); $this->repository->resetConfiguration(); } else { xml_parser_free($parser); @@ -224,8 +204,6 @@ class LoggerDOMConfigurator implements LoggerConfigurator { case 'CONFIGURATION' : case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':CONFIGURATION': - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() CONFIGURATION"); - if (isset($attribs['THRESHOLD'])) { $this->repository->setThreshold( @@ -235,6 +213,8 @@ class LoggerDOMConfigurator implements LoggerConfigurator { ) ); } + /* + * TODO: Remove due to LOG4PHP-34 if (isset($attribs['DEBUG'])) { $debug = LoggerOptionConverter::toBoolean($this->subst($attribs['DEBUG']), LoggerLog::internalDebugging()); $this->repository->debug = $debug; @@ -242,6 +222,7 @@ class LoggerDOMConfigurator implements LoggerConfigurator { LoggerLog::debug("LoggerDOMConfigurator::tagOpen() LOG4PHP:CONFIGURATION. Internal Debug turned ".($debug ? 'on':'off')); } + */ break; case 'APPENDER' : @@ -253,12 +234,7 @@ class LoggerDOMConfigurator implements LoggerConfigurator { $name = $this->subst(@$attribs['NAME']); $class = $this->subst(@$attribs['CLASS']); - LoggerLog::debug("LoggerDOMConfigurator::tagOpen():tag=[$tag]:name=[$name]:class=[$class]"); - - $this->appender =& LoggerAppender::singleton($name, $class); - if ($this->appender === null) { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() APPENDER cannot instantiate appender '$name'"); - } + $this->appender = LoggerAppender::singleton($name, $class); $this->state[] = LOG4PHP_LOGGER_DOM_CONFIGURATOR_APPENDER_STATE; break; @@ -266,14 +242,10 @@ class LoggerDOMConfigurator implements LoggerConfigurator { case 'APPENDER-REF' : case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':APPENDER_REF': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':APPENDER-REF': - - if (isset($attribs['REF']) and !empty($attribs['REF'])) { $appenderName = $this->subst($attribs['REF']); - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() APPENDER-REF ref='$appenderName'"); - - $appender =& LoggerAppender::singleton($appenderName); + $appender = LoggerAppender::singleton($appenderName); if ($appender !== null) { switch (end($this->state)) { case LOG4PHP_LOGGER_DOM_CONFIGURATOR_LOGGER_STATE: @@ -281,55 +253,31 @@ class LoggerDOMConfigurator implements LoggerConfigurator { $this->logger->addAppender($appender); break; } - } else { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() APPENDER-REF ref '$appenderName' points to a null appender"); } - } else { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() APPENDER-REF ref not set or empty"); - } + } break; case 'FILTER' : case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':FILTER': - - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() FILTER"); - unset($this->filter); $this->filter = null; $filterName = basename($this->subst(@$attribs['CLASS'])); if (!empty($filterName)) { - if (!class_exists($filterName)) { - @include_once(LOG4PHP_DIR . "/varia/{$filterName}.php"); - } - if (class_exists($filterName)) { - $this->filter = new $filterName(); - } else { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() FILTER. class '$filterName' doesnt exist"); - } + $this->filter = new $filterName(); $this->state[] = LOG4PHP_LOGGER_DOM_CONFIGURATOR_FILTER_STATE; - } else { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() FILTER filter name cannot be empty"); - } + } break; case 'LAYOUT': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':LAYOUT': - $class = @$attribs['CLASS']; - - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() LAYOUT class='{$class}'"); - - $this->layout = LoggerLayout::factory($this->subst($class)); - if ($this->layout === null) - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() LAYOUT unable to instanciate class='{$class}'"); - + $this->layout = LoggerReflectionUtils::createObject($this->subst($class)); $this->state[] = LOG4PHP_LOGGER_DOM_CONFIGURATOR_LAYOUT_STATE; break; case 'LOGGER': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':LOGGER': - // $this->logger is assigned by reference. // Only '$this->logger=null;' destroys referenced object unset($this->logger); @@ -337,29 +285,29 @@ class LoggerDOMConfigurator implements LoggerConfigurator { $loggerName = $this->subst(@$attribs['NAME']); if (!empty($loggerName)) { - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() LOGGER. name='$loggerName'"); - $class = $this->subst(@$attribs['CLASS']); if (empty($class)) { $this->logger =& $this->repository->getLogger($loggerName); } else { $className = basename($class); - if (!class_exists($className)) - @include_once("{$class}.php"); if (!class_exists($className)) { - LoggerLog::warn( + // TODO throw exception? + /*LoggerLog::warn( "LoggerDOMConfigurator::tagOpen() LOGGER. ". "cannot find '$className'." - ); + );*/ } else { if (in_array('getlogger', get_class_methods($className))) { $this->logger =& call_user_func(array($className, 'getlogger'), $loggerName); } else { + // TODO throw exception? + /* LoggerLog::warn( "LoggerDOMConfigurator::tagOpen() LOGGER. ". "class '$className' doesnt implement 'getLogger()' method." - ); + ); + */ } } } @@ -367,9 +315,7 @@ class LoggerDOMConfigurator implements LoggerConfigurator { $additivity = LoggerOptionConverter::toBoolean($this->subst($attribs['ADDITIVITY']), true); $this->logger->setAdditivity($additivity); } - } else { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() LOGGER. Attribute 'name' is not set or is empty."); - } + } $this->state[] = LOG4PHP_LOGGER_DOM_CONFIGURATOR_LOGGER_STATE;; break; @@ -379,14 +325,12 @@ class LoggerDOMConfigurator implements LoggerConfigurator { case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':PRIORITY': if (!isset($attribs['VALUE'])) { - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() LEVEL value not set"); + // LoggerDOMConfigurator::tagOpen() LEVEL value not set break; } - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() LEVEL value={$attribs['VALUE']}"); - if ($this->logger === null) { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() LEVEL. parent logger is null"); + // LoggerDOMConfigurator::tagOpen() LEVEL. parent logger is null break; } @@ -398,7 +342,6 @@ class LoggerDOMConfigurator implements LoggerConfigurator { $this->logger->getLevel() ) ); - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() LEVEL root level is now '{$attribs['VALUE']}' "); break; case LOG4PHP_LOGGER_DOM_CONFIGURATOR_LOGGER_STATE: $this->logger->setLevel( @@ -409,63 +352,39 @@ class LoggerDOMConfigurator implements LoggerConfigurator { ); break; default: - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() LEVEL state '{$this->state}' not allowed here"); + //LoggerLog::warn("LoggerDOMConfigurator::tagOpen() LEVEL state '{$this->state}' not allowed here"); } break; case 'PARAM': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':PARAM': - - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() PARAM"); - if (!isset($attribs['NAME'])) { - LoggerLog::warn( - "LoggerDOMConfigurator::tagOpen() PARAM. ". - "attribute 'name' not defined." - ); + // LoggerDOMConfigurator::tagOpen() PARAM attribute 'name' not defined. break; } if (!isset($attribs['VALUE'])) { - LoggerLog::warn( - "LoggerDOMConfigurator::tagOpen() PARAM. ". - "attribute 'value' not defined." - ); + // LoggerDOMConfigurator::tagOpen() PARAM. attribute 'value' not defined. break; } switch (end($this->state)) { case LOG4PHP_LOGGER_DOM_CONFIGURATOR_APPENDER_STATE: if ($this->appender !== null) { - $this->setter($this->appender, $this->subst($attribs['NAME']), $this->subst($attribs['VALUE'])); - } else { - LoggerLog::warn( - "LoggerDOMConfigurator::tagOpen() PARAM. ". - " trying to set property to a null appender." - ); + LoggerReflectionUtils::setter($this->appender, $this->subst($attribs['NAME']), $this->subst($attribs['VALUE'])); } break; case LOG4PHP_LOGGER_DOM_CONFIGURATOR_LAYOUT_STATE: if ($this->layout !== null) { - $this->setter($this->layout, $this->subst($attribs['NAME']), $this->subst($attribs['VALUE'])); - } else { - LoggerLog::warn( - "LoggerDOMConfigurator::tagOpen() PARAM. ". - " trying to set property to a null layout." - ); + LoggerReflectionUtils::setter($this->layout, $this->subst($attribs['NAME']), $this->subst($attribs['VALUE'])); } break; case LOG4PHP_LOGGER_DOM_CONFIGURATOR_FILTER_STATE: if ($this->filter !== null) { - $this->setter($this->filter, $this->subst($attribs['NAME']), $this->subst($attribs['VALUE'])); - } else { - LoggerLog::warn( - "LoggerDOMConfigurator::tagOpen() PARAM. ". - " trying to set property to a null filter." - ); + LoggerReflectionUtils::setter($this->filter, $this->subst($attribs['NAME']), $this->subst($attribs['VALUE'])); } break; default: - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() PARAM state '{$this->state}' not allowed here"); + //LoggerLog::warn("LoggerDOMConfigurator::tagOpen() PARAM state '{$this->state}' not allowed here"); } break; @@ -475,32 +394,22 @@ class LoggerDOMConfigurator implements LoggerConfigurator { $renderedClass = $this->subst(@$attribs['RENDEREDCLASS']); $renderingClass = $this->subst(@$attribs['RENDERINGCLASS']); - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() RENDERER renderedClass='$renderedClass' renderingClass='$renderingClass'"); - if (!empty($renderedClass) and !empty($renderingClass)) { - $renderer = LoggerObjectRenderer::factory($renderingClass); + $renderer = LoggerReflectionUtils::createObject($renderingClass); if ($renderer === null) { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() RENDERER cannot instantiate '$renderingClass'"); + // LoggerDOMConfigurator::tagOpen() RENDERER cannot instantiate '$renderingClass' } else { $this->repository->setRenderer($renderedClass, $renderer); } - } else { - LoggerLog::warn("LoggerDOMConfigurator::tagOpen() RENDERER renderedClass or renderingClass is empty"); } break; case 'ROOT': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':ROOT': - - LoggerLog::debug("LoggerDOMConfigurator::tagOpen() ROOT"); - - $this->logger =& LoggerManager::getRootLogger(); - + $this->logger = LoggerManager::getRootLogger(); $this->state[] = LOG4PHP_LOGGER_DOM_CONFIGURATOR_ROOT_STATE; break; - } - } @@ -514,24 +423,14 @@ class LoggerDOMConfigurator implements LoggerConfigurator { case 'CONFIGURATION' : case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':CONFIGURATION': - - LoggerLog::debug("LoggerDOMConfigurator::tagClose() CONFIGURATION"); break; case 'APPENDER' : case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':APPENDER': - - LoggerLog::debug("LoggerDOMConfigurator::tagClose() APPENDER"); - if ($this->appender !== null) { if ($this->appender->requiresLayout() and $this->appender->getLayout() === null) { $appenderName = $this->appender->getName(); - LoggerLog::warn( - "LoggerDOMConfigurator::tagClose() APPENDER. ". - "'$appenderName' requires a layout that is not defined. ". - "Using a simple layout" - ); - $this->appender->setLayout(LoggerLayout::factory('LoggerLayoutSimple')); + $this->appender->setLayout(LoggerReflectionUtils::createObject('LoggerLayoutSimple')); } $this->appender->activateOptions(); } @@ -540,9 +439,6 @@ class LoggerDOMConfigurator implements LoggerConfigurator { case 'FILTER' : case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':FILTER': - - LoggerLog::debug("LoggerDOMConfigurator::tagClose() FILTER"); - if ($this->filter !== null) { $this->filter->activateOptions(); $this->appender->addFilter($this->filter); @@ -553,9 +449,6 @@ class LoggerDOMConfigurator implements LoggerConfigurator { case 'LAYOUT': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':LAYOUT': - - LoggerLog::debug("LoggerDOMConfigurator::tagClose() LAYOUT"); - if ($this->appender !== null and $this->layout !== null and $this->appender->requiresLayout()) { $this->layout->activateOptions(); $this->appender->setLayout($this->layout); @@ -566,43 +459,16 @@ class LoggerDOMConfigurator implements LoggerConfigurator { case 'LOGGER': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':LOGGER': - - LoggerLog::debug("LoggerDOMConfigurator::tagClose() LOGGER"); - array_pop($this->state); break; case 'ROOT': case LOG4PHP_LOGGER_DOM_CONFIGURATOR_XMLNS.':ROOT': - - LoggerLog::debug("LoggerDOMConfigurator::tagClose() ROOT"); - array_pop($this->state); break; } } - /** - * @param object $object - * @param string $name - * @param mixed $value - */ - function setter(&$object, $name, $value) - { - if (empty($name)) { - LoggerLog::debug("LoggerDOMConfigurator::setter() 'name' param cannot be empty"); - return false; - } - $methodName = 'set'.ucfirst($name); - if (method_exists($object, $methodName)) { - LoggerLog::debug("LoggerDOMConfigurator::setter() Calling ".get_class($object)."::{$methodName}({$value})"); - return call_user_func(array(&$object, $methodName), $value); - } else { - LoggerLog::warn("LoggerDOMConfigurator::setter() ".get_class($object)."::{$methodName}() does not exists"); - return false; - } - } - function subst($value) { return LoggerOptionConverter::substVars($value); diff --git a/thirdparty/apache-log4php/src/main/php/varia/LoggerDenyAllFilter.php b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterDenyAll.php index 31022f7..b3d974f 100644 --- a/thirdparty/apache-log4php/src/main/php/varia/LoggerDenyAllFilter.php +++ b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterDenyAll.php @@ -1,13 +1,13 @@ * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 779002 $ * @package log4php * @subpackage varia * @since 0.3 */ -class LoggerDenyAllFilter extends LoggerFilter { +class LoggerFilterDenyAll extends LoggerFilter { - /** - * Always returns the integer constant {@link LOG4PHP_LOGGER_FILTER_DENY} - * regardless of the {@link LoggerLoggingEvent} parameter. - * - * @param LoggerLoggingEvent $event The {@link LoggerLoggingEvent} to filter. - * @return LOG4PHP_LOGGER_FILTER_DENY Always returns {@link LOG4PHP_LOGGER_FILTER_DENY} - */ - function decide($event) - { - return LOG4PHP_LOGGER_FILTER_DENY; - } + /** + * Always returns the integer constant {@link LoggerFilter::DENY} + * regardless of the {@link LoggerLoggingEvent} parameter. + * + * @param LoggerLoggingEvent $event The {@link LoggerLoggingEvent} to filter. + * @return LoggerFilter::DENY Always returns {@link LoggerFilter::DENY} + */ + public function decide(LoggerLoggingEvent $event) { + return LoggerFilter::DENY; + } } diff --git a/thirdparty/apache-log4php/src/main/php/varia/LoggerLevelMatchFilter.php b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterLevelMatch.php index 43a6c83..7dc912e 100644 --- a/thirdparty/apache-log4php/src/main/php/varia/LoggerLevelMatchFilter.php +++ b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterLevelMatch.php @@ -1,13 +1,13 @@ AcceptOnMatch. If there is an exact match between the value * of the LevelToMatch option and the level of the * {@link LoggerLoggingEvent}, then the {@link decide()} method returns - * {@link LOG4PHP_LOGGER_FILTER_ACCEPT} in case the AcceptOnMatch + * {@link LoggerFilter::ACCEPT} in case the AcceptOnMatch * option value is set to true, if it is false then - * {@link LOG4PHP_LOGGER_FILTER_DENY} is returned. If there is no match, - * {@link LOG4PHP_LOGGER_FILTER_NEUTRAL} is returned.

+ * {@link LoggerFilter::DENY} is returned. If there is no match, + * {@link LoggerFilter::NEUTRAL} is returned.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 779001 $ * @package log4php * @subpackage varia * @since 0.6 */ -class LoggerLevelMatchFilter extends LoggerFilter { +class LoggerFilterLevelMatch extends LoggerFilter { - /** - * @var boolean - */ - var $acceptOnMatch = true; + /** + * Indicates if this event should be accepted or denied on match + * @var boolean + */ + private $acceptOnMatch = true; - /** - * @var LoggerLevel - */ - var $levelToMatch; + /** + * The level, when to match + * @var LoggerLevel + */ + private $levelToMatch; - /** - * @return boolean - */ - function getAcceptOnMatch() - { - return $this->acceptOnMatch; - } - - /** - * @param boolean $acceptOnMatch - */ - function setAcceptOnMatch($acceptOnMatch) - { - $this->acceptOnMatch = LoggerOptionConverter::toBoolean($acceptOnMatch, true); - } - - /** - * @return LoggerLevel - */ - function getLevelToMatch() - { - return $this->levelToMatch; - } - - /** - * @param string $l the level to match - */ - function setLevelToMatch($l) - { - $this->levelToMatch = LoggerOptionConverter::toLevel($l, null); - } + /** + * @param boolean $acceptOnMatch + */ + public function setAcceptOnMatch($acceptOnMatch) { + $this->acceptOnMatch = LoggerOptionConverter::toBoolean($acceptOnMatch, true); + } + + /** + * @param string $l the level to match + */ + public function setLevelToMatch($l) { + if($l instanceof LoggerLevel) { + $this->levelToMatch = $l; + } else { + $this->levelToMatch = LoggerOptionConverter::toLevel($l, null); + } + } - /** - * Return the decision of this filter. - * - * Returns {@link LOG4PHP_LOGGER_FILTER_NEUTRAL} if the LevelToMatch - * option is not set or if there is not match. Otherwise, if there is a - * match, then the returned decision is {@link LOG4PHP_LOGGER_FILTER_ACCEPT} if the - * AcceptOnMatch property is set to true. The - * returned decision is {@link LOG4PHP_LOGGER_FILTER_DENY} if the - * AcceptOnMatch property is set to false. - * - * @param LoggerLoggingEvent $event - * @return integer - */ - function decide($event) - { - if($this->levelToMatch === null) - return LOG4PHP_LOGGER_FILTER_NEUTRAL; - - if ($this->levelToMatch->equals($event->getLevel())) { - return $this->getAcceptOnMatch() ? - LOG4PHP_LOGGER_FILTER_ACCEPT : - LOG4PHP_LOGGER_FILTER_DENY; - } else { - return LOG4PHP_LOGGER_FILTER_NEUTRAL; - } - } + /** + * Return the decision of this filter. + * + * Returns {@link LoggerFilter::NEUTRAL} if the LevelToMatch + * option is not set or if there is not match. Otherwise, if there is a + * match, then the returned decision is {@link LoggerFilter::ACCEPT} if the + * AcceptOnMatch property is set to true. The + * returned decision is {@link LoggerFilter::DENY} if the + * AcceptOnMatch property is set to false. + * + * @param LoggerLoggingEvent $event + * @return integer + */ + public function decide(LoggerLoggingEvent $event) { + if($this->levelToMatch === null) { + return LoggerFilter::NEUTRAL; + } + + if($this->levelToMatch->equals($event->getLevel())) { + return $this->acceptOnMatch ? LoggerFilter::ACCEPT : LoggerFilter::DENY; + } else { + return LoggerFilter::NEUTRAL; + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/varia/LoggerLevelRangeFilter.php b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterLevelRange.php index b8d2368..8a5de03 100644 --- a/thirdparty/apache-log4php/src/main/php/varia/LoggerLevelRangeFilter.php +++ b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterLevelRange.php @@ -1,13 +1,13 @@ The filter admits three options LevelMin, LevelMax * and AcceptOnMatch.

* *

If the level of the {@link LoggerLoggingEvent} is not between Min and Max - * (inclusive), then {@link LOG4PHP_LOGGER_FILTER_DENY} is returned.

- * + * (inclusive), then {@link LoggerFilter::DENY} is returned.

+ * *

If the Logging event level is within the specified range, then if * AcceptOnMatch is true, - * {@link LOG4PHP_LOGGER_FILTER_ACCEPT} is returned, and if + * {@link LoggerFilter::ACCEPT} is returned, and if * AcceptOnMatch is false, - * {@link LOG4PHP_LOGGER_FILTER_NEUTRAL} is returned.

- * + * {@link LoggerFilter::NEUTRAL} is returned.

+ * *

If LevelMin is not defined, then there is no * minimum acceptable level (i.e. a level is never rejected for * being too "low"/unimportant). If LevelMax is not * defined, then there is no maximum acceptable level (ie a * level is never rejected for being too "high"/important).

* - *

Refer to the {@link LoggerAppenderSkeleton::setThreshold()} method - * available to all appenders extending {@link LoggerAppenderSkeleton} + *

Refer to the {@link LoggerAppender::setThreshold()} method + * available to all appenders extending {@link LoggerAppender} * for a more convenient way to filter out events by level.

* * @log4j-class org.apache.log4j.varia.LevelRangeFilter * @log4j-author Simon Kitching * @log4j-author based on code by Ceki Gülcü * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 779006 $ * @package log4php * @subpackage varia * @since 0.6 */ -class LoggerLevelRangeFilter extends LoggerFilter { - - /** - * @var boolean - */ - var $acceptOnMatch = true; +class LoggerFilterLevelRange extends LoggerFilter { + + /** + * @var boolean + */ + private $acceptOnMatch = true; - /** - * @var LoggerLevel - */ - var $levelMin; + /** + * @var LoggerLevel + */ + private $levelMin; - /** - * @var LoggerLevel - */ - var $levelMax; + /** + * @var LoggerLevel + */ + private $levelMax; - /** - * @return boolean - */ - function getAcceptOnMatch() - { - return $this->acceptOnMatch; - } - - /** - * @param boolean $acceptOnMatch - */ - function setAcceptOnMatch($acceptOnMatch) - { - $this->acceptOnMatch = LoggerOptionConverter::toBoolean($acceptOnMatch, true); - } - - /** - * @return LoggerLevel - */ - function getLevelMin() - { - return $this->levelMin; - } - - /** - * @param string $l the level min to match - */ - function setLevelMin($l) - { - $this->levelMin = LoggerOptionConverter::toLevel($l, null); - } + /** + * @param boolean $acceptOnMatch + */ + public function setAcceptOnMatch($acceptOnMatch) { + $this->acceptOnMatch = LoggerOptionConverter::toBoolean($acceptOnMatch, true); + } + + /** + * @param string $l the level min to match + */ + public function setLevelMin($l) { + if($l instanceof LoggerLevel) { + $this->levelMin = $l; + } else { + $this->levelMin = LoggerOptionConverter::toLevel($l, null); + } + } - /** - * @return LoggerLevel - */ - function getLevelMax() - { - return $this->levelMax; - } - - /** - * @param string $l the level max to match - */ - function setLevelMax($l) - { - $this->levelMax = LoggerOptionConverter::toLevel($l, null); - } + /** + * @param string $l the level max to match + */ + public function setLevelMax($l) { + if($l instanceof LoggerLevel) { + $this->levelMax = $l; + } else { + $this->levelMax = LoggerOptionConverter::toLevel($l, null); + } + } - /** - * Return the decision of this filter. - * - * @param LoggerLoggingEvent $event - * @return integer - */ - function decide($event) - { - $level = $event->getLevel(); - - if($this->levelMin !== null) { - if ($level->isGreaterOrEqual($this->levelMin) == false) { - // level of event is less than minimum - return LOG4PHP_LOGGER_FILTER_DENY; - } - } + /** + * Return the decision of this filter. + * + * @param LoggerLoggingEvent $event + * @return integer + */ + public function decide(LoggerLoggingEvent $event) { + $level = $event->getLevel(); + + if($this->levelMin !== null) { + if($level->isGreaterOrEqual($this->levelMin) == false) { + // level of event is less than minimum + return LoggerFilter::DENY; + } + } - if($this->levelMax !== null) { - if ($level->toInt() > $this->levelMax->toInt()) { - // level of event is greater than maximum - // Alas, there is no Level.isGreater method. and using - // a combo of isGreaterOrEqual && !Equal seems worse than - // checking the int values of the level objects.. - return LOG4PHP_LOGGER_FILTER_DENY; - } - } + if($this->levelMax !== null) { + if($level->toInt() > $this->levelMax->toInt()) { + // level of event is greater than maximum + // Alas, there is no Level.isGreater method. and using + // a combo of isGreaterOrEqual && !Equal seems worse than + // checking the int values of the level objects.. + return LoggerFilter::DENY; + } + } - if ($this->getAcceptOnMatch()) { - // this filter set up to bypass later filters and always return - // accept if level in range - return LOG4PHP_LOGGER_FILTER_ACCEPT; - } else { - // event is ok for this filter; allow later filters to have a look.. - return LOG4PHP_LOGGER_FILTER_NEUTRAL; - } - } + if($this->acceptOnMatch) { + // this filter set up to bypass later filters and always return + // accept if level in range + return LoggerFilter::ACCEPT; + } else { + // event is ok for this filter; allow later filters to have a look.. + return LoggerFilter::NEUTRAL; + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/varia/LoggerStringMatchFilter.php b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterStringMatch.php index 80c5b58..464c0c1 100644 --- a/thirdparty/apache-log4php/src/main/php/varia/LoggerStringMatchFilter.php +++ b/thirdparty/apache-log4php/src/main/php/filters/LoggerFilterStringMatch.php @@ -1,13 +1,13 @@ AcceptOnMatch option value is true, if it is false then - * {@link LOG4PHP_LOGGER_FILTER_DENY} is returned. If there is no match, {@link LOG4PHP_LOGGER_FILTER_NEUTRAL} + * {@link LoggerFilter::DENY} is returned. If there is no match, {@link LoggerFilter::NEUTRAL} * is returned.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 779002 $ * @package log4php * @subpackage varia * @since 0.3 */ -class LoggerStringMatchFilter extends LoggerFilter { - - /** - * @var boolean - */ - var $acceptOnMatch = true; +class LoggerFilterStringMatch extends LoggerFilter { + + /** + * @var boolean + */ + private $acceptOnMatch = true; + + /** + * @var string + */ + private $stringToMatch = null; - /** - * @var string - */ - var $stringToMatch = null; - - /** - * @return boolean - */ - function getAcceptOnMatch() - { - return $this->acceptOnMatch; - } - - /** - * @param mixed $acceptOnMatch a boolean or a string ('true' or 'false') - */ - function setAcceptOnMatch($acceptOnMatch) - { - $this->acceptOnMatch = is_bool($acceptOnMatch) ? - $acceptOnMatch : - (bool)(strtolower($acceptOnMatch) == 'true'); - } - - /** - * @return string - */ - function getStringToMatch() - { - return $this->stringToMatch; - } - - /** - * @param string $s the string to match - */ - function setStringToMatch($s) - { - $this->stringToMatch = $s; - } + /** + * @param mixed $acceptOnMatch a boolean or a string ('true' or 'false') + */ + public function setAcceptOnMatch($acceptOnMatch) { + $this->acceptOnMatch = is_bool($acceptOnMatch) ? $acceptOnMatch : (bool)(strtolower($acceptOnMatch) == 'true'); + } + + /** + * @param string $s the string to match + */ + public function setStringToMatch($s) { + $this->stringToMatch = $s; + } - /** - * @return integer a {@link LOGGER_FILTER_NEUTRAL} is there is no string match. - */ - function decide($event) - { - $msg = $event->getRenderedMessage(); - - if($msg === null or $this->stringToMatch === null) - return LOG4PHP_LOGGER_FILTER_NEUTRAL; - if( strpos($msg, $this->stringToMatch) !== false ) { - return ($this->acceptOnMatch) ? LOG4PHP_LOGGER_FILTER_ACCEPT : LOG4PHP_LOGGER_FILTER_DENY ; - } - return LOG4PHP_LOGGER_FILTER_NEUTRAL; - } + /** + * @return integer a {@link LOGGER_FILTER_NEUTRAL} is there is no string match. + */ + public function decide(LoggerLoggingEvent $event) { + $msg = $event->getRenderedMessage(); + + if($msg === null or $this->stringToMatch === null) { + return LoggerFilter::NEUTRAL; + } + + if(strpos($msg, $this->stringToMatch) !== false ) { + return ($this->acceptOnMatch) ? LoggerFilter::ACCEPT : LoggerFilter::DENY; + } + return LoggerFilter::NEUTRAL; + } } diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerBasicPatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerBasicPatternConverter.php new file mode 100644 index 0000000..2dd152a --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerBasicPatternConverter.php @@ -0,0 +1,73 @@ +LoggerPatternConverter($formattingInfo); + $this->type = $type; + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function convert($event) { + switch($this->type) { + case LOG4PHP_LOGGER_PATTERN_PARSER_RELATIVE_TIME_CONVERTER: + $timeStamp = $event->getTimeStamp(); + $startTime = LoggerLoggingEvent::getStartTime(); + return (string)(int)($timeStamp * 1000 - $startTime * 1000); + + case LOG4PHP_LOGGER_PATTERN_PARSER_THREAD_CONVERTER: + return $event->getThreadName(); + + case LOG4PHP_LOGGER_PATTERN_PARSER_LEVEL_CONVERTER: + $level = $event->getLevel(); + return $level->toString(); + + case LOG4PHP_LOGGER_PATTERN_PARSER_NDC_CONVERTER: + return $event->getNDC(); + + case LOG4PHP_LOGGER_PATTERN_PARSER_MESSAGE_CONVERTER: + return $event->getRenderedMessage(); + + default: + return ''; + } + } +} diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerCategoryPatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerCategoryPatternConverter.php new file mode 100644 index 0000000..c1f2178 --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerCategoryPatternConverter.php @@ -0,0 +1,46 @@ +LoggerNamedPatternConverter($formattingInfo, $precision); + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function getFullyQualifiedName($event) { + return $event->getLoggerName(); + } +} diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerClassNamePatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerClassNamePatternConverter.php new file mode 100644 index 0000000..03cab0f --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerClassNamePatternConverter.php @@ -0,0 +1,47 @@ +LoggerNamedPatternConverter($formattingInfo, $precision); + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function getFullyQualifiedName($event) { + return $event->fqcn; + } +} + diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerDatePatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerDatePatternConverter.php new file mode 100644 index 0000000..228ce0f --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerDatePatternConverter.php @@ -0,0 +1,55 @@ +LoggerPatternConverter($formattingInfo); + $this->df = $df; + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function convert($event) { + $timeStamp = $event->getTimeStamp(); + $usecs = round(($timeStamp - (int)$timeStamp) * 1000); + $this->df = preg_replace('/((?df); + return date($this->df, $event->getTimeStamp()); + } +} diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerFormattingInfo.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerFormattingInfo.php index 70a7f52..e0436ea 100644 --- a/thirdparty/apache-log4php/src/main/php/helpers/LoggerFormattingInfo.php +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerFormattingInfo.php @@ -1,13 +1,13 @@ min = -1; - $this->max = 0x7FFFFFFF; - $this->leftAlign = false; - } + /** + * Constructor + */ + function LoggerFormattingInfo() {} + + function reset() { + $this->min = -1; + $this->max = 0x7FFFFFFF; + $this->leftAlign = false; + } - function dump() - { - LoggerLog::debug("LoggerFormattingInfo::dump() min={$this->min}, max={$this->max}, leftAlign={$this->leftAlign}"); - } -} + function dump() { + // TODO: other option to dump? + // LoggerLog::debug("LoggerFormattingInfo::dump() min={$this->min}, max={$this->max}, leftAlign={$this->leftAlign}"); + } +} diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerLiteralPatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerLiteralPatternConverter.php new file mode 100644 index 0000000..6a979dd --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerLiteralPatternConverter.php @@ -0,0 +1,59 @@ +literal = $value; + } + + /** + * @param string &$sbuf + * @param LoggerLoggingEvent $event + */ + function format(&$sbuf, $event) { + $sbuf .= $this->literal; + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function convert($event) { + return $this->literal; + } +} + diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerLocationPatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerLocationPatternConverter.php new file mode 100644 index 0000000..01e474d --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerLocationPatternConverter.php @@ -0,0 +1,65 @@ +LoggerPatternConverter($formattingInfo); + $this->type = $type; + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function convert($event) { + $locationInfo = $event->getLocationInformation(); + switch($this->type) { + case LOG4PHP_LOGGER_PATTERN_PARSER_FULL_LOCATION_CONVERTER: + return $locationInfo->getFullInfo(); + case LOG4PHP_LOGGER_PATTERN_PARSER_METHOD_LOCATION_CONVERTER: + return $locationInfo->getMethodName(); + case LOG4PHP_LOGGER_PATTERN_PARSER_LINE_LOCATION_CONVERTER: + return $locationInfo->getLineNumber(); + case LOG4PHP_LOGGER_PATTERN_PARSER_FILE_LOCATION_CONVERTER: + return $locationInfo->getFileName(); + default: + return ''; + } + } +} + diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerMDCPatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerMDCPatternConverter.php new file mode 100644 index 0000000..03eada6 --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerMDCPatternConverter.php @@ -0,0 +1,52 @@ +LoggerPatternConverter($formattingInfo); + $this->key = $key; + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function convert($event) { + return $event->getMDC($this->key); + } +} diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerNamedPatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerNamedPatternConverter.php new file mode 100644 index 0000000..05abb68 --- /dev/null +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerNamedPatternConverter.php @@ -0,0 +1,79 @@ +LoggerPatternConverter($formattingInfo); + $this->precision = $precision; + } + + /** + * @param LoggerLoggingEvent $event + * @return string + * @abstract + */ + function getFullyQualifiedName($event) { + // abstract + return; + } + + /** + * @param LoggerLoggingEvent $event + * @return string + */ + function convert($event) { + $n = $this->getFullyQualifiedName($event); + if($this->precision <= 0) { + return $n; + } else { + $len = strlen($n); + // We substract 1 from 'len' when assigning to 'end' to avoid out of + // bounds exception in return r.substring(end+1, len). This can happen if + // precision is 1 and the category name ends with a dot. + $end = $len -1 ; + for($i = $this->precision; $i > 0; $i--) { + $end = strrpos(substr($n, 0, ($end - 1)), '.'); + if($end == false) { + return $n; + } + } + return substr($n, ($end + 1), $len); + } + } +} diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerOptionConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerOptionConverter.php index a26dd83..773dc1c 100644 --- a/thirdparty/apache-log4php/src/main/php/helpers/LoggerOptionConverter.php +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerOptionConverter.php @@ -1,13 +1,13 @@ $key using this search criteria: - * - if $key is a constant then return it. Else - * - if $key is set in $_ENV then return it. Else - * - return $def. - * - * @param string $key The key to search for. - * @param string $def The default value to return. - * @return string the string value of the system property, or the default - * value if there is no property with that key. - * - * @static - */ - public static function getSystemProperty($key, $def) - { - LoggerLog::debug("LoggerOptionConverter::getSystemProperty():key=[{$key}]:def=[{$def}]."); - - if (defined($key)) { - return (string)constant($key); - } elseif (isset($_ENV[$key])) { - return (string)$_ENV[$key]; - } else { - return $def; - } - } - - /** - * If $value is true, then true is - * returned. If $value is false, then - * true is returned. Otherwise, $default is - * returned. - * - *

Case of value is unimportant.

- * - * @param string $value - * @param boolean $default - * @return boolean - * - * @static - */ - public static function toBoolean($value, $default) - { - if($value === null) - return $default; - if ($value == 1) - return true; - $trimmedVal = strtolower(trim($value)); - if ("true" == $trimmedVal or "yes" == $trimmedVal) - return true; - if ("false" == $trimmedVal) - return false; - return $default; - } - - /** - * @param string $value - * @param integer $default - * @return integer - * @static - */ - public static function toInt($value, $default) - { - $value = trim($value); - if (is_numeric($value)) { - return (int)$value; - } else { - return $default; - } - } + const DELIM_START = '${'; + const DELIM_STOP = '}'; + const DELIM_START_LEN = 2; + const DELIM_STOP_LEN = 1; - /** - * Converts a standard or custom priority level to a Level - * object. - * - *

If $value is of form "level#full_file_classname", - * where full_file_classname means the class filename with path - * but without php extension, then the specified class' toLevel() method - * is called to process the specified level string; if no '#' - * character is present, then the default {@link LoggerLevel} - * class is used to process the level value.

- * - *

As a special case, if the $value parameter is - * equal to the string "NULL", then the value null will - * be returned.

- * - *

If any error occurs while converting the value to a level, - * the $defaultValue parameter, which may be - * null, is returned.

- * - *

Case of $value is insignificant for the level level, but is - * significant for the class name part, if present.

- * - * @param string $value - * @param LoggerLevel $defaultValue - * @return LoggerLevel a {@link LoggerLevel} or null - * @static - */ - public static function toLevel($value, $defaultValue) - { - if($value === null) - return $defaultValue; + /** + * Read a predefined var. + * + * It returns a value referenced by $key using this search criteria: + * - if $key is a constant then return it. Else + * - if $key is set in $_ENV then return it. Else + * - return $def. + * + * @param string $key The key to search for. + * @param string $def The default value to return. + * @return string the string value of the system property, or the default + * value if there is no property with that key. + * + * @static + */ + public static function getSystemProperty($key, $def) { + if(defined($key)) { + return (string)constant($key); + } else if(isset($_SERVER[$key])) { + return (string)$_SERVER[$key]; + } else if(isset($_ENV[$key])) { + return (string)$_ENV[$key]; + } else { + return $def; + } + } - $hashIndex = strpos($value, '#'); - if ($hashIndex === false) { - if("NULL" == strtoupper($value)) { - return null; - } else { - // no class name specified : use standard Level class - return LoggerLevel::toLevel($value, $defaultValue); - } - } + /** + * If $value is true, then true is + * returned. If $value is false, then + * true is returned. Otherwise, $default is + * returned. + * + *

Case of value is unimportant.

+ * + * @param string $value + * @param boolean $default + * @return boolean + * + * @static + */ + public static function toBoolean($value, $default) { + if($value === null) { + return $default; + } + if($value == 1) { + return true; + } + $trimmedVal = strtolower(trim($value)); + if("true" == $trimmedVal or "yes" == $trimmedVal) { + return true; + } + if("false" == $trimmedVal) { + return false; + } + return $default; + } - $result = $defaultValue; + /** + * @param string $value + * @param integer $default + * @return integer + * @static + */ + public static function toInt($value, $default) { + $value = trim($value); + if(is_numeric($value)) { + return (int)$value; + } else { + return $default; + } + } - $clazz = substr($value, ($hashIndex + 1)); - $levelName = substr($value, 0, $hashIndex); + /** + * Converts a standard or custom priority level to a Level + * object. + * + *

If $value is of form "level#full_file_classname", + * where full_file_classname means the class filename with path + * but without php extension, then the specified class' toLevel() method + * is called to process the specified level string; if no '#' + * character is present, then the default {@link LoggerLevel} + * class is used to process the level value.

+ * + *

As a special case, if the $value parameter is + * equal to the string "NULL", then the value null will + * be returned.

+ * + *

If any error occurs while converting the value to a level, + * the $defaultValue parameter, which may be + * null, is returned.

+ * + *

Case of $value is insignificant for the level level, but is + * significant for the class name part, if present.

+ * + * @param string $value + * @param LoggerLevel $defaultValue + * @return LoggerLevel a {@link LoggerLevel} or null + * @static + */ + public static function toLevel($value, $defaultValue) { + if($value === null) { + return $defaultValue; + } + $hashIndex = strpos($value, '#'); + if($hashIndex === false) { + if("NULL" == strtoupper($value)) { + return null; + } else { + // no class name specified : use standard Level class + return LoggerLevel::toLevel($value, $defaultValue); + } + } - // This is degenerate case but you never know. - if("NULL" == strtoupper($levelName)) { - return null; - } + $result = $defaultValue; - LoggerLog::debug("LoggerOptionConverter::toLevel():class=[{$clazz}]:pri=[{$levelName}]"); + $clazz = substr($value, ($hashIndex + 1)); + $levelName = substr($value, 0, $hashIndex); - if (!class_exists($clazz)) - @include_once("{$clazz}.php"); + // This is degenerate case but you never know. + if("NULL" == strtoupper($levelName)) { + return null; + } - $clazz = basename($clazz); + $clazz = basename($clazz); - if (class_exists($clazz)) { - $result = @call_user_func(array($clazz, 'toLevel'), $levelName, $defaultValue); - if (!is_a($result, 'loggerlevel')) { - LoggerLog::debug("LoggerOptionConverter::toLevel():class=[{$clazz}] cannot call toLevel(). Returning default."); - $result = $defaultValue; - } - } else { - LoggerLog::warn("LoggerOptionConverter::toLevel() class '{$clazz}' doesnt exists."); - } - return $result; - } + if(class_exists($clazz)) { + $result = @call_user_func(array($clazz, 'toLevel'), $levelName, $defaultValue); + if(!$result instanceof LoggerLevel) { + $result = $defaultValue; + } + } + return $result; + } - /** - * @param string $value - * @param float $default - * @return float - * - * @static - */ - public static function toFileSize($value, $default) - { - if ($value === null) - return $default; + /** + * @param string $value + * @param float $default + * @return float + * + * @static + */ + public static function toFileSize($value, $default) { + if($value === null) { + return $default; + } - $s = strtoupper(trim($value)); - $multiplier = (float)1; - if(($index = strpos($s, 'KB')) !== false) { - $multiplier = 1024; - $s = substr($s, 0, $index); - } elseif(($index = strpos($s, 'MB')) !== false) { - $multiplier = 1024 * 1024; - $s = substr($s, 0, $index); - } elseif(($index = strpos($s, 'GB')) !== false) { - $multiplier = 1024 * 1024 * 1024; - $s = substr($s, 0, $index); - } - if(is_numeric($s)) { - return (float)$s * $multiplier; - } else { - LoggerLog::warn("LoggerOptionConverter::toFileSize() [{$s}] is not in proper form."); - } - return $default; - } + $s = strtoupper(trim($value)); + $multiplier = (float)1; + if(($index = strpos($s, 'KB')) !== false) { + $multiplier = 1024; + $s = substr($s, 0, $index); + } else if(($index = strpos($s, 'MB')) !== false) { + $multiplier = 1024 * 1024; + $s = substr($s, 0, $index); + } else if(($index = strpos($s, 'GB')) !== false) { + $multiplier = 1024 * 1024 * 1024; + $s = substr($s, 0, $index); + } + if(is_numeric($s)) { + return (float)$s * $multiplier; + } + return $default; + } - /** - * Find the value corresponding to $key in - * $props. Then perform variable substitution on the - * found value. - * - * @param string $key - * @param array $props - * @return string - * - * @static - */ - public static function findAndSubst($key, $props) - { - $value = @$props[$key]; - if(empty($value)) { - return null; - } - return LoggerOptionConverter::substVars($value, $props); - } + /** + * Find the value corresponding to $key in + * $props. Then perform variable substitution on the + * found value. + * + * @param string $key + * @param array $props + * @return string + * + * @static + */ + public static function findAndSubst($key, $props) { + $value = @$props[$key]; + if(!empty($value)) { + return LoggerOptionConverter::substVars($value, $props); + } + } - /** - * Perform variable substitution in string $val from the - * values of keys found with the {@link getSystemProperty()} method. - * - *

The variable substitution delimeters are ${ and }. - * - *

For example, if the "MY_CONSTANT" contains "value", then - * the call - * - * $s = LoggerOptionConverter::substituteVars("Value of key is ${MY_CONSTANT}."); - * - * will set the variable $s to "Value of key is value.".

- * - *

If no value could be found for the specified key, then the - * $props parameter is searched, if the value could not - * be found there, then substitution defaults to the empty string.

- * - *

For example, if {@link getSystemProperty()} cannot find any value for the key - * "inexistentKey", then the call - * - * $s = LoggerOptionConverter::substVars("Value of inexistentKey is [${inexistentKey}]"); - * - * will set $s to "Value of inexistentKey is []".

- * - *

A warn is thrown if $val contains a start delimeter "${" - * which is not balanced by a stop delimeter "}" and an empty string is returned.

- * - * @log4j-author Avy Sharell - * - * @param string $val The string on which variable substitution is performed. - * @param array $props - * @return string - * - * @static - */ - public static function substVars($val, $props = null) - { - LoggerLog::debug("LoggerOptionConverter::substVars():val=[{$val}]"); - - $sbuf = ''; - $i = 0; - while(true) { - $j = strpos($val, LOG4PHP_OPTION_CONVERTER_DELIM_START, $i); - if ($j === false) { - LoggerLog::debug("LoggerOptionConverter::substVars() no more variables"); - // no more variables - if ($i == 0) { // this is a simple string - LoggerLog::debug("LoggerOptionConverter::substVars() simple string"); - return $val; - } else { // add the tail string which contails no variables and return the result. - $sbuf .= substr($val, $i); - LoggerLog::debug("LoggerOptionConverter::substVars():sbuf=[{$sbuf}]. Returning sbuf"); - return $sbuf; - } - } else { - - $sbuf .= substr($val, $i, $j-$i); - LoggerLog::debug("LoggerOptionConverter::substVars():sbuf=[{$sbuf}]:i={$i}:j={$j}."); - $k = strpos($val, LOG4PHP_OPTION_CONVERTER_DELIM_STOP, $j); - if ($k === false) { - LoggerLog::warn( - "LoggerOptionConverter::substVars() " . - "'{$val}' has no closing brace. Opening brace at position {$j}." - ); - return ''; - } else { - $j += LOG4PHP_OPTION_CONVERTER_DELIM_START_LEN; - $key = substr($val, $j, $k - $j); - // first try in System properties - $replacement = LoggerOptionConverter::getSystemProperty($key, null); - // then try props parameter - if($replacement == null and $props !== null) { - $replacement = @$props[$key]; - } + /** + * Perform variable substitution in string $val from the + * values of keys found with the {@link getSystemProperty()} method. + * + *

The variable substitution delimeters are ${ and }. + * + *

For example, if the "MY_CONSTANT" contains "value", then + * the call + * + * $s = LoggerOptionConverter::substituteVars("Value of key is ${MY_CONSTANT}."); + * + * will set the variable $s to "Value of key is value.".

+ * + *

If no value could be found for the specified key, then the + * $props parameter is searched, if the value could not + * be found there, then substitution defaults to the empty string.

+ * + *

For example, if {@link getSystemProperty()} cannot find any value for the key + * "inexistentKey", then the call + * + * $s = LoggerOptionConverter::substVars("Value of inexistentKey is [${inexistentKey}]"); + * + * will set $s to "Value of inexistentKey is []".

+ * + *

A warn is thrown if $val contains a start delimeter "${" + * which is not balanced by a stop delimeter "}" and an empty string is returned.

+ * + * @log4j-author Avy Sharell + * + * @param string $val The string on which variable substitution is performed. + * @param array $props + * @return string + * + * @static + */ + // TODO: this method doesn't work correctly with key = true, it needs key = "true" which is odd + public static function substVars($val, $props = null) { + $sbuf = ''; + $i = 0; + while(true) { + $j = strpos($val, self::DELIM_START, $i); + if($j === false) { + // no more variables + if($i == 0) { // this is a simple string + return $val; + } else { // add the tail string which contails no variables and return the result. + $sbuf .= substr($val, $i); + return $sbuf; + } + } else { + + $sbuf .= substr($val, $i, $j-$i); + $k = strpos($val, self::DELIM_STOP, $j); + if($k === false) { + // LoggerOptionConverter::substVars() has no closing brace. Opening brace + return ''; + } else { + $j += self::START_LEN; + $key = substr($val, $j, $k - $j); + // first try in System properties + $replacement = LoggerOptionConverter::getSystemProperty($key, null); + // then try props parameter + if($replacement == null and $props !== null) { + $replacement = @$props[$key]; + } - if(!empty($replacement)) { - // Do variable substitution on the replacement string - // such that we can solve "Hello ${x2}" as "Hello p1" - // the where the properties are - // x1=p1 - // x2=${x1} - $recursiveReplacement = LoggerOptionConverter::substVars($replacement, $props); - $sbuf .= $recursiveReplacement; - } - $i = $k + LOG4PHP_OPTION_CONVERTER_DELIM_STOP_LEN; - } - } - } - } + if(!empty($replacement)) { + // Do variable substitution on the replacement string + // such that we can solve "Hello ${x2}" as "Hello p1" + // the where the properties are + // x1=p1 + // x2=${x1} + $recursiveReplacement = LoggerOptionConverter::substVars($replacement, $props); + $sbuf .= $recursiveReplacement; + } + $i = $k + self::DELIM_STOP_LEN; + } + } + } + } } diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternConverter.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternConverter.php index a163c94..465bd1d 100644 --- a/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternConverter.php +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternConverter.php @@ -1,13 +1,13 @@ * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 778046 $ * @package log4php * @subpackage helpers * @abstract @@ -54,453 +49,89 @@ $GLOBALS['log4php.LoggerPatternConverter.spaces'] = array(" ", " ", " ", " */ class LoggerPatternConverter { - /** - * @var LoggerPatternConverter next converter in converter chain - */ - var $next = null; - - var $min = -1; - var $max = 0x7FFFFFFF; - var $leftAlign = false; - - /** - * Constructor - * - * @param LoggerFormattingInfo $fi - */ - function LoggerPatternConverter($fi = null) - { - if ($fi !== null) { - $this->min = $fi->min; - $this->max = $fi->max; - $this->leftAlign = $fi->leftAlign; - } - } + /** + * @var LoggerPatternConverter next converter in converter chain + */ + var $next = null; + + var $min = -1; + var $max = 0x7FFFFFFF; + var $leftAlign = false; + + /** + * Constructor + * + * @param LoggerFormattingInfo $fi + */ + function LoggerPatternConverter($fi = null) { + if($fi !== null) { + $this->min = $fi->min; + $this->max = $fi->max; + $this->leftAlign = $fi->leftAlign; + } + } - /** - * Derived pattern converters must override this method in order to - * convert conversion specifiers in the correct way. - * - * @param LoggerLoggingEvent $event - */ - function convert($event) {} - - /** - * A template method for formatting in a converter specific way. - * - * @param string &$sbuf string buffer - * @param LoggerLoggingEvent $e - */ - function format(&$sbuf, $e) - { - LoggerLog::debug("LoggerPatternConverter::format() sbuf='$sbuf'"); - - $s = $this->convert($e); - - LoggerLog::debug("LoggerPatternConverter::format() converted event is '$s'"); - - - if($s == null or empty($s)) { - if(0 < $this->min) - $this->spacePad($sbuf, $this->min); - return; - } - - $len = strlen($s); - - if($len > $this->max) { - $sbuf .= substr($s , 0, ($len - $this->max)); - } elseif($len < $this->min) { - if($this->leftAlign) { - $sbuf .= $s; - $this->spacePad($sbuf, ($this->min - $len)); - } else { - $this->spacePad($sbuf, ($this->min - $len)); - $sbuf .= $s; - } - } else { - $sbuf .= $s; - } - } - - - /** - * Fast space padding method. - * - * @param string &$sbuf string buffer - * @param integer $length pad length - * - * @todo reimplement using PHP string functions - */ - function spacePad(&$sbuf, $length) - { - LoggerLog::debug("LoggerPatternConverter::spacePad() sbuf='$sbuf' len='$length'"); - - while($length >= 32) { - $sbuf .= $GLOBALS['log4php.LoggerPatternConverter.spaces'][5]; - $length -= 32; - } - - for($i = 4; $i >= 0; $i--) { - if(($length & (1<<$i)) != 0) { - $sbuf .= $GLOBALS['log4php.LoggerPatternConverter.spaces'][$i]; - } - } - - // $sbuf = str_pad($sbuf, $length); - } -} - -// --------------------------------------------------------------------- -// PatternConverters -// --------------------------------------------------------------------- - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - */ -class LoggerBasicPatternConverter extends LoggerPatternConverter { - - /** - * @var integer - */ - var $type; - - /** - * Constructor - * - * @param string $formattingInfo - * @param integer $type - */ - function LoggerBasicPatternConverter($formattingInfo, $type) - { - LoggerLog::debug("LoggerBasicPatternConverter::LoggerBasicPatternConverter() type='$type'"); - - $this->LoggerPatternConverter($formattingInfo); - $this->type = $type; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function convert($event) - { - switch($this->type) { - case LOG4PHP_LOGGER_PATTERN_PARSER_RELATIVE_TIME_CONVERTER: - $timeStamp = $event->getTimeStamp(); - $startTime = LoggerLoggingEvent::getStartTime(); - return (string)(int)($timeStamp * 1000 - $startTime * 1000); - - case LOG4PHP_LOGGER_PATTERN_PARSER_THREAD_CONVERTER: - return $event->getThreadName(); - - case LOG4PHP_LOGGER_PATTERN_PARSER_LEVEL_CONVERTER: - $level = $event->getLevel(); - return $level->toString(); - - case LOG4PHP_LOGGER_PATTERN_PARSER_NDC_CONVERTER: - return $event->getNDC(); - - case LOG4PHP_LOGGER_PATTERN_PARSER_MESSAGE_CONVERTER: - return $event->getRenderedMessage(); - - default: - return ''; - } - } -} - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - */ -class LoggerLiteralPatternConverter extends LoggerPatternConverter { - - /** - * @var string - */ - var $literal; - - /** - * Constructor - * - * @param string $value - */ - function LoggerLiteralPatternConverter($value) - { - LoggerLog::debug("LoggerLiteralPatternConverter::LoggerLiteralPatternConverter() value='$value'"); - - $this->literal = $value; - } - - /** - * @param string &$sbuf - * @param LoggerLoggingEvent $event - */ - function format(&$sbuf, $event) - { - $sbuf .= $this->literal; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function convert($event) - { - return $this->literal; - } -} - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - */ -class LoggerDatePatternConverter extends LoggerPatternConverter { - - /** - * @var string - */ - var $df; - - /** - * Constructor - * - * @param string $formattingInfo - * @param string $df - */ - function LoggerDatePatternConverter($formattingInfo, $df) - { - LoggerLog::debug("LoggerDatePatternConverter::LoggerDatePatternConverter() dateFormat='$df'"); - - $this->LoggerPatternConverter($formattingInfo); - $this->df = $df; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function convert($event) - { - $timeStamp = $event->getTimeStamp(); - $usecs = round(($timeStamp - (int)$timeStamp) * 1000); - $this->df = str_replace("\u", "u", ereg_replace("[^\\]u", sprintf(',%03d', $usecs), $this->df)); - - return date($this->df, $event->getTimeStamp()); - - } -} - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - */ -class LoggerMDCPatternConverter extends LoggerPatternConverter { - - /** - * @var string - */ - var $key; - - /** - * Constructor - * - * @param string $formattingInfo - * @param string $key - */ - function LoggerMDCPatternConverter($formattingInfo, $key) - { - LoggerLog::debug("LoggerMDCPatternConverter::LoggerMDCPatternConverter() key='$key'"); - - $this->LoggerPatternConverter($formattingInfo); - $this->key = $key; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function convert($event) - { - return $event->getMDC($this->key); - } -} - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - */ -class LoggerLocationPatternConverter extends LoggerPatternConverter { - - /** - * @var integer - */ - var $type; - - /** - * Constructor - * - * @param string $formattingInfo - * @param integer $type - */ - function LoggerLocationPatternConverter($formattingInfo, $type) - { - LoggerLog::debug("LoggerLocationPatternConverter::LoggerLocationPatternConverter() type='$type'"); - - $this->LoggerPatternConverter($formattingInfo); - $this->type = $type; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function convert($event) - { - $locationInfo = $event->getLocationInformation(); - switch($this->type) { - case LOG4PHP_LOGGER_PATTERN_PARSER_FULL_LOCATION_CONVERTER: - return $locationInfo->fullInfo; - case LOG4PHP_LOGGER_PATTERN_PARSER_METHOD_LOCATION_CONVERTER: - return $locationInfo->getMethodName(); - case LOG4PHP_LOGGER_PATTERN_PARSER_LINE_LOCATION_CONVERTER: - return $locationInfo->getLineNumber(); - case LOG4PHP_LOGGER_PATTERN_PARSER_FILE_LOCATION_CONVERTER: - return $locationInfo->getFileName(); - default: - return ''; - } - } -} - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - * @abstract - */ -class LoggerNamedPatternConverter extends LoggerPatternConverter { - - /** - * @var integer - */ - var $precision; - - /** - * Constructor - * - * @param string $formattingInfo - * @param integer $precision - */ - function LoggerNamedPatternConverter($formattingInfo, $precision) - { - LoggerLog::debug("LoggerNamedPatternConverter::LoggerNamedPatternConverter() precision='$precision'"); - - $this->LoggerPatternConverter($formattingInfo); - $this->precision = $precision; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - * @abstract - */ - function getFullyQualifiedName($event) - { - // abstract - return; - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function convert($event) - { - $n = $this->getFullyQualifiedName($event); - if ($this->precision <= 0) { - return $n; - } else { - $len = strlen($n); - - // We substract 1 from 'len' when assigning to 'end' to avoid out of - // bounds exception in return r.substring(end+1, len). This can happen if - // precision is 1 and the category name ends with a dot. - $end = $len -1 ; - for($i = $this->precision; $i > 0; $i--) { - $end = strrpos(substr($n, 0, ($end - 1)), '.'); - if ($end == false) - return $n; - } - return substr($n, ($end + 1), $len); - } - } -} - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - */ -class LoggerClassNamePatternConverter extends LoggerNamedPatternConverter { - - /** - * Constructor - * - * @param string $formattingInfo - * @param integer $precision - */ - function LoggerClassNamePatternConverter($formattingInfo, $precision) - { - LoggerLog::debug("LoggerClassNamePatternConverter::LoggerClassNamePatternConverter() precision='$precision'"); - - $this->LoggerNamedPatternConverter($formattingInfo, $precision); - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function getFullyQualifiedName($event) - { - return $event->fqcn; - } + /** + * Derived pattern converters must override this method in order to + * convert conversion specifiers in the correct way. + * + * @param LoggerLoggingEvent $event + */ + function convert($event) {} + + /** + * A template method for formatting in a converter specific way. + * + * @param string &$sbuf string buffer + * @param LoggerLoggingEvent $e + */ + function format(&$sbuf, $e) { + $s = $this->convert($e); + + if($s == null or empty($s)) { + if(0 < $this->min) { + $this->spacePad($sbuf, $this->min); + } + return; + } + + $len = strlen($s); + + if($len > $this->max) { + $sbuf .= substr($s , 0, ($len - $this->max)); + } else if($len < $this->min) { + if($this->leftAlign) { + $sbuf .= $s; + $this->spacePad($sbuf, ($this->min - $len)); + } else { + $this->spacePad($sbuf, ($this->min - $len)); + $sbuf .= $s; + } + } else { + $sbuf .= $s; + } + } + + /** + * Fast space padding method. + * + * @param string &$sbuf string buffer + * @param integer $length pad length + * + * @todo reimplement using PHP string functions + */ + function spacePad(&$sbuf, $length) { + while($length >= 32) { + $sbuf .= $GLOBALS['log4php.LoggerPatternConverter.spaces'][5]; + $length -= 32; + } + + for($i = 4; $i >= 0; $i--) { + if(($length & (1<<$i)) != 0) { + $sbuf .= $GLOBALS['log4php.LoggerPatternConverter.spaces'][$i]; + } + } + + // $sbuf = str_pad($sbuf, $length); + } } - -/** - * @author Marco Vassura - * @package log4php - * @subpackage helpers - */ -class LoggerCategoryPatternConverter extends LoggerNamedPatternConverter { - - /** - * Constructor - * - * @param string $formattingInfo - * @param integer $precision - */ - function LoggerCategoryPatternConverter($formattingInfo, $precision) - { - LoggerLog::debug("LoggerCategoryPatternConverter::LoggerCategoryPatternConverter() precision='$precision'"); - - $this->LoggerNamedPatternConverter($formattingInfo, $precision); - } - - /** - * @param LoggerLoggingEvent $event - * @return string - */ - function getFullyQualifiedName($event) - { - return $event->getLoggerName(); - } -} - diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternParser.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternParser.php index fd69105..ff2429d 100644 --- a/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternParser.php +++ b/thirdparty/apache-log4php/src/main/php/helpers/LoggerPatternParser.php @@ -1,13 +1,13 @@ It is this class that parses conversion patterns and creates * a chained list of {@link LoggerPatternConverter} converters.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 771204 $ * @package log4php * @subpackage helpers * @@ -86,323 +60,288 @@ define('LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_DATE', 'd M Y H:i:s,u'); */ class LoggerPatternParser { - var $state; - var $currentLiteral; - var $patternLength; - var $i; - - /** - * @var LoggerPatternConverter - */ - var $head = null; - - /** - * @var LoggerPatternConverter - */ - var $tail = null; - - /** - * @var LoggerFormattingInfo - */ - var $formattingInfo; - - /** - * @var string pattern to parse - */ - var $pattern; - - /** - * Constructor - * - * @param string $pattern - */ - function LoggerPatternParser($pattern) - { - LoggerLog::debug("LoggerPatternParser::LoggerPatternParser() pattern='$pattern'"); - - $this->pattern = $pattern; - $this->patternLength = strlen($pattern); - $this->formattingInfo = new LoggerFormattingInfo(); - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; - } - - /** - * @param LoggerPatternConverter $pc - */ - function addToList($pc) - { - // LoggerLog::debug("LoggerPatternParser::addToList()"); - - if($this->head == null) { - $this->head = $pc; - $this->tail =& $this->head; - } else { - $this->tail->next = $pc; - $this->tail =& $this->tail->next; - } - } + var $state; + var $currentLiteral; + var $patternLength; + var $i; + + /** + * @var LoggerPatternConverter + */ + var $head = null; + + /** + * @var LoggerPatternConverter + */ + var $tail = null; + + /** + * @var LoggerFormattingInfo + */ + var $formattingInfo; + + /** + * @var string pattern to parse + */ + var $pattern; - /** - * @return string - */ - function extractOption() - { - if(($this->i < $this->patternLength) and ($this->pattern{$this->i} == '{')) { - $end = strpos($this->pattern, '}' , $this->i); - if ($end !== false) { - $r = substr($this->pattern, ($this->i + 1), ($end - $this->i - 1)); - $this->i= $end + 1; - return $r; - } - } - return null; - } + /** + * Constructor + * + * @param string $pattern + */ + function LoggerPatternParser($pattern) { + $this->pattern = $pattern; + $this->patternLength = strlen($pattern); + $this->formattingInfo = new LoggerFormattingInfo(); + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; + } - /** - * The option is expected to be in decimal and positive. In case of - * error, zero is returned. - */ - function extractPrecisionOption() - { - $opt = $this->extractOption(); - $r = 0; - if ($opt !== null) { - if (is_numeric($opt)) { - $r = (int)$opt; - if($r <= 0) { - LoggerLog::warn("Precision option ({$opt}) isn't a positive integer."); - $r = 0; - } - } else { - LoggerLog::warn("Category option \"{$opt}\" not a decimal integer."); - } - } - return $r; - } + /** + * @param LoggerPatternConverter $pc + */ + function addToList($pc) { + if($this->head == null) { + $this->head = $pc; + $this->tail =& $this->head; + } else { + $this->tail->next = $pc; + $this->tail =& $this->tail->next; + } + } - function parse() - { - LoggerLog::debug("LoggerPatternParser::parse()"); - - $c = ''; - $this->i = 0; - $this->currentLiteral = ''; - while ($this->i < $this->patternLength) { - $c = $this->pattern{$this->i++}; -// LoggerLog::debug("LoggerPatternParser::parse() char is now '$c' and currentLiteral is '{$this->currentLiteral}'"); - switch($this->state) { - case LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE: - // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE'"); - // In literal state, the last char is always a literal. - if($this->i == $this->patternLength) { - $this->currentLiteral .= $c; - continue; - } - if($c == LOG4PHP_LOGGER_PATTERN_PARSER_ESCAPE_CHAR) { - // LoggerLog::debug("LoggerPatternParser::parse() char is an escape char"); - // peek at the next char. - switch($this->pattern{$this->i}) { - case LOG4PHP_LOGGER_PATTERN_PARSER_ESCAPE_CHAR: - // LoggerLog::debug("LoggerPatternParser::parse() next char is an escape char"); - $this->currentLiteral .= $c; - $this->i++; // move pointer - break; - case 'n': - // LoggerLog::debug("LoggerPatternParser::parse() next char is 'n'"); - $this->currentLiteral .= LOG4PHP_LINE_SEP; - $this->i++; // move pointer - break; - default: - if(strlen($this->currentLiteral) != 0) { - $this->addToList(new LoggerLiteralPatternConverter($this->currentLiteral)); - LoggerLog::debug("LoggerPatternParser::parse() Parsed LITERAL converter: \"{$this->currentLiteral}\"."); - } - $this->currentLiteral = $c; - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_CONVERTER_STATE; - $this->formattingInfo->reset(); - } - } else { - $this->currentLiteral .= $c; - } - break; - case LOG4PHP_LOGGER_PATTERN_PARSER_CONVERTER_STATE: - // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_CONVERTER_STATE'"); - $this->currentLiteral .= $c; - switch($c) { - case '-': - $this->formattingInfo->leftAlign = true; - break; - case '.': - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE; - break; - default: - if(ord($c) >= ord('0') and ord($c) <= ord('9')) { - $this->formattingInfo->min = ord($c) - ord('0'); - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_MIN_STATE; - } else { - $this->finalizeConverter($c); - } - } // switch - break; - case LOG4PHP_LOGGER_PATTERN_PARSER_MIN_STATE: - // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_MIN_STATE'"); - $this->currentLiteral .= $c; - if(ord($c) >= ord('0') and ord($c) <= ord('9')) { - $this->formattingInfo->min = ($this->formattingInfo->min * 10) + (ord($c) - ord('0')); - } elseif ($c == '.') { - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE; - } else { - $this->finalizeConverter($c); - } - break; - case LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE: - // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE'"); - $this->currentLiteral .= $c; - if(ord($c) >= ord('0') and ord($c) <= ord('9')) { - $this->formattingInfo->max = ord($c) - ord('0'); - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_MAX_STATE; - } else { - LoggerLog::warn("LoggerPatternParser::parse() Error occured in position {$this->i}. Was expecting digit, instead got char \"{$c}\"."); - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; - } - break; - case LOG4PHP_LOGGER_PATTERN_PARSER_MAX_STATE: - // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_MAX_STATE'"); - $this->currentLiteral .= $c; - if(ord($c) >= ord('0') and ord($c) <= ord('9')) { - $this->formattingInfo->max = ($this->formattingInfo->max * 10) + (ord($c) - ord('0')); - } else { - $this->finalizeConverter($c); - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; - } - break; - } // switch - } // while - if(strlen($this->currentLiteral) != 0) { - $this->addToList(new LoggerLiteralPatternConverter($this->currentLiteral)); - // LoggerLog::debug("LoggerPatternParser::parse() Parsed LITERAL converter: \"{$this->currentLiteral}\"."); - } - return $this->head; - } + /** + * @return string + */ + function extractOption() { + if(($this->i < $this->patternLength) and ($this->pattern{$this->i} == '{')) { + $end = strpos($this->pattern, '}' , $this->i); + if($end !== false) { + $r = substr($this->pattern, ($this->i + 1), ($end - $this->i - 1)); + $this->i= $end + 1; + return $r; + } + } + return null; + } - function finalizeConverter($c) - { - LoggerLog::debug("LoggerPatternParser::finalizeConverter() with char '$c'"); + /** + * The option is expected to be in decimal and positive. In case of + * error, zero is returned. + */ + function extractPrecisionOption() { + $opt = $this->extractOption(); + $r = 0; + if($opt !== null) { + if(is_numeric($opt)) { + $r = (int)$opt; + if($r <= 0) { + $r = 0; + } + } + } + return $r; + } - $pc = null; - switch($c) { - case 'c': - $pc = new LoggerCategoryPatternConverter($this->formattingInfo, $this->extractPrecisionOption()); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() CATEGORY converter."); - $this->currentLiteral = ''; - break; - case 'C': - $pc = new LoggerClassNamePatternConverter($this->formattingInfo, $this->extractPrecisionOption()); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() CLASSNAME converter."); - $this->currentLiteral = ''; - break; - case 'd': - $dateFormatStr = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ISO8601; // ISO8601_DATE_FORMAT; - $dOpt = $this->extractOption(); + function parse() { + $c = ''; + $this->i = 0; + $this->currentLiteral = ''; + while($this->i < $this->patternLength) { + $c = $this->pattern{$this->i++}; +// LoggerLog::debug("LoggerPatternParser::parse() char is now '$c' and currentLiteral is '{$this->currentLiteral}'"); + switch($this->state) { + case LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE: + // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE'"); + // In literal state, the last char is always a literal. + if($this->i == $this->patternLength) { + $this->currentLiteral .= $c; + continue; + } + if($c == LOG4PHP_LOGGER_PATTERN_PARSER_ESCAPE_CHAR) { + // LoggerLog::debug("LoggerPatternParser::parse() char is an escape char"); + // peek at the next char. + switch($this->pattern{$this->i}) { + case LOG4PHP_LOGGER_PATTERN_PARSER_ESCAPE_CHAR: + // LoggerLog::debug("LoggerPatternParser::parse() next char is an escape char"); + $this->currentLiteral .= $c; + $this->i++; // move pointer + break; + case 'n': + // LoggerLog::debug("LoggerPatternParser::parse() next char is 'n'"); + $this->currentLiteral .= PHP_EOL; + $this->i++; // move pointer + break; + default: + if(strlen($this->currentLiteral) != 0) { + $this->addToList(new LoggerLiteralPatternConverter($this->currentLiteral)); + } + $this->currentLiteral = $c; + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_CONVERTER_STATE; + $this->formattingInfo->reset(); + } + } else { + $this->currentLiteral .= $c; + } + break; + case LOG4PHP_LOGGER_PATTERN_PARSER_CONVERTER_STATE: + // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_CONVERTER_STATE'"); + $this->currentLiteral .= $c; + switch($c) { + case '-': + $this->formattingInfo->leftAlign = true; + break; + case '.': + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE; + break; + default: + if(ord($c) >= ord('0') and ord($c) <= ord('9')) { + $this->formattingInfo->min = ord($c) - ord('0'); + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_MIN_STATE; + } else { + $this->finalizeConverter($c); + } + } // switch + break; + case LOG4PHP_LOGGER_PATTERN_PARSER_MIN_STATE: + // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_MIN_STATE'"); + $this->currentLiteral .= $c; + if(ord($c) >= ord('0') and ord($c) <= ord('9')) { + $this->formattingInfo->min = ($this->formattingInfo->min * 10) + (ord($c) - ord('0')); + } else if ($c == '.') { + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE; + } else { + $this->finalizeConverter($c); + } + break; + case LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE: + // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_DOT_STATE'"); + $this->currentLiteral .= $c; + if(ord($c) >= ord('0') and ord($c) <= ord('9')) { + $this->formattingInfo->max = ord($c) - ord('0'); + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_MAX_STATE; + } else { + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; + } + break; + case LOG4PHP_LOGGER_PATTERN_PARSER_MAX_STATE: + // LoggerLog::debug("LoggerPatternParser::parse() state is 'LOG4PHP_LOGGER_PATTERN_PARSER_MAX_STATE'"); + $this->currentLiteral .= $c; + if(ord($c) >= ord('0') and ord($c) <= ord('9')) { + $this->formattingInfo->max = ($this->formattingInfo->max * 10) + (ord($c) - ord('0')); + } else { + $this->finalizeConverter($c); + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; + } + break; + } // switch + } // while + if(strlen($this->currentLiteral) != 0) { + $this->addToList(new LoggerLiteralPatternConverter($this->currentLiteral)); + // LoggerLog::debug("LoggerPatternParser::parse() Parsed LITERAL converter: \"{$this->currentLiteral}\"."); + } + return $this->head; + } - if($dOpt !== null) - $dateFormatStr = $dOpt; - - if ($dateFormatStr == 'ISO8601') { - $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ISO8601; - } elseif($dateFormatStr == 'ABSOLUTE') { - $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ABSOLUTE; - } elseif($dateFormatStr == 'DATE') { - $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_DATE; - } else { - $df = $dateFormatStr; - if ($df == null) { - $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ISO8601; - } - } - $pc = new LoggerDatePatternConverter($this->formattingInfo, $df); - $this->currentLiteral = ''; - break; - case 'F': - $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_FILE_LOCATION_CONVERTER); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() File name converter."); - $this->currentLiteral = ''; - break; - case 'l': - $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_FULL_LOCATION_CONVERTER); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() Location converter."); - $this->currentLiteral = ''; - break; - case 'L': - $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_LINE_LOCATION_CONVERTER); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() LINE NUMBER converter."); - $this->currentLiteral = ''; - break; - case 'm': - $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_MESSAGE_CONVERTER); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() MESSAGE converter."); - $this->currentLiteral = ''; - break; - case 'M': - $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_METHOD_LOCATION_CONVERTER); - $this->currentLiteral = ''; - break; - case 'p': - $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_LEVEL_CONVERTER); - $this->currentLiteral = ''; - break; - case 'r': - $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_RELATIVE_TIME_CONVERTER); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() RELATIVE TIME converter."); - $this->currentLiteral = ''; - break; - case 't': - $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_THREAD_CONVERTER); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() THREAD converter."); - $this->currentLiteral = ''; - break; - case 'u': - if($this->i < $this->patternLength) { - $cNext = $this->pattern{$this->i}; - if(ord($cNext) >= ord('0') and ord($cNext) <= ord('9')) { - $pc = new LoggerUserFieldPatternConverter($this->formattingInfo, (string)(ord($cNext) - ord('0'))); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() USER converter [{$cNext}]."); - $this->currentLiteral = ''; - $this->i++; - } else { - LoggerLog::warn("LoggerPatternParser::finalizeConverter() Unexpected char '{$cNext}' at position {$this->i}."); - } - } - break; - case 'x': - $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_NDC_CONVERTER); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() NDC converter."); - $this->currentLiteral = ''; - break; + function finalizeConverter($c) { + $pc = null; + switch($c) { + case 'c': + $pc = new LoggerCategoryPatternConverter($this->formattingInfo, $this->extractPrecisionOption()); + $this->currentLiteral = ''; + break; + case 'C': + $pc = new LoggerClassNamePatternConverter($this->formattingInfo, $this->extractPrecisionOption()); + $this->currentLiteral = ''; + break; + case 'd': + $dateFormatStr = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ISO8601; // ISO8601_DATE_FORMAT; + $dOpt = $this->extractOption(); - case 'X': - $xOpt = $this->extractOption(); - $pc = new LoggerMDCPatternConverter($this->formattingInfo, $xOpt); - LoggerLog::debug("LoggerPatternParser::finalizeConverter() MDC converter."); - $this->currentLiteral = ''; - break; - default: - LoggerLog::warn("LoggerPatternParser::finalizeConverter() Unexpected char [$c] at position {$this->i} in conversion pattern."); - $pc = new LoggerLiteralPatternConverter($this->currentLiteral); - $this->currentLiteral = ''; - } - $this->addConverter($pc); - } + if($dOpt !== null) + $dateFormatStr = $dOpt; + + if($dateFormatStr == 'ISO8601') { + $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ISO8601; + } else if($dateFormatStr == 'ABSOLUTE') { + $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ABSOLUTE; + } else if($dateFormatStr == 'DATE') { + $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_DATE; + } else { + $df = $dateFormatStr; + if($df == null) { + $df = LOG4PHP_LOGGER_PATTERN_PARSER_DATE_FORMAT_ISO8601; + } + } + $pc = new LoggerDatePatternConverter($this->formattingInfo, $df); + $this->currentLiteral = ''; + break; + case 'F': + $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_FILE_LOCATION_CONVERTER); + $this->currentLiteral = ''; + break; + case 'l': + $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_FULL_LOCATION_CONVERTER); + $this->currentLiteral = ''; + break; + case 'L': + $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_LINE_LOCATION_CONVERTER); + $this->currentLiteral = ''; + break; + case 'm': + $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_MESSAGE_CONVERTER); + $this->currentLiteral = ''; + break; + case 'M': + $pc = new LoggerLocationPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_METHOD_LOCATION_CONVERTER); + $this->currentLiteral = ''; + break; + case 'p': + $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_LEVEL_CONVERTER); + $this->currentLiteral = ''; + break; + case 'r': + $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_RELATIVE_TIME_CONVERTER); + $this->currentLiteral = ''; + break; + case 't': + $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_THREAD_CONVERTER); + $this->currentLiteral = ''; + break; + case 'u': + if($this->i < $this->patternLength) { + $cNext = $this->pattern{$this->i}; + if(ord($cNext) >= ord('0') and ord($cNext) <= ord('9')) { + $pc = new LoggerUserFieldPatternConverter($this->formattingInfo, (string)(ord($cNext) - ord('0'))); + $this->currentLiteral = ''; + $this->i++; + } + } + break; + case 'x': + $pc = new LoggerBasicPatternConverter($this->formattingInfo, LOG4PHP_LOGGER_PATTERN_PARSER_NDC_CONVERTER); + $this->currentLiteral = ''; + break; + case 'X': + $xOpt = $this->extractOption(); + $pc = new LoggerMDCPatternConverter($this->formattingInfo, $xOpt); + $this->currentLiteral = ''; + break; + default: + $pc = new LoggerLiteralPatternConverter($this->currentLiteral); + $this->currentLiteral = ''; + } + $this->addConverter($pc); + } - function addConverter($pc) - { - $this->currentLiteral = ''; - // Add the pattern converter to the list. - $this->addToList($pc); - // Next pattern is assumed to be a literal. - $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; - // Reset formatting info - $this->formattingInfo->reset(); - } + function addConverter($pc) { + $this->currentLiteral = ''; + // Add the pattern converter to the list. + $this->addToList($pc); + // Next pattern is assumed to be a literal. + $this->state = LOG4PHP_LOGGER_PATTERN_PARSER_LITERAL_STATE; + // Reset formatting info + $this->formattingInfo->reset(); + } } diff --git a/thirdparty/apache-log4php/src/main/php/helpers/LoggerTransform.php b/thirdparty/apache-log4php/src/main/php/helpers/LoggerTransform.php deleted file mode 100644 index 9d723d1..0000000 --- a/thirdparty/apache-log4php/src/main/php/helpers/LoggerTransform.php +++ /dev/null @@ -1,95 +0,0 @@ -'); -define('LOG4PHP_LOGGER_TRANSFORM_CDATA_PSEUDO_END', ']]>'); -define('LOG4PHP_LOGGER_TRANSFORM_CDATA_EMBEDDED_END', - LOG4PHP_LOGGER_TRANSFORM_CDATA_END . - LOG4PHP_LOGGER_TRANSFORM_CDATA_PSEUDO_END . - LOG4PHP_LOGGER_TRANSFORM_CDATA_START -); - -/** - * Utility class for transforming strings. - * - * @author Marco Vassura - * @package log4php - * @subpackage helpers - * @since 0.7 - */ -class LoggerTransform { - - /** - * This method takes a string which may contain HTML tags (ie, - * <b>, <table>, etc) and replaces any '<' and '>' - * characters with respective predefined entity references. - * - * @param string $input The text to be converted. - * @return string The input string with the characters '<' and '>' replaced with - * &lt; and &gt; respectively. - * @static - */ - function escapeTags($input) - { - //Check if the string is null or zero length -- if so, return - //what was sent in. - - if(empty($input)) - return $input; - - //Use a StringBuffer in lieu of String concatenation -- it is - //much more efficient this way. - - return htmlspecialchars($input, ENT_NOQUOTES); - } - - /** - * Ensures that embeded CDEnd strings (]]>) are handled properly - * within message, NDC and throwable tag text. - * - * @param string $buf String holding the XML data to this point. The - * initial CDStart () - * of the CDATA section are the responsibility of - * the calling method. - * @param string &str The String that is inserted into an existing - * CDATA Section within buf. - * @static - */ - function appendEscapingCDATA(&$buf, $str) - { - if(empty($str)) - return; - - $rStr = str_replace( - LOG4PHP_LOGGER_TRANSFORM_CDATA_END, - LOG4PHP_LOGGER_TRANSFORM_CDATA_EMBEDDED_END, - $str - ); - $buf .= $rStr; - } -} diff --git a/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutHtml.php b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutHtml.php index d956e1b..2e7edd7 100644 --- a/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutHtml.php +++ b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutHtml.php @@ -21,36 +21,11 @@ */ /** - * @ignore - */ -if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..'); - -if (!defined('LOG4PHP_LINE_SEP')) { - if (substr(php_uname(), 0, 7) == "Windows") { - /** - * @ignore - */ - define('LOG4PHP_LINE_SEP', "\r\n"); - } else { - /** - * @ignore - */ - define('LOG4PHP_LINE_SEP', "\n"); - } -} - -/** - */ -require_once(LOG4PHP_DIR . '/LoggerLayout.php'); -require_once(LOG4PHP_DIR . '/spi/LoggerLoggingEvent.php'); - -/** * This layout outputs events in a HTML table. * * Parameters are: {@link $title}, {@link $locationInfo}. * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 777451 $ * @package log4php * @subpackage layouts */ @@ -68,7 +43,7 @@ class LoggerLayoutHtml extends LoggerLayout { * LocationInfo option of that appender as well. * @var boolean */ - var $locationInfo = false; + private $locationInfo = false; /** * The Title option takes a String value. This option sets the @@ -76,14 +51,12 @@ class LoggerLayoutHtml extends LoggerLayout { * Defaults to 'Log4php Log Messages'. * @var string */ - var $title = "Log4php Log Messages"; + private $title = "Log4php Log Messages"; /** * Constructor */ - function LoggerLayoutHtml() - { - return; + public function __construct() { } /** @@ -97,8 +70,7 @@ class LoggerLayoutHtml extends LoggerLayout { * or a {@link LoggerAppenderMailEvent} then make sure to set the * LocationInfo option of that appender as well. */ - function setLocationInfo($flag) - { + public function setLocationInfo($flag) { if (is_bool($flag)) { $this->locationInfo = $flag; } else { @@ -109,8 +81,7 @@ class LoggerLayoutHtml extends LoggerLayout { /** * Returns the current value of the LocationInfo option. */ - function getLocationInfo() - { + public function getLocationInfo() { return $this->locationInfo; } @@ -119,53 +90,38 @@ class LoggerLayoutHtml extends LoggerLayout { * document title of the generated HTML document. * Defaults to 'Log4php Log Messages'. */ - function setTitle($title) - { + public function setTitle($title) { $this->title = $title; } /** * @return string Returns the current value of the Title option. */ - function getTitle() - { + public function getTitle() { return $this->title; } /** * @return string Returns the content type output by this layout, i.e "text/html". */ - function getContentType() - { + public function getContentType() { return "text/html"; } /** - * No options to activate. - */ - function activateOptions() - { - return true; - } - - /** * @param LoggerLoggingEvent $event * @return string */ - function format($event) - { - $sbuf = LOG4PHP_LINE_SEP . "" . LOG4PHP_LINE_SEP; + public function format(LoggerLoggingEvent $event) { + $sbuf = PHP_EOL . "" . PHP_EOL; $sbuf .= ""; - - $eventTime = (float)$event->getTimeStamp(); - $eventStartTime = (float)LoggerLoggingEvent::getStartTime(); - $sbuf .= number_format(($eventTime - $eventStartTime) * 1000, 0, '', ''); - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= $event->getTime(); + $sbuf .= "" . PHP_EOL; $sbuf .= "getThreadName() . " thread\">"; $sbuf .= $event->getThreadName(); - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; $sbuf .= ""; @@ -175,71 +131,69 @@ class LoggerLayoutHtml extends LoggerLayout { $sbuf .= ""; $sbuf .= $level->toString(); $sbuf .= ""; - }elseif($level->equals(LoggerLevel::getLevelWarn())) { + } else if ($level->equals(LoggerLevel::getLevelWarn())) { $sbuf .= ""; $sbuf .= $level->toString(); $sbuf .= ""; } else { $sbuf .= $level->toString(); } - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; $sbuf .= "getLoggerName(), ENT_QUOTES) . " category\">"; $sbuf .= htmlentities($event->getLoggerName(), ENT_QUOTES); - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; if ($this->locationInfo) { $locInfo = $event->getLocationInformation(); $sbuf .= ""; $sbuf .= htmlentities($locInfo->getFileName(), ENT_QUOTES). ':' . $locInfo->getLineNumber(); - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; } $sbuf .= ""; $sbuf .= htmlentities($event->getRenderedMessage(), ENT_QUOTES); - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; if ($event->getNDC() != null) { $sbuf .= ""; $sbuf .= "NDC: " . htmlentities($event->getNDC(), ENT_QUOTES); - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; } - return $sbuf; } /** * @return string Returns appropriate HTML headers. */ - function getHeader() - { - $sbuf = "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . $this->title . "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "
" . LOG4PHP_LINE_SEP; - $sbuf .= "Log session start time " . strftime('%c', time()) . "
" . LOG4PHP_LINE_SEP; - $sbuf .= "
" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; + public function getHeader() { + $sbuf = "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . $this->title . "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "
" . PHP_EOL; + $sbuf .= "Log session start time " . strftime('%c', time()) . "
" . PHP_EOL; + $sbuf .= "
" . PHP_EOL; + $sbuf .= "
TimeThreadLevelCategory
" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; if ($this->locationInfo) - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; - $sbuf .= "" . LOG4PHP_LINE_SEP; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; + $sbuf .= "" . PHP_EOL; return $sbuf; } @@ -247,10 +201,9 @@ class LoggerLayoutHtml extends LoggerLayout { /** * @return string Returns the appropriate HTML footers. */ - function getFooter() - { - $sbuf = "
TimeThreadLevelCategoryFile:LineMessage
File:LineMessage
" . LOG4PHP_LINE_SEP; - $sbuf .= "
" . LOG4PHP_LINE_SEP; + public function getFooter() { + $sbuf = "" . PHP_EOL; + $sbuf .= "
" . PHP_EOL; $sbuf .= ""; return $sbuf; diff --git a/thirdparty/apache-log4php/src/main/php/layouts/LoggerPatternLayout.php b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutPattern.php index 80208c0..df2fd3e 100644 --- a/thirdparty/apache-log4php/src/main/php/layouts/LoggerPatternLayout.php +++ b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutPattern.php @@ -1,5 +1,5 @@ The goal of this class is to {@link format()} a {@link LoggerLoggingEvent} and return the results as a string. @@ -154,109 +136,67 @@ define('LOG4PHP_LOGGER_PATTERN_LAYOUT_TTCC_CONVERSION_PATTERN', '%r [%t] %p % * then truncate from the beginning. * * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 777552 $ * @package log4php * @subpackage layouts * @since 0.3 */ -class LoggerPatternLayout extends LoggerLayout { +class LoggerLayoutPattern extends LoggerLayout { + /** Default conversion Pattern */ + const DEFAULT_CONVERSION_PATTERN = '%m%n'; + + /** Default conversion TTCC Pattern */ + const TTCC_CONVERSION_PATTERN = '%r [%t] %p %c %x - %m%n'; + + /** @var string output buffer appended to when format() is invoked */ + private $sbuf; + + /** @var string */ + private $pattern; - /** - * @var string output buffer appended to when format() is invoked - */ - var $sbuf; + /** @var LoggerPatternConverter head chain */ + private $head; - /** - * @var string - */ - var $pattern; + private $timezone; - /** - * @var LoggerPatternConverter head chain - */ - var $head; + /** + * Constructs a PatternLayout using the + * {@link DEFAULT_LAYOUT_PATTERN}. + * The default pattern just produces the application supplied message. + */ + public function __construct($pattern = null) { + if ($pattern === null) { + $this->pattern = self :: DEFAULT_CONVERSION_PATTERN; + } else { + $this->pattern = $pattern; + } + } - var $timezone; + /** + * Set the ConversionPattern option. This is the string which + * controls formatting and consists of a mix of literal content and + * conversion specifiers. + */ + public function setConversionPattern($conversionPattern) { + $this->pattern = $conversionPattern; + $patternParser = new LoggerPatternParser($this->pattern); + $this->head = $patternParser->parse(); + } - /** - * Constructs a PatternLayout using the - * {@link LOG4PHP_LOGGER_PATTERN_LAYOUT_DEFAULT_LAYOUT_PATTERN}. - * The default pattern just produces the application supplied message. - */ - function LoggerPatternLayout($pattern = null) - { - if ($pattern === null) { - $this->LoggerPatternLayout(LOG4PHP_LOGGER_PATTERN_LAYOUT_DEFAULT_CONVERSION_PATTERN); - } else { - $this->pattern = $pattern; - } - } - - /** - * Set the ConversionPattern option. This is the string which - * controls formatting and consists of a mix of literal content and - * conversion specifiers. - */ - function setConversionPattern($conversionPattern) - { - $this->pattern = $conversionPattern; - $patternParser = $this->createPatternParser($this->pattern); - $this->head = $patternParser->parse(); - } - - /** - * @return string Returns the value of the ConversionPattern option. - */ - function getConversionPattern() - { - return $this->pattern; - } - - /** - * Does not do anything as options become effective - */ - function activateOptions() - { - // nothing to do. - } - - function ignoresThrowable() - { - return true; - } - - /** - * Returns LoggerPatternParser used to parse the conversion string. Subclasses - * may override this to return a subclass of PatternParser which recognize - * custom conversion characters. - * - * @param string $pattern - * @return LoggerPatternParser - */ - function createPatternParser($pattern) - { - return new LoggerPatternParser($pattern); - } - - /** - * Produces a formatted string as specified by the conversion pattern. - * - * @param LoggerLoggingEvent $event - * @return string - */ - function format($event) - { - LoggerLog::debug("LoggerPatternLayout::format()"); - - // Reset working stringbuffer - $this->sbuf = ''; - $c = $this->head; - while($c !== null) { - $c->format($this->sbuf, $event); - $c = $c->next; - } - return $this->sbuf; - } - -} + /** + * Produces a formatted string as specified by the conversion pattern. + * + * @param LoggerLoggingEvent $event + * @return string + */ + public function format(LoggerLoggingEvent $event) { + // Reset working stringbuffer + $this->sbuf = ''; + $c = $this->head; + while ($c !== null) { + $c->format($this->sbuf, $event); + $c = $c->next; + } + return $this->sbuf; + } +} \ No newline at end of file diff --git a/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutSimple.php b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutSimple.php index 80c6d9e..1001a41 100644 --- a/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutSimple.php +++ b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutSimple.php @@ -1,5 +1,5 @@ level, followed by " - " and then the message. * For example, - * INFO - "A message" + * INFO - A message * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 777451 $ * @package log4php * @subpackage layouts */ class LoggerLayoutSimple extends LoggerLayout { - /** * Constructor */ - function LoggerLayoutSimple() - { - return; - } - - function activateOptions() - { - return; + public function __construct() { } /** @@ -78,9 +48,8 @@ class LoggerLayoutSimple extends LoggerLayout { * @param LoggerLoggingEvent $event * @return string */ - function format($event) - { + public function format(LoggerLoggingEvent $event) { $level = $event->getLevel(); - return $level->toString() . ' - ' . $event->getRenderedMessage(). LOG4PHP_LINE_SEP; + return $level->toString() . ' - ' . $event->getRenderedMessage(). PHP_EOL; } } diff --git a/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutTTCC.php b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutTTCC.php index 20a72da..e177ff9 100644 --- a/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutTTCC.php +++ b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutTTCC.php @@ -21,29 +21,6 @@ */ /** - * @ignore - */ -if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..'); - -if (!defined('LOG4PHP_LINE_SEP')) { - if (substr(php_uname(), 0, 7) == "Windows") { - /** - * @ignore - */ - define('LOG4PHP_LINE_SEP', "\r\n"); - } else { - /** - * @ignore - */ - define('LOG4PHP_LINE_SEP', "\n"); - } -} - -/** - */ -require_once(LOG4PHP_DIR . '/LoggerLayout.php'); - -/** * String constant designating no time information. Current value of * this constant is NULL. */ @@ -72,8 +49,7 @@ define ('LOG4PHP_LOGGER_LAYOUT_RELATIVE_TIME_DATE_FORMAT', 'RELATIVE'); * - {@link $microSecondsPrinting} (true|false) enable/disable micro seconds reporting in timestamp. * - {@link $dateFormat} (string) set date format. See php {@link PHP_MANUAL#date} function for details. * - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 777451 $ * @package log4php * @subpackage layouts */ @@ -96,14 +72,10 @@ class LoggerLayoutTTCC extends LoggerLayout { * @param string date format * @see dateFormat */ - public function __construct($dateFormat = '') - { - if (!empty($dateFormat)) + public function __construct($dateFormat = '') { + if (!empty($dateFormat)) { $this->dateFormat = $dateFormat; - return; - } - - public function activateOptions() { + } return; } @@ -111,9 +83,7 @@ class LoggerLayoutTTCC extends LoggerLayout { * The ThreadPrinting option specifies whether the name of the * current thread is part of log output or not. This is true by default. */ - public function setThreadPrinting($threadPrinting) - { - + public function setThreadPrinting($threadPrinting) { $this->threadPrinting = is_bool($threadPrinting) ? $threadPrinting : (bool)(strtolower($threadPrinting) == 'true'); @@ -130,8 +100,7 @@ class LoggerLayoutTTCC extends LoggerLayout { * The CategoryPrefixing option specifies whether {@link Category} * name is part of log output or not. This is true by default. */ - public function setCategoryPrefixing($categoryPrefixing) - { + public function setCategoryPrefixing($categoryPrefixing) { $this->categoryPrefixing = is_bool($categoryPrefixing) ? $categoryPrefixing : (bool)(strtolower($categoryPrefixing) == 'true'); @@ -158,8 +127,7 @@ class LoggerLayoutTTCC extends LoggerLayout { /** * @return boolean Returns value of the ContextPrinting option. */ - public function getContextPrinting() - { + public function getContextPrinting() { return $this->contextPrinting; } @@ -177,22 +145,19 @@ class LoggerLayoutTTCC extends LoggerLayout { /** * @return boolean Returns value of the MicroSecondsPrinting option. */ - public function getMicroSecondsPrinting() - { + public function getMicroSecondsPrinting() { return $this->microSecondsPrinting; } - public function setDateFormat($dateFormat) - { + public function setDateFormat($dateFormat) { $this->dateFormat = $dateFormat; } /** * @return string */ - public function getDateFormat() - { + public function getDateFormat() { return $this->dateFormat; } @@ -204,8 +169,7 @@ class LoggerLayoutTTCC extends LoggerLayout { * @param LoggerLoggingEvent $event * @return string */ - public function format($event) - { + public function format(LoggerLoggingEvent $event) { $timeStamp = (float)$event->getTimeStamp(); $format = strftime($this->dateFormat, (int)$timeStamp); @@ -216,9 +180,10 @@ class LoggerLayoutTTCC extends LoggerLayout { $format .= ' '; - if ($this->threadPrinting) + if ($this->threadPrinting) { $format .= '['.getmypid().'] '; - + } + $level = $event->getLevel(); $format .= $level->toString().' '; @@ -234,13 +199,12 @@ class LoggerLayoutTTCC extends LoggerLayout { } $format .= '- '.$event->getRenderedMessage(); - $format .= LOG4PHP_LINE_SEP; + $format .= PHP_EOL; return $format; } - public function ignoresThrowable() - { + public function ignoresThrowable() { return true; } } diff --git a/thirdparty/apache-log4php/src/main/php/layouts/LoggerXmlLayout.php b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutXml.php index 1039bad..22a521f 100644 --- a/thirdparty/apache-log4php/src/main/php/layouts/LoggerXmlLayout.php +++ b/thirdparty/apache-log4php/src/main/php/layouts/LoggerLayoutXml.php @@ -21,23 +21,6 @@ */ /** - * @ignore - */ -if (!defined('LOG4PHP_DIR')) define('LOG4PHP_DIR', dirname(__FILE__) . '/..'); - -define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS_PREFIX', 'log4j'); -define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS', 'http://jakarta.apache.org/log4j/'); - -define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS_PREFIX', 'log4php'); -define('LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS', 'http://logging.apache.org/log4php/'); - -/** - */ -require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php'); -require_once(LOG4PHP_DIR . '/helpers/LoggerTransform.php'); -require_once(LOG4PHP_DIR . '/LoggerLayout.php'); - -/** * The output of the LoggerXmlLayout consists of a series of log4php:event elements. * *

Parameters: {@link $locationInfo}.

@@ -46,12 +29,22 @@ require_once(LOG4PHP_DIR . '/LoggerLayout.php'); * The output is designed to be included as an external entity in a separate file to form * a correct XML file.

* - * @author Marco Vassura - * @version $Revision: 635069 $ + * @version $Revision: 778059 $ * @package log4php * @subpackage layouts */ -class LoggerXmlLayout extends LoggerLayout { +class LoggerLayoutXml extends LoggerLayout { + const LOG4J_NS_PREFIX ='log4j'; + const LOG4J_NS = 'http://jakarta.apache.org/log4j/'; + + const LOG4PHP_NS_PREFIX = 'log4php'; + const LOG4PHP_NS = 'http://logging.apache.org/log4php/'; + + const CDATA_START = ''; + const CDATA_PSEUDO_END = ']]>'; + + const CDATA_EMBEDDED_END = ']]>]]>LocationInfo option takes a boolean value. By default, @@ -61,45 +54,43 @@ class LoggerXmlLayout extends LoggerLayout { * origin of the log statement will be output. * @var boolean */ - var $locationInfo = true; + private $locationInfo = true; /** * @var boolean set the elements namespace */ - var $log4jNamespace = false; + private $log4jNamespace = false; /** * @var string namespace * @private */ - var $_namespace = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS; + private $_namespace = self::LOG4PHP_NS; /** * @var string namespace prefix * @private */ - var $_namespacePrefix = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS_PREFIX; + private $_namespacePrefix = self::LOG4PHP_NS_PREFIX; /** * No options to activate. */ - function activateOptions() - { + public function activateOptions() { if ($this->getLog4jNamespace()) { - $this->_namespace = LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS; - $this->_namespacePrefix = LOG4PHP_LOGGER_XML_LAYOUT_LOG4J_NS_PREFIX; + $this->_namespace = self::LOG4J_NS; + $this->_namespacePrefix = self::LOG4J_NS_PREFIX; } else { - $this->_namespace = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS; - $this->_namespacePrefix = LOG4PHP_LOGGER_XML_LAYOUT_LOG4PHP_NS_PREFIX; + $this->_namespace = self::LOG4PHP_NS; + $this->_namespacePrefix = self::LOG4PHP_NS_PREFIX; } } /** * @return string */ - function getHeader() - { + public function getHeader() { return "<{$this->_namespacePrefix}:eventSet ". "xmlns:{$this->_namespacePrefix}=\"{$this->_namespace}\" ". "version=\"0.3\" ". @@ -113,24 +104,23 @@ class LoggerXmlLayout extends LoggerLayout { * @param LoggerLoggingEvent $event * @return string */ - function format($event) - { + public function format(LoggerLoggingEvent $event) { $loggerName = $event->getLoggerName(); $timeStamp = number_format((float)($event->getTimeStamp() * 1000), 0, '', ''); $thread = $event->getThreadName(); $level = $event->getLevel(); $levelStr = $level->toString(); - $buf = "<{$this->_namespacePrefix}:event logger=\"{$loggerName}\" level=\"{$levelStr}\" thread=\"{$thread}\" timestamp=\"{$timeStamp}\">\r\n"; + $buf = "<{$this->_namespacePrefix}:event logger=\"{$loggerName}\" level=\"{$levelStr}\" thread=\"{$thread}\" timestamp=\"{$timeStamp}\">".PHP_EOL; $buf .= "<{$this->_namespacePrefix}:message>getRenderedMessage()); - $buf .= "]]>_namespacePrefix}:message>\r\n"; + $this->appendEscapingCDATA($buf, $event->getRenderedMessage()); + $buf .= "]]>_namespacePrefix}:message>".PHP_EOL; $ndc = $event->getNDC(); if($ndc != null) { $buf .= "<{$this->_namespacePrefix}:NDC>_namespacePrefix}:NDC>\r\n"; + $this->appendEscapingCDATA($buf, $ndc); + $buf .= "]]>_namespacePrefix}:NDC>".PHP_EOL; } if ($this->getLocationInfo()) { @@ -140,11 +130,11 @@ class LoggerXmlLayout extends LoggerLayout { "file=\"" . htmlentities($locationInfo->getFileName(), ENT_QUOTES) . "\" ". "line=\"" . $locationInfo->getLineNumber() . "\" ". "method=\"" . $locationInfo->getMethodName() . "\" "; - $buf .= "/>\r\n"; + $buf .= "/>".PHP_EOL; } - $buf .= "_namespacePrefix}:event>\r\n\r\n"; + $buf .= "_namespacePrefix}:event>".PHP_EOL.PHP_EOL; return $buf; @@ -153,56 +143,58 @@ class LoggerXmlLayout extends LoggerLayout { /** * @return string */ - function getFooter() - { - + public function getFooter() { return "_namespacePrefix}:eventSet>\r\n"; } /** * @return boolean */ - function getLocationInfo() - { + public function getLocationInfo() { return $this->locationInfo; } /** - * @return boolean - */ - function getLog4jNamespace() - { - return $this->log4jNamespace; - } - - /** - * The XMLLayout prints and does not ignore exceptions. Hence the - * return value false. - * @return boolean - */ - function ignoresThrowable() - { - return false; - } - - /** * The {@link $locationInfo} option takes a boolean value. By default, * it is set to false which means there will be no location * information output by this layout. If the the option is set to * true, then the file name and line number of the statement at the * origin of the log statement will be output. */ - function setLocationInfo($flag) - { + function setLocationInfo($flag) { $this->locationInfo = LoggerOptionConverter::toBoolean($flag, true); } /** * @param boolean */ - function setLog4jNamespace($flag) - { + function setLog4jNamespace($flag) { $this->log4jNamespace = LoggerOptionConverter::toBoolean($flag, true); } + + /** + * Ensures that embeded CDEnd strings (]]>) are handled properly + * within message, NDC and throwable tag text. + * + * @param string $buf String holding the XML data to this point. The + * initial CDStart () + * of the CDATA section are the responsibility of + * the calling method. + * @param string &str The String that is inserted into an existing + * CDATA Section within buf. + * @static + */ + private function appendEscapingCDATA(&$buf, $str) { + if(empty($str)) { + return; + } + + $rStr = str_replace( + self::CDATA_END, + self::CDATA_EMBEDDED_END, + $str + ); + $buf .= $rStr; + } } diff --git a/thirdparty/apache-log4php/src/main/php/or/LoggerDefaultRenderer.php b/thirdparty/apache-log4php/src/main/php/renderers/LoggerRendererDefault.php index 0974494..6fa986f 100644 --- a/thirdparty/apache-log4php/src/main/php/or/LoggerDefaultRenderer.php +++ b/thirdparty/apache-log4php/src/main/php/renderers/LoggerRendererDefault.php @@ -1,13 +1,13 @@ map = array(); - $this->defaultRenderer = new LoggerDefaultRenderer(); - } + /** + * Constructor + */ + public function __construct() { + $this->map = array(); + $this->defaultRenderer = new LoggerRendererDefault(); + } - /** - * Add a renderer to a hierarchy passed as parameter. - * Note that hierarchy must implement getRendererMap() and setRenderer() methods. - * - * @param LoggerHierarchy $repository a logger repository. - * @param string $renderedClassName - * @param string $renderingClassName - * @static - */ - public static function addRenderer($repository, $renderedClassName, $renderingClassName) - { - LoggerLog::debug("LoggerRendererMap::addRenderer() Rendering class: [{$renderingClassName}], Rendered class: [{$renderedClassName}]."); - $renderer = LoggerObjectRenderer::factory($renderingClassName); - if($renderer == null) { - LoggerLog::warn("LoggerRendererMap::addRenderer() Could not instantiate renderer [{$renderingClassName}]."); - return; - } else { - $repository->setRenderer($renderedClassName, $renderer); - } - } + /** + * Add a renderer to a hierarchy passed as parameter. + * Note that hierarchy must implement getRendererMap() and setRenderer() methods. + * + * @param LoggerHierarchy $repository a logger repository. + * @param string $renderedClassName + * @param string $renderingClassName + * @static + */ + public static function addRenderer($repository, $renderedClassName, $renderingClassName) { + $renderer = LoggerReflectionUtils::createObject($renderingClassName); + if($renderer == null) { + return; + } else { + $repository->setRenderer($renderedClassName, $renderer); + } + } - /** - * Find the appropriate renderer for the class type of the - * o parameter. - * - * This is accomplished by calling the {@link getByObject()} - * method if o is object or using {@link LoggerDefaultRenderer}. - * Once a renderer is found, it is applied on the object o and - * the result is returned as a string. - * - * @param mixed $o - * @return string - */ - public function findAndRender($o) - { - if($o == null) { - return null; - } else { - if (is_object($o)) { - $renderer = $this->getByObject($o); - if ($renderer !== null) { - return $renderer->doRender($o); - } else { - return null; - } - } else { - $renderer = $this->defaultRenderer; - return $renderer->doRender($o); - } - } - } + /** + * Find the appropriate renderer for the class type of the + * o parameter. + * + * This is accomplished by calling the {@link getByObject()} + * method if o is object or using {@link LoggerRendererDefault}. + * Once a renderer is found, it is applied on the object o and + * the result is returned as a string. + * + * @param mixed $o + * @return string + */ + public function findAndRender($o) { + if($o == null) { + return null; + } else { + if(is_object($o)) { + $renderer = $this->getByObject($o); + if($renderer !== null) { + return $renderer->doRender($o); + } else { + return null; + } + } else { + $renderer = $this->defaultRenderer; + return $renderer->doRender($o); + } + } + } - /** - * Syntactic sugar method that calls {@link PHP_MANUAL#get_class} with the - * class of the object parameter. - * - * @param mixed $o - * @return string - */ - public function getByObject($o) - { - return ($o == null) ? null : $this->getByClassName(get_class($o)); - } + /** + * Syntactic sugar method that calls {@link PHP_MANUAL#get_class} with the + * class of the object parameter. + * + * @param mixed $o + * @return string + */ + public function getByObject($o) { + return ($o == null) ? null : $this->getByClassName(get_class($o)); + } - /** - * Search the parents of clazz for a renderer. - * - * The renderer closest in the hierarchy will be returned. If no - * renderers could be found, then the default renderer is returned. - * - * @param string $class - * @return LoggerObjectRenderer - */ - public function getByClassName($class) - { - $r = null; - for($c = strtolower($class); !empty($c); $c = get_parent_class($c)) { - if (isset($this->map[$c])) { - return $this->map[$c]; - } - } - return $this->defaultRenderer; - } + /** + * Search the parents of clazz for a renderer. + * + * The renderer closest in the hierarchy will be returned. If no + * renderers could be found, then the default renderer is returned. + * + * @param string $class + * @return LoggerRendererObject + */ + public function getByClassName($class) { + $r = null; + for($c = strtolower($class); !empty($c); $c = get_parent_class($c)) { + if(isset($this->map[$c])) { + return $this->map[$c]; + } + } + return $this->defaultRenderer; + } - /** - * @return LoggerDefaultRenderer - */ - public function getDefaultRenderer() - { - return $this->defaultRenderer; - } + /** + * @return LoggerRendererDefault + */ + public function getDefaultRenderer() { + return $this->defaultRenderer; + } - public function clear() - { - $this->map = array(); - } + public function clear() { + $this->map = array(); + } - /** - * Register a {@link LoggerObjectRenderer} for clazz. - * @param string $class - * @param LoggerObjectRenderer $or - */ - public function put($class, $or) - { - $this->map[strtolower($class)] = $or; - } - - /** - * @param string $class - * @return boolean - */ - public function rendererExists($class) - { - $class = basename($class); - if (!class_exists($class)) { - include_once(LOG4PHP_DIR ."/or/{$class}.php"); - } - return class_exists($class); - } + /** + * Register a {@link LoggerRendererObject} for clazz. + * @param string $class + * @param LoggerRendererObject $or + */ + public function put($class, $or) { + $this->map[strtolower($class)] = $or; + } + + /** + * @param string $class + * @return boolean + */ + public function rendererExists($class) { + $class = basename($class); + return class_exists($class); + } } diff --git a/thirdparty/apache-log4php/src/main/php/or/LoggerObjectRenderer.php b/thirdparty/apache-log4php/src/main/php/renderers/LoggerRendererObject.php index b9749e7..5774687 100644 --- a/thirdparty/apache-log4php/src/main/php/or/LoggerObjectRenderer.php +++ b/thirdparty/apache-log4php/src/main/php/renderers/LoggerRendererObject.php @@ -1,13 +1,13 @@ - + - - + + + + @@ -37,18 +40,14 @@ element. --> - + - - - - @@ -63,46 +62,47 @@ element. --> - + - + + @@ -141,8 +141,8 @@ element. --> diff --git a/thirdparty/apache-log4php/src/site/apt/download.apt b/thirdparty/apache-log4php/src/site/apt/download.apt new file mode 100644 index 0000000..48d80f2 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/apt/download.apt @@ -0,0 +1,26 @@ +~~ 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. + ------ +Download apache-log4php + ------ + ------ + ------ + +Download apache-log4php + + Apache log4php is distributed under the {{{http://www.apache.org/licenses/LICENSE-2.0.html} Apache License, version 2.0}}. + + + No releases have yet been made. diff --git a/thirdparty/apache-log4php/src/site/apt/index.apt b/thirdparty/apache-log4php/src/site/apt/index.apt new file mode 100644 index 0000000..71e0d60 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/apt/index.apt @@ -0,0 +1,43 @@ +~~ 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. + ------ + Apache log4php + ------ + ------ + ------ + + Log4php is logging framework for PHP undergoing incubation at the Apache Software Foundation (ASF), + sponsored by the Apache Logging Services project. + Incubation is required of all newly accepted projects until a further review + indicates that the infrastructure, communications, and decision making process + have stabilized in a manner consistent with other successful ASF projects. + While incubation status is not necessarily a reflection of the completeness or + stability of the code, it does indicate that the project has yet to be + fully endorsed by the ASF. + + + log4php supports: + + * Configuration through xml and properties file (same structure as log4j). + + * File, RollingFile, DailyFile, Echo, Console, Mail, PEAR::Db, PHP error, + Syslog or NT events and Socket appenders. + + * Simple, TTCC, Pattern, Html and Xml Layouts. + + * Nested (NDC) and Mapped (MDC) Diagnostic Contexts. + + * Switchable internal debug. + diff --git a/thirdparty/apache-log4php/src/site/apt/roadmap.apt b/thirdparty/apache-log4php/src/site/apt/roadmap.apt new file mode 100644 index 0000000..1103d30 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/apt/roadmap.apt @@ -0,0 +1,25 @@ +~~ 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. + ------ + apache-log4php Roadmap + ------ + Curt Arnold + ------ + 4 June 2007 + ------ + +apache-log4php Roadmap + + TODO diff --git a/thirdparty/apache-log4php/src/site/apt/usage.apt b/thirdparty/apache-log4php/src/site/apt/usage.apt new file mode 100644 index 0000000..c4e5587 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/apt/usage.apt @@ -0,0 +1,142 @@ +~~ 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. + ------ + Apache log4php usage example + ------ + ------ + ------ + +Apache Log4php Usage Example"> + ++-- +logger =& LoggerManager::getLogger('Test'); + } + + function testLog() + { + $this->logger->debug('this is a DEBUG log generated by Test::testLog() class'); + $this->logger->info('this is an INFO log generated by Test::testLog() class'); + $this->logger->warn('this is a WARN log generated by Test::testLog() class'); + $this->logger->error('this is an ERROR log generated by Test::testLog() class'); + $this->logger->fatal('this is a FATAL log generated by Test::testLog() class'); + } +} + +class TestTest extends Test { + var $logger; + + function TestTest() + { + $this->Test(); + $this->logger =& LoggerManager::getLogger('Test.Test'); + } + + function testLog() + { + LoggerNDC::push('NDC generated by TestTest::testLog()'); + + $this->logger->debug('this is a DEBUG log generated by TestTest::testLog() class'); + $this->logger->info('this is an INFO log generated by TestTest::testLog() class'); + $this->logger->warn('this is a WARN log generated by TestTest::testLog() class'); + $this>->logger->error('this is an ERROR log generated by TestTest::testLog() class'); + $this->logger->fatal('this is a FATAL log generated by TestTest::testLog() class'); + + LoggerNDC::pop(); + } +} + +function Bar() +{ + $logger =& LoggerManager::getLogger('bar'); + + /* + note that the message here is an array + */ + + $logger->debug(array('one', 'two', 'tree')); + $logger->info('this is an INFO log generated by Bar() function'); + $logger->warn('this is a WARN log generated by Bar() function'); + $logger->error('this is an ERROR log generated by Bar() function'); + $logger->fatal('this is a FATAL log generated by Bar() function'); +} + +$logger =& LoggerManager::getLogger('main'); +$logger->debug('this is a DEBUG log generated by main() function'); +$logger->info('this is an INFO log generated by main() function'); +$logger->warn('this is a WARN log generated by main() function'); +$logger->error('this is an ERROR log generated by main() function'); +$logger->fatal('this is a FATAL log generated by main() function') + +$test = new Test(); +$test->testLog(); + +$testTest = new TestTest(); +$testTest->testLog(); + +Bar(); +?> ++-- diff --git a/thirdparty/apache-log4php/src/site/resources/css/site.css b/thirdparty/apache-log4php/src/site/resources/css/site.css new file mode 100644 index 0000000..cab7f25 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/resources/css/site.css @@ -0,0 +1,18 @@ +/* + 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. + +*/ + diff --git a/thirdparty/apache-log4php/src/site/resources/images/apache-incubator-logo.png b/thirdparty/apache-log4php/src/site/resources/images/apache-incubator-logo.png new file mode 100644 index 0000000..81fb31e --- /dev/null +++ b/thirdparty/apache-log4php/src/site/resources/images/apache-incubator-logo.png diff --git a/thirdparty/apache-log4php/src/site/resources/images/logo.jpg b/thirdparty/apache-log4php/src/site/resources/images/logo.jpg new file mode 100644 index 0000000..5b6ede8 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/resources/images/logo.jpg diff --git a/thirdparty/apache-log4php/src/site/resources/images/ls-logo.jpg b/thirdparty/apache-log4php/src/site/resources/images/ls-logo.jpg new file mode 100755 index 0000000..611c5c3 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/resources/images/ls-logo.jpg diff --git a/thirdparty/apache-log4php/src/site/site.xml b/thirdparty/apache-log4php/src/site/site.xml new file mode 100644 index 0000000..44b052b --- /dev/null +++ b/thirdparty/apache-log4php/src/site/site.xml @@ -0,0 +1,68 @@ + + + + Apache Logging Services Project + images/ls-logo.jpg + http://logging.apache.org/ + + + Apache Incubator + images/apache-incubator-logo.png + http://incubator.apache.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/apache-log4php/src/site/xdoc/contributors.xml b/thirdparty/apache-log4php/src/site/xdoc/contributors.xml new file mode 100644 index 0000000..d5dfd3f --- /dev/null +++ b/thirdparty/apache-log4php/src/site/xdoc/contributors.xml @@ -0,0 +1,67 @@ + + + + + + Marco Vassura + Log4php - Contributors + + + +
+

+ Here is a list (in alphabetical order) of the developers that + (directly or indirectly) contributed to enhance the project. + Thank You all! +

+ +
    +
  • + Abel Gonzalez +

    Abel is the author of the LoggerAppenderDailyFile appender.

    +
  • +
  • + Ilker Kiris +

    Bugs hunting, hints and modifications.

    +
  • +
  • + Domenico Lordi +

    Developer of the LoggerAppenderMailEvent appender.

    +
  • +
  • + Sergio Strampelli +

    An endless source of ideas, contribs and bugs hunting. Thank You guy!

    +
  • +
  • + Marco Vassura +

    The founder of the project and source code maintainer.

    +
  • +
  • + Blake Watters +

    Blake is the author of the LoggerAppenderAdodb appender.

    +
  • +
  • + Simon Wiest +

    Bugs hunting, hints.

    +
  • +
+
+ +
+ diff --git a/thirdparty/apache-log4php/src/site/xdoc/documentation.xml b/thirdparty/apache-log4php/src/site/xdoc/documentation.xml new file mode 100644 index 0000000..182ee48 --- /dev/null +++ b/thirdparty/apache-log4php/src/site/xdoc/documentation.xml @@ -0,0 +1,38 @@ + + + + + + Marco Vassura + Log4php - Documentation and Usage + + + +
+

+

+

+
+ +
diff --git a/thirdparty/apache-log4php/src/site/xdoc/news.xml b/thirdparty/apache-log4php/src/site/xdoc/news.xml new file mode 100644 index 0000000..72093cb --- /dev/null +++ b/thirdparty/apache-log4php/src/site/xdoc/news.xml @@ -0,0 +1,39 @@ + + + + + + Marco Vassura + Welcome to Log4php! + + + +
+

+ 7th of March 2004 - Log4php project has moved from + www.vxr.it/log4php + to Apache Logging Services.

+

+ Log4php project has started the incubation phase in order to become + an apache project. The license has changed from LGPL to ASL 2.0. +

+
+
+ +
diff --git a/thirdparty/apache-log4php/src/site/xdoc/qsg.xml b/thirdparty/apache-log4php/src/site/xdoc/qsg.xml new file mode 100644 index 0000000..58223cc --- /dev/null +++ b/thirdparty/apache-log4php/src/site/xdoc/qsg.xml @@ -0,0 +1,148 @@ + + + + + + Marco Vassura + Log4php - Quick Setup Guide + + + +
+ +

After unpacking the distribution file the following source tree will be created:

+
+log4php-{version}
+    +---docs
+    |   +---api
+    |   qsg.html (this file)
+    |       ...
+    \---src
+        +---log4php
+        |   +---appenders
+        |   +---config
+        |   +---helpers
+        |   +---layouts
+        |   +---or
+        |   +---spi
+        |   +---varia
+        |   \---xml
+        \---tests
+            ...
+                
+
+ + +

+ Copy the "log4php-{version}/src/log4php" directory in a place accessible by PHP + (called in this document {LOG4PHP-ROOT}) + and that's all! Log4php is installed. + Optionally the LOG4PHP_DIR + constant can be defined to point to {LOG4PHP-ROOT}. +

+
+ + +

+ Three steps are required to use log4php: +

+
    +
  1. + Create a configuration file (can be an ".ini"-type or xml file) + that will configure the log4php loggers hierarchy tree.
    + See the tests/*/configs directories for examples.
    + See log4php.dtd for xml elements reference.
    + Finally, take a look at the original log4j manual for more examples. +
  2. +
  3. + (Optional) Define the LOG4PHP_CONFIGURATION + constant to point to the configuration above. +
  4. +
  5. + (Optional) Define the LOG4PHP_CONFIGURATOR_CLASS + constant to point to a configuration class file. +
  6. +
  7. + Include the 'LoggerManager.php' + class file in your php scripts. +
  8. +
  9. + Since log4php makes use of date functions, it is recommended that you have set: + date_default_timezone_set(); somewhere within your application. +
  10. +
+

+ Once the 'LoggerManager' is included, + it will start the default init procedure + that can be parameterized by the previously defined + LOG4PHP_DEFAULT_INIT_OVERRIDE, + LOG4PHP_CONFIGURATION and + LOG4PHP_CONFIGURATOR_CLASS + constants. +

+

Here is how to use log4php in user PHP code:

+
+<?php
+
+// Setting default timezone
+date_default_timezone_set('Europe/London');
+
+/*
+    Set LOG4PHP_* constants here 
+*/
+
+require_once(LOG4PHP_DIR . '/LoggerManager.php');
+
+/*
+    In a class
+*/
+class Log4phpTest {
+    /*
+        Your public and private vars
+    */
+    var $_logger;
+    
+    function Log4phpTest()
+    {
+        $this->_logger =& LoggerManager::getLogger('Log4phpTest');
+        $this->_logger->debug('Hello!');
+    }
+
+}
+
+function Log4phpTestFunction()
+{
+    $logger =& LoggerManager::getLogger('Log4phpTestFunction');
+    $logger->debug('Hello again!');    
+}
+
+/*
+    Your PHP code
+*/
+
+//Safely close all appenders with...
+
+LoggerManager::shutdown();
+
+?>
+                
+
+
+ +
diff --git a/thirdparty/apache-log4php/src/site/xdoc/stylesheets/project.xml b/thirdparty/apache-log4php/src/site/xdoc/stylesheets/project.xml new file mode 100644 index 0000000..683c20e --- /dev/null +++ b/thirdparty/apache-log4php/src/site/xdoc/stylesheets/project.xml @@ -0,0 +1,42 @@ + + + + + Log4php project + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/apache-log4php/src/test/php/LoggerHierarchyTest.php b/thirdparty/apache-log4php/src/test/php/LoggerHierarchyTest.php new file mode 100644 index 0000000..7ab3309 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/LoggerHierarchyTest.php @@ -0,0 +1,112 @@ +hierarchy = new LoggerHierarchy(new LoggerRoot()); + } + + public function testIfLevelIsInitiallyLevelAllg() { + self::assertEquals('ALL', $this->hierarchy->getRootLogger()->getLevel()->toString()); + } + + public function testIfNameIsRoot() { + self::assertEquals('root', $this->hierarchy->getRootLogger()->getName()); + } + + public function testIfParentIsNull() { + self::assertSame(null, $this->hierarchy->getRootLogger()->getParent()); + } + + public function testSetParent() { + $l = $this->hierarchy->getLogger('dummy'); + $this->hierarchy->getRootLogger()->setParent($l); + $this->testIfParentIsNull(); + } + + public function testResetConfiguration() { + $root = $this->hierarchy->getRootLogger(); + $appender = new LoggerAppenderConsole('A1'); + $root->addAppender($appender); + $logger = $this->hierarchy->getLogger('test'); + self::assertEquals(count($this->hierarchy->getCurrentLoggers()), 1); + $this->hierarchy->resetConfiguration(); + self::assertEquals($this->hierarchy->getRootLogger()->getLevel()->toString(), 'DEBUG'); + self::assertEquals($this->hierarchy->getThreshold()->toString(), 'ALL'); + self::assertEquals(count($this->hierarchy->getCurrentLoggers()), 1); + foreach($this->hierarchy->getCurrentLoggers() as $l) { + self::assertEquals($l->getLevel(), null); + self::assertTrue($l->getAdditivity()); + self::assertEquals(count($l->getAllAppenders()), 0); + } + } + + public function testSettingParents() { + $hierarchy = $this->hierarchy; + $loggerDE = $hierarchy->getLogger("de"); + $root = $loggerDE->getParent(); + self::assertEquals('root', $root->getName()); + + $loggerDEBLUB = $hierarchy->getLogger("de.blub"); + self::assertEquals('de.blub', $loggerDEBLUB->getName()); + $p = $loggerDEBLUB->getParent(); + self::assertEquals('de', $p->getName()); + + $loggerDEBLA = $hierarchy->getLogger("de.bla"); + $p = $loggerDEBLA->getParent(); + self::assertEquals('de', $p->getName()); + + $logger3 = $hierarchy->getLogger("de.bla.third"); + $p = $logger3->getParent(); + self::assertEquals('de.bla', $p->getName()); + + $p = $p->getParent(); + self::assertEquals('de', $p->getName()); + } + + public function testExists() { + $hierarchy = $this->hierarchy; + $logger = $hierarchy->getLogger("de"); + + self::assertTrue($hierarchy->exists("de")); + + $logger = $hierarchy->getLogger("de.blub"); + self::assertTrue($hierarchy->exists("de.blub")); + self::assertTrue($hierarchy->exists("de")); + + $logger = $hierarchy->getLogger("de.de"); + self::assertTrue($hierarchy->exists("de.de")); + } + + public function testClear() { + $hierarchy = $this->hierarchy; + $logger = $hierarchy->getLogger("de"); + self::assertTrue($hierarchy->exists("de")); + $hierarchy->clear(); + self::assertFalse($hierarchy->exists("de")); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/LoggerLevelTest.php b/thirdparty/apache-log4php/src/test/php/LoggerLevelTest.php new file mode 100644 index 0000000..9302a50 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/LoggerLevelTest.php @@ -0,0 +1,78 @@ +toInt(), $code); + self::assertEquals( $o->toString(), $str); + self::assertEquals( $o->getSyslogEquivalent(), $syslog); + } + + public function testLevelOff() { + $this->doTestLevel( LoggerLevel::getLevelOff(), LoggerLevel::OFF, 'OFF', 0 ); + $this->doTestLevel( LoggerLevel::toLevel(LoggerLevel::OFF), LoggerLevel::OFF, 'OFF', 0 ); + $this->doTestLevel( LoggerLevel::toLevel('OFF'), LoggerLevel::OFF, 'OFF', 0 ); + } + + public function testLevelFatal() { + $this->doTestLevel( LoggerLevel::getLevelFatal(), LoggerLevel::FATAL, 'FATAL', 0 ); + $this->doTestLevel( LoggerLevel::toLevel(LoggerLevel::FATAL), LoggerLevel::FATAL, 'FATAL', 0 ); + $this->doTestLevel( LoggerLevel::toLevel('FATAL'), LoggerLevel::FATAL, 'FATAL', 0 ); + } + + public function testLevelError() { + $this->doTestLevel( LoggerLevel::getLevelError(), LoggerLevel::ERROR, 'ERROR', 3 ); + $this->doTestLevel( LoggerLevel::toLevel(LoggerLevel::ERROR), LoggerLevel::ERROR, 'ERROR', 3 ); + $this->doTestLevel( LoggerLevel::toLevel('ERROR'), LoggerLevel::ERROR, 'ERROR', 3 ); + } + + public function testLevelWarn() { + $this->doTestLevel( LoggerLevel::getLevelWarn(), LoggerLevel::WARN, 'WARN', 4 ); + $this->doTestLevel( LoggerLevel::toLevel(LoggerLevel::WARN), LoggerLevel::WARN, 'WARN', 4 ); + $this->doTestLevel( LoggerLevel::toLevel('WARN'), LoggerLevel::WARN, 'WARN', 4 ); + } + + public function testLevelInfo() { + $this->doTestLevel( LoggerLevel::getLevelInfo(), LoggerLevel::INFO, 'INFO', 6 ); + $this->doTestLevel( LoggerLevel::toLevel(LoggerLevel::INFO), LoggerLevel::INFO, 'INFO', 6 ); + $this->doTestLevel( LoggerLevel::toLevel('INFO'), LoggerLevel::INFO, 'INFO', 6 ); + } + + public function testLevelDebug() { + $this->doTestLevel( LoggerLevel::getLevelDebug(), LoggerLevel::DEBUG, 'DEBUG', 7 ); + $this->doTestLevel( LoggerLevel::toLevel(LoggerLevel::DEBUG), LoggerLevel::DEBUG, 'DEBUG', 7 ); + $this->doTestLevel( LoggerLevel::toLevel('DEBUG'), LoggerLevel::DEBUG, 'DEBUG', 7 ); + } + + public function testLevelAll() { + $this->doTestLevel( LoggerLevel::getLevelAll(), LoggerLevel::ALL, 'ALL', 7 ); + $this->doTestLevel( LoggerLevel::toLevel(LoggerLevel::ALL), LoggerLevel::ALL, 'ALL', 7 ); + $this->doTestLevel( LoggerLevel::toLevel('ALL'), LoggerLevel::ALL, 'ALL', 7 ); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/LoggerLoggingEventTest.php b/thirdparty/apache-log4php/src/test/php/LoggerLoggingEventTest.php new file mode 100644 index 0000000..9b2474d --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/LoggerLoggingEventTest.php @@ -0,0 +1,93 @@ +layout->format($event); + } + +} + +class LoggerLoggingEventTestCaseLayout extends LoggerLayout { + + public function activateOptions() { + return; + } + + public function format(LoggerLoggingEvent $event) { + LoggerLoggingEventTest::$locationInfo = $event->getLocationInformation(); + } +} + +class LoggerLoggingEventTest extends PHPUnit_Framework_TestCase { + + public static $locationInfo; + + public function testConstructWithLoggerName() { + $l = LoggerLevel :: getLevelDebug(); + $e = new LoggerLoggingEvent('fqcn', 'TestLogger', $l, 'test'); + self::assertEquals($e->getLoggerName(), 'TestLogger'); + } + + public function testConstructWithTimestamp() { + $l = LoggerLevel :: getLevelDebug(); + $timestamp = microtime(true); + $e = new LoggerLoggingEvent('fqcn', 'TestLogger', $l, 'test', $timestamp); + self::assertEquals($e->getTimeStamp(), $timestamp); + } + + public function testGetStartTime() { + $time = LoggerLoggingEvent :: getStartTime(); + self::assertType('float', $time); + $time2 = LoggerLoggingEvent :: getStartTime(); + self::assertEquals($time, $time2); + } + + public function testGetLocationInformation() { + $hierarchy = LoggerHierarchy :: singleton(); + $root = $hierarchy->getRootLogger(); + + $a = new LoggerLoggingEventTestCaseAppender('A1'); + $a->setLayout( new LoggerLoggingEventTestCaseLayout() ); + $root->addAppender($a); + + $logger = $hierarchy->getLogger('test'); + + $line = __LINE__; $logger->debug('test'); + $hierarchy->shutdown(); + + $li = self::$locationInfo; + + self::assertEquals($li->getClassName(), get_class($this)); + self::assertEquals($li->getFileName(), __FILE__); + self::assertEquals($li->getLineNumber(), $line); + self::assertEquals($li->getMethodName(), __FUNCTION__); + + } + +} diff --git a/thirdparty/apache-log4php/src/test/php/LoggerManagerTest.php b/thirdparty/apache-log4php/src/test/php/LoggerManagerTest.php new file mode 100644 index 0000000..691d2ac --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/LoggerManagerTest.php @@ -0,0 +1,54 @@ +name; + } + + public function isMale() { + return $this->male; + } + + public function setName($name) { + $this->name = $name; + } + + public function setMale($male) { + $this->male = $male; + } +} +/** + * Tests the LoggerReflectionUtils class + */ +class LoggerReflectionUtilsTest extends PHPUnit_Framework_TestCase { + + public function testSimpleSet() { + $s = new Simple(); + $ps = new LoggerReflectionUtils($s); + $ps->setProperty("name", "Joe"); + $ps->setProperty("male", true); + + $this->assertEquals($s->isMale(), true); + $this->assertEquals($s->getName(), 'Joe'); + } + + public function testSimpleArraySet() { + $arr['xxxname'] = 'Joe'; + $arr['xxxmale'] = true; + + $s = new Simple(); + $ps = new LoggerReflectionUtils($s); + $ps->setProperties($arr, "xxx"); + + $this->assertEquals($s->getName(), 'Joe'); + $this->assertEquals($s->isMale(), true); + } + + public function testStaticArraySet() { + $arr['xxxname'] = 'Joe'; + $arr['xxxmale'] = true; + + $s = new Simple(); + LoggerReflectionUtils::setPropertiesByObject($s,$arr,"xxx"); + + $this->assertEquals($s->getName(), 'Joe'); + $this->assertEquals($s->isMale(), true); + } + public function testCreateObject() { + $object = LoggerReflectionUtils::createObject('LoggerLayoutSimple'); + $name = get_class($object); + self::assertEquals($name, 'LoggerLayoutSimple'); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/LoggerRootTest.php b/thirdparty/apache-log4php/src/test/php/LoggerRootTest.php new file mode 100644 index 0000000..5674c3a --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/LoggerRootTest.php @@ -0,0 +1,52 @@ +loggerRoot = new LoggerRoot(); + } + + public function testIfLevelIsInitiallyLevelAll() { + self::assertEquals($this->loggerRoot->getLevel()->toString(), 'ALL'); + } + + public function testIfNameIsRoot() { + self::assertEquals($this->loggerRoot->getName(), 'root'); + } + + public function testIfParentIsNull() { + self::assertSame($this->loggerRoot->getParent(), null); + } + + public function testSetParent() { + $hierarchy = new LoggerHierarchy(new LoggerRoot()); + $l = $hierarchy->getLogger('dummy'); + $this->loggerRoot->setParent($l); + $this->testIfParentIsNull(); + } + +} diff --git a/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderConsoleTest.php b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderConsoleTest.php new file mode 100644 index 0000000..119c044 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderConsoleTest.php @@ -0,0 +1,75 @@ +setTarget('STDOUT'); + $appender->setLayout($layout); + $appender->activateOptions(); + $appender->append($event); + $appender->close(); + } + + public function testSimpleStdErrLogging() { + $layout = new LoggerLayoutSimple(); + + $event = new LoggerLoggingEvent('LoggerAppenderConsoleTest', + new Logger('mycategory'), + LoggerLevel::getLevelWarn(), + "my message"); + + $appender = new LoggerAppenderConsole("mylogger"); + $appender->setTarget('STDERR'); + $appender->setLayout($layout); + $appender->activateOptions(); + $appender->append($event); + $appender->close(); + } + + + public function testSimpleDefaultLogging() { + $layout = new LoggerLayoutSimple(); + + $event = new LoggerLoggingEvent('LoggerAppenderConsoleTest', + new Logger('mycategory'), + LoggerLevel::getLevelWarn(), + "my message"); + + $appender = new LoggerAppenderConsole("mylogger"); + $appender->setLayout($layout); + $appender->activateOptions(); + $appender->append($event); + $appender->close(); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderEchoTest.php b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderEchoTest.php new file mode 100644 index 0000000..8abc7c9 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderEchoTest.php @@ -0,0 +1,45 @@ +setLayout($layout); + $appender->activateOptions(); + $event = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + + ob_start(); + $appender->append($event); + $v = ob_get_contents(); + ob_end_clean(); + + $e = "ERROR - testmessage\n"; + self::assertEquals($v, $e); + } + +} diff --git a/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderFileTest.php b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderFileTest.php new file mode 100644 index 0000000..b594593 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderFileTest.php @@ -0,0 +1,58 @@ +setFileName('../../../target/phpunit/TEST.txt'); + $appender->setLayout($layout); + $appender->activateOptions(); + $appender->append($event); + $appender->close(); + + $v = file_get_contents('../../../target/phpunit/TEST.txt'); + $e = "WARN - my message".PHP_EOL; + self::assertEquals($e, $v); + } + + protected function tearDown() { + unlink('../../../target/phpunit/TEST.txt'); + rmdir('../../../target/phpunit'); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderNullTest.php b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderNullTest.php new file mode 100644 index 0000000..af9d923 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderNullTest.php @@ -0,0 +1,37 @@ +activateOptions(); + $appender->append(null); + $appender->close(); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderPDOTest.php b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderPDOTest.php new file mode 100644 index 0000000..bb5a088 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderPDOTest.php @@ -0,0 +1,70 @@ +setDSN($dsn); + $appender->setCreateTable(true); + $appender->activateOptions(); + $appender->append($event); + + + $db = $appender->getDatabaseHandle(); + $q = "select * from log4php_log"; + $error = ""; + if($result = $db->query($q)) { + while($row = $result->fetch()) { + self::assertEquals($row['1'], 'TEST'); + self::assertEquals($row['2'], 'ERROR'); + self::assertEquals($row['3'], 'testmessage'); + } + } else { + // todo propagate exception to phpunit + self::assertTrue(false); + } + $appender->close(); + + } + + public function tearDown() { + unlink('appenders/pdotest.sqlite'); + } + +} diff --git a/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderPhpTest.php b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderPhpTest.php new file mode 100644 index 0000000..adf97d4 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/appenders/LoggerAppenderPhpTest.php @@ -0,0 +1,66 @@ +setLayout($layout); + $appender->activateOptions(); + $event = new LoggerLoggingEvent("LoggerAppenderPhpTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $appender->append($event); + + $event = new LoggerLoggingEvent("LoggerAppenderPhpTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + $appender->append($event); + + $event = new LoggerLoggingEvent("LoggerAppenderPhpTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $appender->append($event); + } + + protected function tearDown() { + restore_error_handler(); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/bootstrap.php b/thirdparty/apache-log4php/src/test/php/bootstrap.php new file mode 100644 index 0000000..c9e8c75 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/bootstrap.php @@ -0,0 +1,42 @@ +getAppender('A1'); + self::assertType('LoggerAppenderConsole', $appender); + $layout = $appender->getLayout(); + self::assertType('LoggerLayoutTTCC', $layout); + } + + public function testResetConfiguration() { + self::markTestIncomplete(); + + $this->testConfigure(); + //$root = LoggerManager::getRootLogger(); + $hierarchy = LoggerHierarchy::singleton(); + var_dump(count($hierarchy->getCurrentLoggers())); + LoggerConfiguratorBasic::resetConfiguration(); + var_dump(count($hierarchy->getCurrentLoggers())); + /* + $logger = LoggerManager::getLogger('A1'); + + $layout = $logger->getLayout(); + var_dump($layout); + + var_dump($logger->getName()); + */ + //$appender = LoggerManager::getRootLogger()->getAppender('A1'); + //var_dump($appender); + } + + /*public function testRootLogger() { + $root = LoggerManager::getRootLogger(); + $a = $root->getAppender('A1'); + self::assertType('LoggerAppenderConsole', $a); + $l = $a->getLayout(); + self::assertType('LoggerLayoutTTCC', $l); + }*/ + +} diff --git a/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorIniTest.php b/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorIniTest.php new file mode 100644 index 0000000..741ab85 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorIniTest.php @@ -0,0 +1,73 @@ +getRootLogger(); + self::assertEquals(LoggerLevel::getLevelWarn(), $root->getLevel()); + $appender = $root->getAppender("default"); + self::assertTrue($appender instanceof LoggerAppenderEcho); + $layout = $appender->getLayout(); + self::assertTrue($layout instanceof LoggerLayoutSimple); + + $logger = $hierarchy->getLogger('mylogger'); + self::assertFalse($logger->getAdditivity()); + + $logger2 = $hierarchy->getLogger('mylogger'); + $logger2->setAdditivity(true); + self::assertTrue($logger2->getAdditivity()); + self::assertTrue($logger->getAdditivity()); + } + + public function testConfigureWithRootCategory() { + LoggerConfiguratorIni::configure('configurators/test3.properties'); + $hierarchy = LoggerManager::getLoggerRepository(); + $root = $hierarchy->getRootLogger(); + self::assertEquals(LoggerLevel::getLevelWarn(), $root->getLevel()); + $appender = $root->getAppender("default"); + self::assertTrue($appender instanceof LoggerAppenderEcho); + $layout = $appender->getLayout(); + self::assertTrue($layout instanceof LoggerLayoutSimple); + } + + public function testConfigureWithoutIniFile() { + self::assertFalse(LoggerConfiguratorIni::configure()); + } + + public function testConfigureWithEmptyIniFile() { + self::assertFalse(LoggerConfiguratorIni::configure('configurators/test2.properties')); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorPhpTest.php b/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorPhpTest.php new file mode 100644 index 0000000..c6e59e9 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorPhpTest.php @@ -0,0 +1,47 @@ +getRootLogger(); +// TODO: wrong level in phpUnderControl? +// self::assertEquals(LoggerLevel::getLevelWarn(), $root->getLevel()); + $appender = $root->getAppender("default"); + self::assertTrue($appender instanceof LoggerAppenderEcho); + $layout = $appender->getLayout(); + self::assertTrue($layout instanceof LoggerLayoutSimple); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorXmlTest.php b/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorXmlTest.php new file mode 100644 index 0000000..57bdda9 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/LoggerConfiguratorXmlTest.php @@ -0,0 +1,49 @@ +getRootLogger(); + self::assertEquals(LoggerLevel::getLevelWarn(), $root->getLevel()); + $appender = $root->getAppender("default"); + self::assertTrue($appender instanceof LoggerAppenderEcho); + $layout = $appender->getLayout(); + self::assertTrue($layout instanceof LoggerLayoutSimple); + +// $logger = $hierarchy->getLogger('mylogger'); +// self::assertEquals(LoggerLevel::getLevelInfo(), $logger->getLevel()); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/configurators/test1.php b/thirdparty/apache-log4php/src/test/php/configurators/test1.php new file mode 100644 index 0000000..2f0697e --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/test1.php @@ -0,0 +1,40 @@ + 'ALL', + 'rootLogger' => array( + 'level' => 'WARN', + 'appenders' => array('default'), + ), + 'loggers' => array( + 'mylogger' => array( + 'level' => 'INFO', + 'appenders' => array('default'), + ), + ), + 'appenders' => array( + 'default' => array( + 'class' => 'LoggerAppenderEcho', + 'layout' => array( + 'class' => 'LoggerLayoutSimple' + ), + ), + ), + ); \ No newline at end of file diff --git a/thirdparty/apache-log4php/src/test/php/configurators/test1.properties b/thirdparty/apache-log4php/src/test/php/configurators/test1.properties new file mode 100644 index 0000000..4b36145 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/test1.properties @@ -0,0 +1,21 @@ +; 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. +; +log4php.appender.default = LoggerAppenderEcho +log4php.appender.default.layout = LoggerLayoutSimple + +log4php.additivity.mylogger= "false" +log4php.logger.mylogger = INFO, default +log4php.rootLogger = WARN, default diff --git a/thirdparty/apache-log4php/src/test/php/configurators/test1.xml b/thirdparty/apache-log4php/src/test/php/configurators/test1.xml new file mode 100644 index 0000000..6ff6cb9 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/test1.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + diff --git a/thirdparty/apache-log4php/src/test/php/configurators/test2.properties b/thirdparty/apache-log4php/src/test/php/configurators/test2.properties new file mode 100644 index 0000000..093bdd2 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/test2.properties @@ -0,0 +1,16 @@ +; 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. +; +; EMPTY PROPERTIES \ No newline at end of file diff --git a/thirdparty/apache-log4php/src/test/php/configurators/test3.properties b/thirdparty/apache-log4php/src/test/php/configurators/test3.properties new file mode 100644 index 0000000..ac5dc24 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/configurators/test3.properties @@ -0,0 +1,18 @@ +; 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. +; +log4php.appender.default = LoggerAppenderEcho +log4php.appender.default.layout = LoggerLayoutSimple +log4php.rootCategory = WARN, default diff --git a/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterDenyAllTest.php b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterDenyAllTest.php new file mode 100644 index 0000000..6a25d05 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterDenyAllTest.php @@ -0,0 +1,44 @@ +decide($eventError); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::DENY); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterLevelMatchTest.php b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterLevelMatchTest.php new file mode 100644 index 0000000..2f8d80e --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterLevelMatchTest.php @@ -0,0 +1,122 @@ +setAcceptOnMatch(true); + $filter->setLevelToMatch(LoggerLevel::getLevelError()); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::ACCEPT); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } + + public function testDecideDenyErrorLevel() { + $filter = new LoggerFilterLevelMatch(); + $filter->setAcceptOnMatch("false"); + $filter->setLevelToMatch(LoggerLevel::getLevelError()); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } + + public function testDecideAcceptWarnLevel() { + $filter = new LoggerFilterLevelMatch(); + $filter->setAcceptOnMatch("true"); + $filter->setLevelToMatch(LoggerLevel::getLevelWarn()); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::ACCEPT); + } + + public function testDecideDenyWarnLevel() { + $filter = new LoggerFilterLevelMatch(); + $filter->setAcceptOnMatch("false"); + $filter->setLevelToMatch(LoggerLevel::getLevelWarn()); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::DENY); + } + + public function testDecideDenyDebugLevel() { + $filter = new LoggerFilterLevelMatch(); + $filter->setAcceptOnMatch("false"); + $filter->setLevelToMatch(LoggerLevel::getLevelDebug()); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterLevelRangeTest.php b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterLevelRangeTest.php new file mode 100644 index 0000000..7d474f6 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterLevelRangeTest.php @@ -0,0 +1,67 @@ +setAcceptOnMatch("true"); + $filter->setLevelMin(LoggerLevel::getLevelWarn()); + $filter->setLevelMax(LoggerLevel::getLevelError()); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::ACCEPT); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::ACCEPT); + } + + public function testDecideAcceptFalse() { + $filter = new LoggerFilterLevelRange(); + $filter->setAcceptOnMatch("false"); + $filter->setLevelMin(LoggerLevel::getLevelWarn()); + $filter->setLevelMax(LoggerLevel::getLevelError()); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "testmessage"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } + } diff --git a/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterStringMatchTest.php b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterStringMatchTest.php new file mode 100644 index 0000000..333f42a --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/filters/LoggerFilterStringMatchTest.php @@ -0,0 +1,111 @@ +setAcceptOnMatch("true"); + $filter->setStringToMatch("testmessage"); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventError2 = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "xyz"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug2 = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "xyz"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + $eventWarn2 = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "xyz"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::ACCEPT); + + $result = $filter->decide($eventError2); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::ACCEPT); + + $result = $filter->decide($eventDebug2); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::ACCEPT); + + $result = $filter->decide($eventWarn2); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } + + public function testDecideDeny() { + $filter = new LoggerFilterStringMatch(); + $filter->setAcceptOnMatch("false"); + $filter->setStringToMatch("testmessage"); + + $eventError = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventError2 = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "xyz"); + $eventDebug = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + $eventDebug2 = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelDebug(), "xyz"); + $eventWarn = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + $eventWarn2 = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "xyz"); + + $result = $filter->decide($eventError); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventError2); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventDebug); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventDebug2); + self::assertEquals($result, LoggerFilter::NEUTRAL); + + $result = $filter->decide($eventWarn); + self::assertEquals($result, LoggerFilter::DENY); + + $result = $filter->decide($eventWarn2); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } + + public function testDecideNullMessage() { + $filter = new LoggerFilterStringMatch(); + $filter->setAcceptOnMatch("false"); + $filter->setStringToMatch("testmessage"); + + $event = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), null); + + $result = $filter->decide($event); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } + + public function testDecideNullMatch() { + $filter = new LoggerFilterStringMatch(); + $filter->setAcceptOnMatch("false"); + $filter->setStringToMatch(null); + + $event = new LoggerLoggingEvent("LoggerAppenderEchoTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); + + $result = $filter->decide($event); + self::assertEquals($result, LoggerFilter::NEUTRAL); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutHtmlTest.php b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutHtmlTest.php new file mode 100644 index 0000000..292a5e3 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutHtmlTest.php @@ -0,0 +1,92 @@ +format($event); + + $e = PHP_EOL."".PHP_EOL. + "".$event->getTime()."".PHP_EOL. + "getThreadName()." thread\">".$event->getThreadName()."".PHP_EOL. + "ERROR".PHP_EOL. + "TEST".PHP_EOL. + "testmessage".PHP_EOL. + "".PHP_EOL; + + self::assertEquals($v, $e); + } + + public function testWarnLayout() { + $event = new LoggerLoggingEvent("LoggerLayoutHtmlTest", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $layout = new LoggerLayoutHtml(); + $v = $layout->format($event); + + $e = PHP_EOL."".PHP_EOL. + "".$event->getTime()."".PHP_EOL. + "getThreadName()." thread\">".$event->getThreadName()."".PHP_EOL. + "WARN".PHP_EOL. + "TEST".PHP_EOL. + "testmessage".PHP_EOL. + "".PHP_EOL; + + self::assertEquals($v, $e); + } + + public function testContentType() { + $layout = new LoggerLayoutHtml(); + $v = $layout->getContentType(); + $e = "text/html"; + self::assertEquals($v, $e); + } + + public function testTitle() { + $layout = new LoggerLayoutHtml(); + $v = $layout->getTitle(); + $e = "Log4php Log Messages"; + self::assertEquals($v, $e); + + $layout->setTitle("test"); + $v = $layout->getTitle(); + $e = "test"; + self::assertEquals($v, $e); + } + + public function testHeader() { + $layout = new LoggerLayoutHtml(); + $v = $layout->getHeader(); + self::assertTrue(strpos($v, "") === 0); + } + + public function testFooter() { + $layout = new LoggerLayoutHtml(); + $v = $layout->getFooter(); + self::assertTrue(strpos($v, "") === 0); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutPatternTest.php b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutPatternTest.php new file mode 100644 index 0000000..782e31f --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutPatternTest.php @@ -0,0 +1,62 @@ +setConversionPattern("%-5p %c %X{username}: %m in %F at %L%n"); + $v = $layout->format($event); + $e = 'ERROR TEST : testmessage in NA at NA'.PHP_EOL; + + self::assertEquals($v, $e); + } + + public function XtestWarnLayout() { + /* +Comment in when this has been fixed: + +1) testWarnLayout(LoggerLayoutPatternTest) +Undefined index: log4php.LoggerPatternConverter.spaces +/Users/cgrobmeier/Documents/Development/workspace/log4php-trunk/src/main/php/helpers/LoggerPatternConverter.php:131 +/Users/cgrobmeier/Documents/Development/workspace/log4php-trunk/src/main/php/helpers/LoggerPatternConverter.php:104 +/Users/cgrobmeier/Documents/Development/workspace/log4php-trunk/src/main/php/layouts/LoggerPatternLayout.php:216 +/Users/cgrobmeier/Documents/Development/workspace/log4php-trunk/src/test/php/layouts/LoggerLayoutPatternTest.php:45 + + * + */ + $event = new LoggerLoggingEvent("LoggerLayoutXml", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $layout = new LoggerLayoutPattern(); + $layout->setConversionPattern("%-5p %c %X{username}: %m in %F at %L%n"); + $v = $layout->format($event); + $e = 'WARN TEST : testmessage in NA at NA'.PHP_EOL; + + self::assertEquals($v, $e); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutSimpleTest.php b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutSimpleTest.php new file mode 100644 index 0000000..d8dd5ce --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutSimpleTest.php @@ -0,0 +1,37 @@ +format($event); + $e = "ERROR - testmessage\n"; + self::assertEquals($v, $e); + } + +} diff --git a/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutTTCCTest.php b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutTTCCTest.php new file mode 100644 index 0000000..abd50a8 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutTTCCTest.php @@ -0,0 +1,57 @@ +format($event); + + $pos = strpos($v, "[".$event->getThreadName()."] ERROR TEST - testmessage"); + + if ($pos === false) { + self::assertTrue(false); + } else if ($pos === true) { + self::assertTrue(true); + } + } + + public function testWarnLayout() { + $event = new LoggerLoggingEvent("LoggerLayoutXml", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $layout = new LoggerLayoutTTCC(); + $v = $layout->format($event); + + $pos = strpos($v, "[".$event->getThreadName()."] WARN TEST - testmessage"); + + if ($pos === false) { + self::assertTrue(false); + } else if ($pos === true) { + self::assertTrue(true); + } + } +} diff --git a/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutXmlTest.php b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutXmlTest.php new file mode 100644 index 0000000..66cc121 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/layouts/LoggerLayoutXmlTest.php @@ -0,0 +1,59 @@ +format($event); + + $e = "getThreadName(). + "\" timestamp=\"".number_format((float)($event->getTimeStamp() * 1000), 0, '', '')."\">".PHP_EOL. + "".PHP_EOL. + "".PHP_EOL. + "\n".PHP_EOL; + + self::assertEquals($v, $e); + } + + public function testWarnLayout() { + $event = new LoggerLoggingEvent("LoggerLayoutXml", new Logger("TEST"), LoggerLevel::getLevelWarn(), "testmessage"); + + $layout = new LoggerLayoutXml(); + $v = $layout->format($event); + + $e = "getThreadName(). + "\" timestamp=\"".number_format((float)($event->getTimeStamp() * 1000), 0, '', '')."\">".PHP_EOL. + "".PHP_EOL. + "".PHP_EOL. + "\n".PHP_EOL; + + self::assertEquals($v, $e); + } +} diff --git a/thirdparty/apache-log4php/src/test/php/phpunit.xml b/thirdparty/apache-log4php/src/test/php/phpunit.xml new file mode 100644 index 0000000..15d1600 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/phpunit.xml @@ -0,0 +1,27 @@ + + + + . + + + + + ../../main/php + + ../../main/php/appenders/LoggerAppenderAdodb.php + + + + + + + + + diff --git a/thirdparty/apache-log4php/src/test/php/renderers/LoggerRendererDefaultTest.php b/thirdparty/apache-log4php/src/test/php/renderers/LoggerRendererDefaultTest.php new file mode 100644 index 0000000..46168bc --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/renderers/LoggerRendererDefaultTest.php @@ -0,0 +1,40 @@ +doRender($class)); + } + +} diff --git a/thirdparty/apache-log4php/src/test/php/renderers/LoggerRendererMapTest.php b/thirdparty/apache-log4php/src/test/php/renderers/LoggerRendererMapTest.php new file mode 100644 index 0000000..6e3a503 --- /dev/null +++ b/thirdparty/apache-log4php/src/test/php/renderers/LoggerRendererMapTest.php @@ -0,0 +1,64 @@ +