Commit graph

86 commits

Author SHA1 Message Date
Bryan Davis
7ab9e6ed0c Remove MWLoggerMonologSamplingHandler
The Monolog\Handler\SamlingHandler class available since Monolog v1.12.0
is an upstreamed equivalent of MWLoggerMonologSamplingHandler.

Requires: I8790da95fd658234e35b2d846af35993ebcd80e9
Change-Id: I3841cbab95382a66098d90f5570fa0bf3521578a
2015-03-27 20:27:32 +00:00
jenkins-bot
7958fe5dc9 Merge "Update MWLoggerLegacyLogger phpdoc" 2015-03-27 17:06:36 +00:00
jenkins-bot
571d4c27c1 Merge "Allow MWLoggerMonologHandler to take prefix from channel" 2015-03-27 17:06:01 +00:00
Ori.livneh
2b6eb60ce5 Revert "Optimize order of styles and scripts"
The patch did not improve performance. I'd like to think that the increased
control over when inline scripts are executed makes the patch worthwhile
regardless, but that is post hoc justification and possibly a bit of personal
ego. Krinkle agrees that we may use some of the ideas in this patch in the
future but he thinks we're better off not heading down this path before we
have a better sense of where we're going, and I trust his judgment.

This reverts commit e86e5f8460.

Change-Id: I151f74a41dd664b5a0aa5cfd99fcc95e2686a1e6
2015-03-25 04:40:46 +00:00
Bryan Davis
99fb48e3aa Update MWLoggerLegacyLogger phpdoc
Add a missing @return declaration for MWLoggerLegacyLogger::interpolate

Change-Id: Ia7d35606d63a3da92b1e38284c611de1961a0c8e
2015-03-22 16:18:52 -06:00
Bryan Davis
f16f8fe9c5 Allow MWLoggerMonologHandler to take prefix from channel
Make MWLoggerMonologHandler replace a prefix of "{channel}" with the log
event channel when formatting an event for a udp2log stream. This allows
a simpler configuration for a typical Monolog configuration where
a separate file is desired for each logging channel that is emitted to
udp2log. One handler can be shared by multiple channels.

Change-Id: Ie2b24ba02b281b8d8cf2ad58d28874c710e1e2e5
2015-03-22 16:12:25 -06:00
Kunal Mehta
8911a8d0b7 Send messages logged via MWLoggerLegacyLogger::log() to the debug toolbar
Bug: T93145
Change-Id: Ia96525faf4ffcbd2b5beae9716d6be009f2b6074
2015-03-18 23:57:47 +00:00
Ori Livneh
e86e5f8460 Optimize order of styles and scripts
The current ordering of scripts and stylesheets in <head> causes all major
browsers to serialize and defer requests that could be performed in parallel.

The problem is that external stylesheets are loaded before inline scripts. As
Steven Souders explains, "all major browsers preserve the order of CSS and
JavaScript. The stylesheet has to be fully downloaded, parsed, and applied
before the inline script is executed. And the inline script must be executed
before the remaining resources can be downloaded. Therefore, resources that
follow a stylesheet and inline script are blocked from downloading."[1]

In other words: the browser could start loading body images, but it refuses to
do that until it has executed inline scripts in head. And it refuses to execute
those scripts until the external CSS is downloaded, parsed and applied. You can
see the effect of this in this image, showing the request waterfall for
[[en:Gothic Alphabet]]: [2]. Notice how no images were requested before the
browser had finished processing the three load.php requests at the top.

To fix this, we want to move the inline scripts above the external CSS. This is
a little bit tricky, because the inline scripts depend on mw.loader, which is
loaded via an external script. If we move the external script so that it too is
above the external stylesheet, we force the browser to serialize requests,
because the browser will not retrieve the external CSS until it has retrieved
and executed the external JS code. So what we want is to move the inline
scripts above the external stylesheet, but keep the external script (which the
inline scripts depend on) below the external stylesheet.

We can do this by wrapping the inline script code in a closure (which binds
'mw') and enqueuing the closure in a global array which will be processed by
the startup module at just the right time.

Net result: external CSS and JS is retrieved in parallel, retrieval of images
(and other external assets) is unblocked, but the order in which code is
evaluated remains the same.

[1]: <http://www.stevesouders.com/blog/2009/05/06/positioning-inline-scripts/>
[2]: <http://people.wikimedia.org/~ori/enwiki-waterfall.png> (excerpted from
 <http://www.webpagetest.org/result/150316_0C_7MB/1/details/>.

