Rank aliases in search in order they appear in the messages file.
[lhc/web/wiklou.git] / includes / debug / logger / monolog / WikiProcessor.php
1 <?php
2 /**
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * http://www.gnu.org/copyleft/gpl.html
17 *
18 * @file
19 */
20
21 namespace MediaWiki\Logger\Monolog;
22
23 /**
24 * Annotate log records with request-global metadata, such as the hostname,
25 * wiki / request ID, and MediaWiki version.
26 *
27 * @since 1.25
28 * @author Bryan Davis <bd808@wikimedia.org>
29 * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
30 */
31 class WikiProcessor {
32 /** @var array Keys which should not be used in log context */
33 protected $reservedKeys = [
34 // from monolog:src/Monolog/Formatter/LogstashFormatter.php#L71-L88
35 'message', 'channel', 'level', 'type',
36 // from WebProcessor
37 'url', 'ip', 'http_method', 'server', 'referrer',
38 // from WikiProcessor
39 'host', 'wiki', 'reqId', 'mwversion',
40 // from config magic
41 'normalized_message',
42 ];
43
44 /**
45 * @param array $record
46 * @return array
47 */
48 public function __invoke( array $record ) {
49 global $wgVersion;
50
51 // some log aggregators such as Logstash will merge the log context into the main
52 // metadata and end up overwriting the data coming from processors
53 foreach ( $this->reservedKeys as $key ) {
54 if ( isset( $record['context'][$key] ) ) {
55 wfLogWarning( __METHOD__ . ": '$key' key overwritten in log context." );
56 }
57 }
58
59 $record['extra'] = array_merge(
60 $record['extra'],
61 [
62 'host' => wfHostname(),
63 'wiki' => wfWikiID(),
64 'mwversion' => $wgVersion,
65 'reqId' => \WebRequest::getRequestId(),
66 ]
67 );
68 return $record;
69 }
70 }