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.
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.
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
21 namespace MediaWiki\Logger\Monolog
;
24 * Annotate log records with request-global metadata, such as the hostname,
25 * wiki / request ID, and MediaWiki version.
28 * @author Bryan Davis <bd808@wikimedia.org>
29 * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
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',
37 'url', 'ip', 'http_method', 'server', 'referrer',
39 'host', 'wiki', 'reqId', 'mwversion',
45 * @param array $record
48 public function __invoke( array $record ) {
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." );
59 $record['extra'] = array_merge(
62 'host' => wfHostname(),
64 'mwversion' => $wgVersion,
65 'reqId' => \WebRequest
::getRequestId(),