Change-Id: I98d383a6299ffbd10210431544a505338ca8643f
2015-03-17 03:10:49 +01:00
Bryan Davis
8382b5570e Update MWLoggerMonologHandler for Monolog 1.12.0
Monolog 1.12.0 "fixed" Handler::isHandling() so that instead of a full
log record it is only passed an array with the log event's level.
MWLoggerMonologHandler was relying on a full record to allow inspecting
the channel name and looking for a 'private' flag in the context
information.

Update MWLoggerMonologHandler to do legacy processing checks in
Handler::write() where the full log event is present for inspection.

Bug: T89313
Change-Id: Ia878c2cb6bff47d6b35ff38ba3b7ac2ea5556565
2015-02-13 18:12:30 -07:00
Bryan Davis
f058574fcd Add Monolog handler for syslog UDP transport
The stock Monolog\Handler\SyslogUdpHandler only works with a specifically
tailored Formatter class and it's output cannot be fed directly into
Logstash's syslog input. This handler implements RFC 3164 in a way that
can be used with any Formatter and parsed directly by Logstash.

Bug: T88870
Change-Id: Ib098d5cb8fe9643742360bf51b54fc0e27996c0f
2015-02-09 22:38:26 -07:00
Bryan Davis
d62f6391f8 Provide a backwards compatibility shim for MWLogger
MWLogger was renamed MWLoggerFactory and reduced to a static utility
class in Ie474676. Reintroduce an MWLogger that proxies the public
static methods of MWLoggerFactory to ease the transition of users who
have implemented $wgMWLoggerDefaultSpi configurations that reference
MWLogger.

As noted in the class, this is a temporary bandaid that should be ripped
off before 1.25 becomes an official release.

Change-Id: Iaccb78a510c60aab2ff20a9aa7c0869699657388
2015-01-22 22:11:08 +00:00
Bryan Davis
56b70b61af Replace MWLogger with MWLoggerFactory
Time wounds all heels. During the code review for the PSR-3 logging
introduction, several people asked me why we needed a wrapper
for Psr\Log\LoggerInterface if the point was to use the standard. At the
time I was convinced that it would be better to introduce the dependency
via a wrapper class so that we could use the wrapper to patch over any
deficiencies that we might find in the PSR-3 API. After going on to work
on a project to disentangle other MediaWiki components from internal
project dependencies I have suddenly and clearly seen the error of my
ways.

We still need a logger factory as PSR-3 does not specify
a standard mechanism for creating Psr\Log\LoggerInterface instances. My
solution is to convert MWLogger into MWLoggerFactory to retain a static
factory interface for creating PSR-3 loggers but remove the MWLogger
wrapper class itself in favor of direct exposure of
Psr\Log\LoggerInterface to the MediaWiki consumer classes.

Change-Id: Ie47467657dcf341991ada00827dca5e8eff95438
2015-01-22 22:10:49 +00:00
Kunal Mehta
4316c8c48b Implement support for a minimum log level in $wgDebugLogGroups
For some log groups, we only want to log them if they meet a certain
level of severity. An example of this is the current 'memcached-serious'
log group, which can be merged with the normal 'memcached' group
in the future, and report at a severity of ERROR.

This adds a 'level' parameter to the $wgDebugLogGroups, for example:
    $wgDebugLogGroups['memcached'] = array(
        'destination' => '/var/log/mw/memcached.log',
        'level' => \Psr\Log\LogLevel::ERROR,
    );

Bug: T85073
Change-Id: Ic53bc4c8e318ed188fe6f4e838e6789b3c3fd574
2014-12-31 18:16:17 +00:00
Reedy
e0a9aba3ba Add use statement for type used in MWLoggerMonologSamplingHandler::setFormatter()
Change-Id: I02629711eccfecdab77c5e6d80833806d48d07cf
2014-12-24 17:21:20 +00:00
Bryan Davis
1bad1d020f monolog: MWLoggerMonologSamplingHandler
Introduce the MWLoggerMonologSamplingHandler which can
be used to probabilistically sample the log event stream.

Bug: T85067
Change-Id: Icd14fc8c44ca9eef0f3f5cc4f1d1d8b68d517f07
2014-12-20 14:35:55 -07:00
jenkins-bot
d34a6ca677 Merge "Fix some stuttering in comments and documentation" 2014-12-17 22:28:27 +00:00
Ricordisamoa
12dec5d85d Fix some stuttering in comments and documentation
Change-Id: I9c0088b9aab37335203cad45a1d6fa8ac3f43321
2014-12-17 19:44:10 +00:00
Bryan Davis
6aa3c4fe84 Logging related comment updates
* Pretty up some logging related comments.
* Send wfDebugLog messages to logger at info level

