diff --git a/classes/phing/listener/MonologListener.php b/classes/phing/listener/MonologListener.php new file mode 100644 index 0000000000..e266115fad --- /dev/null +++ b/classes/phing/listener/MonologListener.php @@ -0,0 +1,154 @@ +. + */ + +use Monolog\Logger; + +/** + * Listener which sends events to Monolog. + * + * @author Siad Ardroumli + * @package phing.listener + */ +class MonologListener implements BuildListener +{ + /** + * log category we log into + */ + public const LOG_PHING = 'phing'; + + /** + * @var Logger + */ + private $log; + + /** + * Construct the listener + */ + public function __construct() + { + $this->log = new Logger(self::LOG_PHING); + } + + /** + * @see BuildListener#buildStarted + * {@inheritDoc}. + */ + public function buildStarted(BuildEvent $event) + { + $log = $this->log->withName(Project::class); + $log->info('Build started.'); + } + + /** + * @see BuildListener#buildFinished + * {@inheritDoc}. + */ + public function buildFinished(BuildEvent $event) + { + $log = $this->log->withName(Project::class); + if ($event->getException() === null) { + $log->info('Build finished.'); + } else { + $log->error('Build finished with error. ' . $event->getException()); + } + } + + /** + * @see BuildListener#targetStarted + * {@inheritDoc}. + */ + public function targetStarted(BuildEvent $event) + { + $log = $this->log->withName(Target::class); + $log->info("Target \"{$event->getTarget()->getName()}\" started."); + } + + /** + * @see BuildListener#targetFinished + * {@inheritDoc}. + */ + public function targetFinished(BuildEvent $event) + { + $targetName = $event->getTarget()->getName(); + $cat = $this->log->withName(Target::class); + if ($event->getException() === null) { + $cat->info("Target \"{$targetName}\" finished."); + } else { + $cat->error("Target \"{$targetName}\" finished with error. " . $event->getException()); + } + } + + /** + * @see BuildListener#taskStarted + * {@inheritDoc}. + */ + public function taskStarted(BuildEvent $event) + { + $task = $event->getTask(); + $log = $this->log->withName(get_class($task)); + $log->info("Task \"{$task->getTaskName()}\" started."); + } + + /** + * @see BuildListener#taskFinished + * {@inheritDoc}. + */ + public function taskFinished(BuildEvent $event) + { + $task = $event->getTask(); + $log = $this->log->withName(get_class($task)); + if ($event->getException() === null) { + $log->info("Task \"{$task->getTaskName()}\" finished."); + } else { + $log->error("Task \"{$task->getTaskName()}\" finished with error. {$event->getException()}"); + } + } + + /** + * @see BuildListener#messageLogged + * {@inheritDoc}. + */ + public function messageLogged(BuildEvent $event) + { + $categoryObject = $event->getTask(); + if ($categoryObject === null) { + $categoryObject = $event->getTarget(); + if ($categoryObject === null) { + $categoryObject = $event->getProject(); + } + } + + $log = $this->log->withName(get_class($categoryObject)); + switch ($event->getPriority()) { + case Project::MSG_WARN: + $log->warn($event->getMessage()); + break; + case Project::MSG_INFO: + $log->info($event->getMessage()); + break; + case Project::MSG_VERBOSE: + case Project::MSG_DEBUG: + $log->debug($event->getMessage()); + break; + default: + $log->error($event->getMessage()); + break; + } + } +} diff --git a/composer.json b/composer.json index 14bee17f02..c698595d8f 100644 --- a/composer.json +++ b/composer.json @@ -58,7 +58,8 @@ "squizlabs/php_codesniffer": "^2.9 || ^3.5", "symfony/stopwatch": "~2.8 || ^3.1 || ^4.0 || ^5.0", "tedivm/jshrink": "^1.3", - "symfony/dependency-injection": "^2.8.50 || ^3.4.26 || ~4.1.12 || >4.2.7 <6.0.0" + "symfony/dependency-injection": "^2.8.50 || ^3.4.26 || ~4.1.12 || >4.2.7 <6.0.0", + "monolog/monolog": "^1.25 || ^2.0" }, "autoload": { "classmap": [ @@ -95,7 +96,8 @@ "symfony/stopwatch": "Needed by the StopwatchTask", "aws/aws-sdk-php": "AWS SDK used by S3*Tasks", "scssphp/scssphp": "A compiler for SCSS written in PHP, used by SassTask", - "jawira/plantuml-encoding": "Required by VisualizerTask" + "jawira/plantuml-encoding": "Required by VisualizerTask", + "monolog/monolog": "Required by the MonologListener" }, "prefer-stable": true } diff --git a/composer.lock b/composer.lock index 70ba1ace9e..55b043eaa6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3deee308cf1edebc981b374e3a69e1c7", + "content-hash": "03bc5cf1b8ea71f3f185a506e0783998", "packages": [ { "name": "mehr-als-nix/parallel", @@ -368,16 +368,16 @@ "packages-dev": [ { "name": "aws/aws-sdk-php", - "version": "3.123.0", + "version": "3.128.3", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "3bf671629a3b2a5a5694f8dfee15686e586b33b6" + "reference": "9e46eae4974542b8e3e6107de857668b6968081d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3bf671629a3b2a5a5694f8dfee15686e586b33b6", - "reference": "3bf671629a3b2a5a5694f8dfee15686e586b33b6", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/9e46eae4974542b8e3e6107de857668b6968081d", + "reference": "9e46eae4974542b8e3e6107de857668b6968081d", "shasum": "" }, "require": { @@ -402,7 +402,8 @@ "nette/neon": "^2.3", "phpunit/phpunit": "^4.8.35|^5.4.3", "psr/cache": "^1.0", - "psr/simple-cache": "^1.0" + "psr/simple-cache": "^1.0", + "sebastian/comparator": "^1.2.3" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", @@ -447,7 +448,7 @@ "s3", "sdk" ], - "time": "2019-11-26T19:08:40+00:00" + "time": "2019-12-11T19:13:12+00:00" }, { "name": "cilex/cilex", @@ -831,16 +832,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.4.1", + "version": "6.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "0895c932405407fd3a7368b6910c09a24d26db11" + "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11", - "reference": "0895c932405407fd3a7368b6910c09a24d26db11", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5", + "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5", "shasum": "" }, "require": { @@ -855,12 +856,13 @@ "psr/log": "^1.1" }, "suggest": { + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.3-dev" + "dev-master": "6.5-dev" } }, "autoload": { @@ -893,7 +895,7 @@ "rest", "web service" ], - "time": "2019-10-23T15:58:00+00:00" + "time": "2019-12-07T18:20:45+00:00" }, { "name": "guzzlehttp/promises", @@ -1776,16 +1778,16 @@ }, { "name": "pear/archive_tar", - "version": "1.4.8", + "version": "1.4.9", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "442bdffb7edb84c898cfd94f7ac8500e49d5bbb5" + "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/442bdffb7edb84c898cfd94f7ac8500e49d5bbb5", - "reference": "442bdffb7edb84c898cfd94f7ac8500e49d5bbb5", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0", + "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0", "shasum": "" }, "require": { @@ -1838,7 +1840,7 @@ "archive", "tar" ], - "time": "2019-10-21T13:31:24+00:00" + "time": "2019-12-04T10:17:28+00:00" }, { "name": "pear/console_getopt", @@ -2109,16 +2111,16 @@ }, { "name": "pear/pear_exception", - "version": "v1.0.0", + "version": "v1.0.1", "source": { "type": "git", "url": "https://github.com/pear/PEAR_Exception.git", - "reference": "8c18719fdae000b690e3912be401c76e406dd13b" + "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", - "reference": "8c18719fdae000b690e3912be401c76e406dd13b", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", + "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7", "shasum": "" }, "require": { @@ -2134,9 +2136,9 @@ } }, "autoload": { - "psr-0": { - "PEAR": "" - } + "classmap": [ + "PEAR/" + ] }, "notification-url": "https://packagist.org/downloads/", "include-path": [ @@ -2160,7 +2162,7 @@ "keywords": [ "exception" ], - "time": "2015-02-10T20:07:52+00:00" + "time": "2019-12-10T10:24:42+00:00" }, { "name": "pear/versioncontrol_git", @@ -2800,16 +2802,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "f4e7a6a1382183412246f0d361078c29fb85089e" + "reference": "a8593bf5176bf3d3f2966942c530be19b44ec87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/f4e7a6a1382183412246f0d361078c29fb85089e", - "reference": "f4e7a6a1382183412246f0d361078c29fb85089e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/a8593bf5176bf3d3f2966942c530be19b44ec87c", + "reference": "a8593bf5176bf3d3f2966942c530be19b44ec87c", "shasum": "" }, "require": { @@ -2850,7 +2852,7 @@ "php", "type" ], - "time": "2019-11-30T20:20:49+00:00" + "time": "2019-12-11T13:45:14+00:00" }, { "name": "phpspec/prophecy", @@ -3169,16 +3171,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.5.17", + "version": "7.5.18", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a" + "reference": "fcf6c4bfafaadc07785528b06385cce88935474d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4c92a15296e58191a4cd74cff3b34fc8e374174a", - "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fcf6c4bfafaadc07785528b06385cce88935474d", + "reference": "fcf6c4bfafaadc07785528b06385cce88935474d", "shasum": "" }, "require": { @@ -3249,7 +3251,7 @@ "testing", "xunit" ], - "time": "2019-10-28T10:37:36+00:00" + "time": "2019-12-06T05:14:37+00:00" }, { "name": "pimple/pimple", @@ -4303,16 +4305,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.5.2", + "version": "3.5.3", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7" + "reference": "557a1fc7ac702c66b0bbfe16ab3d55839ef724cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/65b12cdeaaa6cd276d4c3033a95b9b88b12701e7", - "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/557a1fc7ac702c66b0bbfe16ab3d55839ef724cb", + "reference": "557a1fc7ac702c66b0bbfe16ab3d55839ef724cb", "shasum": "" }, "require": { @@ -4350,7 +4352,7 @@ "phpcs", "standards" ], - "time": "2019-10-28T04:36:32+00:00" + "time": "2019-12-04T04:46:47+00:00" }, { "name": "symfony/config", @@ -5434,20 +5436,19 @@ }, { "name": "zendframework/zend-i18n", - "version": "2.10.0", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/zendframework/zend-i18n.git", - "reference": "561a815ce32c86b0f1de11135477e637926d56b6" + "reference": "e17a54b3aee333ab156958f570cde630acee8b07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/561a815ce32c86b0f1de11135477e637926d56b6", - "reference": "561a815ce32c86b0f1de11135477e637926d56b6", + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/e17a54b3aee333ab156958f570cde630acee8b07", + "reference": "e17a54b3aee333ab156958f570cde630acee8b07", "shasum": "" }, "require": { - "ext-intl": "*", "php": "^5.6 || ^7.0", "zendframework/zend-stdlib": "^2.7 || ^3.0" }, @@ -5463,6 +5464,7 @@ "zendframework/zend-view": "^2.6.3" }, "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", "zendframework/zend-cache": "Zend\\Cache component", "zendframework/zend-config": "Zend\\Config component", "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", @@ -5475,8 +5477,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10.x-dev", - "dev-develop": "2.11.x-dev" + "dev-master": "2.9.x-dev", + "dev-develop": "2.10.x-dev" }, "zf": { "component": "Zend\\I18n", @@ -5498,7 +5500,7 @@ "i18n", "zf" ], - "time": "2019-11-18T20:31:29+00:00" + "time": "2019-09-30T12:04:37+00:00" }, { "name": "zendframework/zend-json", diff --git a/docs/guide/en/source/appendixes/coreloggers.xml b/docs/guide/en/source/appendixes/coreloggers.xml index 196d584588..3fc9dcbe5f 100644 --- a/docs/guide/en/source/appendixes/coreloggers.xml +++ b/docs/guide/en/source/appendixes/coreloggers.xml @@ -251,4 +251,9 @@ AnsiColorLogger.DEBUG_COLOR=01;34 A logger which logs nothing but build failure and what task might output. + + MonologListener + Listener which sends events to Monolog. + + diff --git a/test/classes/phing/listener/MonologListenerTest.php b/test/classes/phing/listener/MonologListenerTest.php new file mode 100644 index 0000000000..5c16251912 --- /dev/null +++ b/test/classes/phing/listener/MonologListenerTest.php @@ -0,0 +1,32 @@ +. + */ + +use PHPUnit\Framework\TestCase; + +class MonologListenerTest extends TestCase +{ + /** + * @test + */ + public function buildStarted() + { + $listener = new MonologListener(); + $this->assertNull($listener->buildStarted(new BuildEvent(new Project()))); + } +}