Het gebruik van JLog

From Joomla! Documentation

This page is a translated version of the page Using JLog and the translation is 32% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎Nederlands • ‎русский


Joomla logging gives you the ability to log messages to files and to the screen (within the Joomla! Debug Console at the bottom of the web page), and the main Joomla class which underpins this is JLog.

The logging can be controlled dynamically to some extent through the Joomla Global Configuration and by configuring the System – Debug plugin (which is shipped with Joomla). Overall these facilities allow you to:

  • switch DEBUG logging on or off – so that ordinarily you don't consume resources needlessly, but you have the logging information to assist troubleshooting when there are issues, for example on a live site which has your extension installed.
  • route log messages through to a specific log file for your own extension
  • view log messages in the Debug Console – you can select the group of users to which log messages should be displayed, so that on a live site developers can see the messages while other users are unaffected.
  • filter Debug Console messages by priority (ie INFO, DEBUG, WARNING, etc) and by category (you are free to define your own categories).

In addition, the log messages can be translatable into different languages.

The main configuration options relating to logging are shown below.

Switching on debug and display of the Joomla Debug Console is controlled through the global configuration options. Global conf debug-en.jpg

Logging to the general log file is controlled via the Logging tab of the configuration of the Joomla System - Debug plugin. (In the administrator menu click on Extensions / Plugins, find the System - Debug plugin, and click on it to edit its configurable options). Debug logging settings-en.jpg

And the options within the Plugin tab control display on the Joomla Debug Console. Debug plugin settings-en.jpg

Basisbestand Logging

To log a message you use the JLog::add() function. For example:

   JLog::add('my error message', JLog::ERROR, 'my-error-category');

The parameters are

  1. A message string. You can use translation with these eg JText::_('MY_EXTENSION_ERR_MSG'), You can also display the values of variables, provided you convert them into a string format (eg using __toString() if the type of the variable supports that).
  2. A priority, which can be one of JLog::EMERGENCY, JLog::ALERT, JLog::CRITICAL, JLog::ERROR, JLog::WARNING, JLog::NOTICE, JLog::INFO, JLog::DEBUG (based on the standard syslog / RFC 5424 severity levels – see wikipedia article on syslog).
  3. A category, which is just a text string. You can define whatever categories you like, but best to define them to avoid possible clashes with those of other extensions.

It can be very helpful with troubleshooting problems later if you include diagnostic debug messages in your extension. In this case, enclose your log message within a check for JDEBUG:

   if (JDEBUG) 
       JLog::add('my debug message', JLog::DEBUG, 'my-debug-category');

Logging a specific log file

You can use JLog::addLogger() to set up logging to an additional log file, filtering the log messages to be sent there by priority (aka severity level) and/or category. The parameters of JLog::addLogger() are:

  1. an array with configuration details – including the name of the log file
  2. the severity levels to be logged in that file
  3. an array of the categories to be logged in that file (or if parameter 4 is set to true then this array defines the categories which are NOT to be logged in the file)
  4. (often omitted) a boolean specifying whether parameter 3 is an include list (the default, P4 = false) or an exclude list (P4 = true)

For example if you have developed a 'com_helloworld' extension you could use the following:

            // Sets file name
            'text_file' => 'com_helloworld.log.php'
           // Sets messages of all log levels to be sent to the file
           // The log category/categories which should be recorded in this file
           // In this case, it's just the one category from our extension, still
           // we need to put it inside an array

Then when you log a message, specify the category as 'com_helloworld', as in the example below

   JLog::add(JText::_('COM_HELLOWORLD_ERROR_MESSAGE_123'), JLog::ERROR, 'com_helloworld');

This will result in your log message being written to com_helloworld.log.php. If the System – Debug plugin settings have "Log Almost Everything" set to Yes, then the message will appear in the common everything.php log file as well.

Let op: U kunt dit eventueel combineren met de Weergeven van foutmeldingen en mededelingen sectie op foutmeldingen naar de gebruikers weer te geven.

U kan ook een extra logger toevoegen om alleen kritieke en nood lognotificaties te vast te leggen.

            // Sets file name
            'text_file' => 'com_helloworld.critical_emergency.php'
           // Sets critical and emergency log level messages to be sent to the file
           // The log category which should be recorded in this file

You can also exclude a specific priority level from being included. For example, to log all but DEBUG messages:

            // Sets file name
            'text_file' => 'com_helloworld.all_but_debug.php'
           // Sets all but DEBUG log level messages to be sent to the file
       JLog::ALL & ~JLog::DEBUG,
           // The log category which should be recorded in this file

The JLog priority levels are implemented as separate bits of an integer, so you can use bitwise operations (bitwise AND, &; and bitwise NOT, ~) to calculate the appropriate log levels. JLog::All is a constant integer which has all the relevant bits set, so that all the Joomla priority levels are included.

Het logbestand vormgeven

De eerste parameter voor addLogger kan een paar optionele extra instellingen hebben naast text_file parameter.

Er is bijvoorbeeld de parameter text_entry_format, welke het formaat definieert van elke regel in uw logbestand.

Het standaard formaat is:


Hier is een voorbeeld van een ander formaat wat toont hoe u de categorie weg laat:

            // Sets file name
            'text_file' => 'com_helloworld.critical_emergency.php',
            // Sets the format of each line
            'text_entry_format' => '{DATETIME} {PRIORITY} {MESSAGE}'
           // Sets all but DEBUG log level messages to be sent to the file
       JLog::ALL & ~JLog::DEBUG,
           // The log category which should be recorded in this file

Naast de plaatsvervangers hierboven getoond in de standaard string, zijn de volgende waarden beschikbaar:

   {CLIENTIP}      (this is the IP address of the client)

Er is een extra optionele boolean-parameter text_file_no_php, welke aangeeft of het logbestand voorafgegaan wordt door het gebruikelijke voorvoegsel:

   #<?php die('Forbidden.');?>

Let op: Normaliter zou u deze instelling nooit op false moeten zetten. Logbestanden mogen niet van buiten leesbaar zijn, aangezien ze waardevolle informatie over het systeem kunnen geven aan aanvallers. Speel hier alleen mee als u weet wat u doet!

Bovendien, indien u het logbestand ergens anders wilt opslaan dan in het log-pad, opgegeven bij de Joomla!-instellingen, dan kan dat via de text_file_path instelling.

Logging to other places

As well as logging to files, you can log to other places as well, such as

  • the Joomla message area (where the message is shown if you call JFactory::getApplication()->enqueueMessage())
  • a database table
  • just a simple echo statement

Of these, probably the most useful is the logging to the message bar, which you can set up via:

   JLog::addLogger(array('logger' => 'messagequeue'), JLog::ALL, array('msg-error-cat'));

Then when you do

   JLog::add('an error to display', JLog::ERROR, 'msg-error-cat');

you will get the message copied to the message bar.

Note that Joomla core code sets up logging to the messagequeue for category 'jerror', so that if you use this category in your log messages, you will get the message displayed on the message bar. Eg

   JLog::add('error copied to message bar', JLog::Error, 'jerror');

will result in the message being shown in the Joomla message area, even though you haven't explicitly set up a logger to log there.


JLog::add() will throw an exception if it can't write to the log file. To avoid this, you'd have to either wrap the call in another function, or implement your own logger class and then include it with:

            // Use mycustomlogger
            'logger' => 'mycustomlogger',
            'text_file' => 'com_helloworld.errors.php'

Further Reading

Joomla logging should be used in tandem with PHP exceptions, not as a replacement. See Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1 for more information on this.

Another tutorial (a little out of date, but still useful) is at logging in joomla with jlog.