Change-Id: I97b8629095e8d6168dbeb791dfb5e7753d281cbe
2014-12-16 17:12:23 -07:00
Bryan Davis
dad7abd9ce Create a generic UDP transport class
Code moved from MWLoggerLegacyLogger::emit(), which was formerly
in wfErrorLog().

Bug: T74572
Bug: T78599
Change-Id: I9e0e63d41bed6ccb468f3a9f1d52f156acc355a8
2014-12-15 15:06:43 -07:00
Bryan Davis
45cf5b1803 Do not require that a Monolog handler has a formatter
Not all handlers require a formatter.

Change-Id: Ifb31aa278d4e90b7fa3a2b7bf3b20173b8345afd
2014-12-12 13:29:35 -07:00
Timo Tijhof
ff6513f28b Remove '@section LICENSE'
This was used in 2 special classes, the logger classes and spread
to a few other random classes.

Afaik this has no meaning. Is for something we don't use, and
goes against the meaning of '@section' in Doxygen, which we do
use.

In Doxygen output, all LICENSE references became links to
ProfilerXhprof (the one Doxygen encoutered first).

Bug: T72328
Change-Id: Icc7c443245c70bc0f549bee7d105eef5691c864d
2014-11-26 02:20:55 +00:00
Bryan Davis
f210ce84cd Allow limiting Monolog output using legacy settings
Add $useLegacyFilter option to MWLoggerMonologHandler constructor that
will use MWLoggerLegacyLogger::shouldEmit to decide if a given log
message should be emitted.

Bug: T845
Change-Id: If311308faad35348fdc7e85155a1bc16bbf75c85
2014-11-20 23:30:42 -07:00
Bryan Davis
0223290e84 Add Monolog formatter that mimics legacy log output
Having a log formatter for the Monolog stack that mimics the legacy wf*
logging function output will ease the transition for users wishing to
use Monolog who have tooling that expects the legacy log formats.

Bug: T845
Change-Id: I06295ccc4b068c61d7971024213366004b69c03d
2014-11-20 17:45:20 -07:00
Bryan Davis
2792ea9783 Add logging context to database logs
* Add optional $context parameter to wfDebug, wfDebugLog, wfLogDBError
  and wfErrorLog that will be passed to MWLogger.
* Add support for PSR-3 style log message parameter interpolation in
  MWLoggerLegacyLogger.
* Add context information to wfLogDBError calls made from DatabaseBase,
  DatabaseMysqlBase and LoadBalancer instances.
* Deprecate wfDebugTimer() which now appears to be unused.

Change-Id: Ic90d593d00a2b0b5b80ed205908cbe624042603c
2014-11-19 17:59:55 +00:00
Chad Horohoe
9144673b5c Remove profiler support from debugging toolbar
It never worked and creates extra dependencies on the profiler

Change-Id: I584c9e94d144baf48a654e23dd9f47690d94f13b
2014-11-17 18:27:46 +00:00
jenkins-bot
19c2a08267 Merge "Use MWLogger logging for wfLogProfilingData" 2014-11-04 21:17:19 +00:00
Bryan Davis
ed6af3296e die() with explanation when \Psr\Log\LoggerInterface is missing
Add an explicit check for the \Psr\Log\LoggerInterface in the source
file that declares MWLogger and `die()` with an explanation and links to
documentation if the interface is not present.

MediaWiki requires the PSR-3 logging library to be present in the PHP
search path or via an autoloader after I1e5596d. The composer.json for
MediaWiki requires the necessary library, but usage of Composer with
MediaWiki is not wide spread yet and users may be caught unaware by the
new dependency. The default log messages generated when PHP fails to
load the required interfaces and classes are not instructive as to how
to correct the problem.

Bug: 72777
Change-Id: I3db489702ed5d7973c6b5963eac22f181ca28c72
2014-11-03 09:16:35 -07:00
jenkins-bot
cc3b1d1e2c Merge "Fixed spacing" 2014-10-30 20:09:54 +00:00
Kunal Mehta
0e17070d40 Require PHP >= 5.3.3
Bug: T839
Change-Id: Iac827ef8505ff0653a40e45d759b0f79619351ee
2014-10-30 10:10:52 -07:00
umherirrender
2a7c95acda Fixed spacing
- Changed spaces to tabs for indentation
- space after 'function'/'if'
- Added/Removed space after parenthesis/brackets/end of line
- Removed space after cast

Change-Id: I0e8e6a19b84b5e1308b632a0266cb78f688494ee
2014-10-30 17:50:19 +01:00
Bryan Davis
3328bd9961 Use MWLogger logging for wfLogProfilingData
Output structured profiling report data from wfLogProfilingData using
MWLogger.

Requires Ie667944, I5c82299, and I1e5596d.

Change-Id: Iae11e1e4fe970ada74136f0e969dc624c586ce17
2014-10-29 23:04:09 +00:00
Bryan Davis
28a7ce420b Use MWLogger logging for legacy logging methods
Send wfDebug, wfDebugLog, wfLogDBError and wfLogDBError log messages to
the new MWLogger PSR-3 logger subsystem. Compatibility with the historic
logging operations of wfLogDBError are provided by MWLoggerLegacyLogger
and the MWLoggerLegacySpi logger factory.

Requires the MWLogger system introduced in I5c82299 and the Composer
managed libraries from Ie667944.

Change-Id: I1e5596d590144fbfdfd5f18bc42cf1ef0dbcac12
2014-10-29 11:55:08 -07:00
Southparkfan
19d294e1bd Fix spelling mistake: s/databses/database
Change-Id: Id532b3724792eff5849813888533c251b99edc82
2014-10-29 13:12:45 -04:00
Bryan Davis
51b37035b3 Make $wgMWLoggerDefaultSpi more expressive
Allow $wgMWLoggerDefaultSpi to specify a more expressive object creation
by introducing a new ObjectFactory class which can process an array of
instructions to call either an object constructor or a factory method
with an array of arguments. This allows removal of the
$wgMWLoggerMonologSpiConfig global variable in favor of configuration
using $wgMWLoggerDefaultSpi.

New classes introduced:
; ObjectFactory
: Construct objects from configuration instructions.

Change-Id: If56cce5dcb1ad5712e238d6e2dab809a351f79be
2014-10-25 16:00:06 -06:00
Bryan Davis
9b35801650 Add a PSR-3 based logging interface
The MWLogger class is actually a thin wrapper around any PSR-3
LoggerInterface implementation. Named MWLogger instances can be obtained
from the MWLogger::getInstance() static method. MWLogger expects a class
implementing the MWLoggerSpi interface to act as a factory for new
MWLogger instances. A concrete MWLoggerSpi implementation using the
Monolog library is also provided.

New classes introduced:
; MWLogger
: PSR-3 compatible logger that wraps any \Psr\Log\LoggerInterface
  implementation
; MWLoggerSpi
: Service provider interface for MWLogger factories
; MWLoggerNullSpi
: MWLoggerSpi for creating instances that discard all log events
; MWLoggerMonologSpi
: MWLoggerSpi for creating instances backed by the monolog logging library
; MWLoggerMonologHandler
: Monolog handler that replicates the udp2log and file logging
  functionality of wfErrorLog()
; MWLoggerMonologProcessor
: Monolog log processer that adds host:wfHostname() and wiki:wfWikiID()
  to all records

New globals introduced:
; $wgMWLoggerDefaultSpi
: Default service provider interface to use with MWLogger
; $wgMWLoggerMonologSpiConfig
: Configuration for MWLoggerMonologSpi describing how to configure the
  Monolog logger instances.

This change relies on the Composer managed Psr\Log and Monolog libraries
introduced in Ie667944.

Change-Id: I5c822995a181a38c844f4a13cb172297827e0031
2014-10-14 00:20:32 +00:00
Shahyar
fcd3b60903 Fix malformed UTF-8 going to query profiler
Bug: 69926
Change-Id: I1c2e3f22104792fbc59491b1c6a17f2a6a0dd0b6
2014-08-28 17:10:45 -07:00
jenkins-bot
914e7e2b5d Merge "Indicate the actual version of HHVM in use" 2014-08-27 22:42:12 +00:00
umherirrender
b409008ca5 Remove wrong @return from doc blocks
These functions actually does not return anything, so the @return is
wrong here. '@return void' is ignored.

Change-Id: I11495ee05b943c16c1c4715d617c8b50de22276c
2014-08-25 13:50:05 +00:00
Kevin Israel
b0751af753 Indicate the actual version of HHVM in use
Strings like "5.6.99-hhvm" are not version numbers but merely
a way for HHVM to pass version checks. They should not be
displayed in the UI.

This affects Special:Version, the API (action=query&meta=siteinfo),
the installer welcome page, and the debug toolbar.

Follows-up d09ab9001f.

Change-Id: Ia99dca64779e9c4eaddf5f0e0101674d029b8d55
2014-08-05 16:36:47 -04:00
Timo Tijhof
8ad5719e2c Rename MWNamespace, MWDebug and MWTidy files to match their class
Change-Id: I3e6d13ce366861c865401dde272bc2834a1de670
2014-07-15 20:59:39 +00:00
aude
aabf9345f0 Fix uncaught ApiFormatXml exception with api debuginfo
Also added tests to cover this.

Bug: 67246
Change-Id: Ifb2e392d3277a4702832727f70c77b170d4b2bf5
2014-06-28 20:35:52 +02:00
umherirrender
b45420410f Fixed some @params documentation (includes/*)
Swapped some "$var type" to "type $var" or added missing types
before the $var. Changed some other types to match the more common
spelling. Makes beginning of some text in captial.
Also added some missing @param.

Change-Id: Iced714bca004756b461b66067a49a925a7e3b877
2014-04-19 22:22:20 +02:00
Erik Bernhardson
49abc169d7 Better memory reporting when running in HHVM
Change-Id: If06b7b3ff4dc7ba8b873361f7878f8abb718f571
2014-04-02 22:04:32 +00:00
Erik Bernhardson
99aef03f04 Visualize profile output in debug toolbar
This adds a new pane for the debug toolbar labeled Profiler.  It groups
together events sent to wfProfileIn/Out and draws a timeline giving a
visual representation of what the page was doing at a particular point
in time. Hovering over a timeline brings up a flyout about the contained
events.

Depends on I08854d80f57286129f19cb14566f84ed3c7fa21c for proper positioning
of the flyout.

Change-Id: I23a0ce4137abcd74ad87967fb263214c08cb9685
2014-04-02 21:53:51 +00:00
Alexandre Emsenhuber
a7a0883019 Enhance the destination control parameter of wfDebug() and wfDebugLog()
- The parameter is now a string, making is more understandable than
  boolean values
- It takes the same values in both wfDebug() and wfDebugLog() (except
  for 'private' which is only used in the latter)
- This adds a new possibility to wfDebugLog() to log the message either
  on the specific log or the general one, but not to the debug toolbar
- Old boolean values are still recognised for backward compatibility
- Also send the messages passed to wfDebugLog() to the debug toolbar
  when they are written to a specific log and not restricted to logs
- Updated the calls of and wfDebug() and wfDebugLog() with the last
  parameter to change it into a string
- Renamed MWDebug::sendWarning() to MWDebug::sendMessage() and added
  $group parameter to it; will not break anything since that method
  is marked as private
- Changed the call to wfDebug() from MWDebug::sendMessage() to use
  wfDebugLog() with 'log' as thrid parameter, so that those messages
  can be logged separately from the main log and they don't show up
  a second time on the "debug log" tab of the debug toolbar

Change-Id: I1be09d4c1d3408ed5b26a5db02691c17c0ec0926
2014-02-04 19:56:24 +00:00
Siebrand Mazeland
40577be3dd Replace deprecated <tt> with <code>
Change-Id: I4d80b2eff87c9ddaa4439c83aea21c73fca0d68c
2013-11-20 17:21:31 +01:00
Siebrand Mazeland
6e938b08ba Break long lines in MWDebug class
Change-Id: I65a080f8024a79e6e6b4ccc39e457b26d3637cf7
2013-11-20 15:03:00 +01:00
MatmaRex
df8ec1e216 No spaces after (casts)
Also removed some unnecessary ones. I think I've caught them all.

The spaceless version already appears in core ~300 times (after
accounting for false positives when grepping). Some consistency would
be nice.

Change-Id: I607655b5f4366e66dc78730d5fd2f57ed8776cae
2013-09-04 20:05:43 +02:00
Yuri Astrakhan
8dcf1e6205 API DebugToolbar's debugLog format cleanup
When using debug toolbar, make the result cleaner and more readable:

XML: <debugLog><msg>…</msg><msg>…</msg></debugLog>
JSON: "debugLog": ["…","…"]

Instead of current:
XML: <debugLog><msg xml:space="preserve">…</msg>...
JSON: "debugLog": [{"*": "…"}, {"*": "…"}]

Change-Id: Ieb9d3ab23d7654f5eaf3b79b3b69f4aab99d4680
2013-07-09 22:03:16 -04:00
physikerwelt
567407d21e Remove non UTF-8 chars from debug output
The debug output might contain non UTF-8 chars. Theses bad characters
are not compatible with the debug toolbar. As a result the debug
toolbar disappears. Non UTF-8 chars are being produced by the database
log that prints out binary fields for example.

Bug: 48951
Change-Id: I42f7a5c913b378c05b68970646c75894ca068ed9
2013-06-06 18:47:41 +00:00