Using log4php

A how-to for the excellent log4php:

  1. Rolling daily file
  2. Log error statements into one file, and info statements into another
  3. Send emails

Usage

include_once('/var/www/example/components/log4php/2.0.0/Logger.php');

class Example
{
	private $logger;

	function __construct()
	{
		$loggerConfig = '/var/www/example/config/log4php.xml';
		Logger::configure($loggerConfig);
		$this->logger = Logger::getLogger('example');
	}

	public function doSomething()
	{
		$var = $this->getSomeValue();
		$this->logger->debug('in doSomething: $var = ' . $var);
		try
		{
			$this->doSomethingSpecific();
		}
		catch (Exception $ex)
		{
			$this->logger->error($ex->getMessage());
			throw new Exception("There is a problem with Something. We apologize for any inconvenience caused.");
		}
		$this->logger->info("doSomething successful");
	}
}

log4php.xml

<log4php:configuration xmlns:log4php="http://logging.apache.org/log4php/">
    <appender name="default" class="LoggerAppenderDailyFile">
        <param name="file" value="/var/www/example/logs/%s.log" />
        <param name="datePattern" value="Ymd" />
        <layout class="LoggerLayoutPattern">
            <param name="ConversionPattern" value="%d{Y-m-d H:i:s} [%p] %c: %m (at %F line %L)%n" />
        </layout>
    </appender>
    <appender name="exampleDebugLog" class="LoggerAppenderDailyFile">
        <param name="file" value="/var/www/example/logs/debug.%s.log" />
        <param name="datePattern" value="Ymd" />
        <layout class="LoggerLayoutPattern">
            <param name="ConversionPattern" value="%d{Y-m-d H:i:s} [%p] %c: %m%n" />
        </layout>
        <filter class="LoggerFilterLevelRange">
            <param name="LevelMin" value="debug" />
            <param name="LevelMax" value="debug" />
        </filter>
        <filter class="LoggerFilterDenyAll" />
    </appender>
    <appender name="exampleInfoLog" class="LoggerAppenderDailyFile">
        <param name="file" value="/var/www/example/logs/info.%s.log" />
        <param name="datePattern" value="Ymd" />
        <layout class="LoggerLayoutPattern">
            <param name="ConversionPattern" value="%d{Y-m-d H:i:s} [%p] %c: %m%n" />
        </layout>
        <filter class="LoggerFilterLevelRange">
            <param name="LevelMin" value="info" />
            <param name="LevelMax" value="info" />
        </filter>
        <filter class="LoggerFilterDenyAll" />
    </appender>
    <appender name="exampleErrorLog" class="LoggerAppenderDailyFile">
        <param name="file" value="/var/www/example/logs/errors.%s.log" />
        <param name="datePattern" value="Ymd" />
        <layout class="LoggerLayoutPattern">
            <param name="ConversionPattern" value="%d{Y-m-d H:i:s} [%p] %c: %m (at %F line %L)%n" />
        </layout>
        <filter class="LoggerFilterLevelRange">
            <param name="LevelMin" value="error" />
            <param name="LevelMax" value="fatal" />
        </filter>
        <filter class="LoggerFilterDenyAll" />
    </appender>
    <appender name="exampleErrorEmail" class="LoggerAppenderMail">
        <param name="from" value="sys@example.com" />
        <param name="to" value="support@example.com" />
        <param name="subject" value="Error" />
        <layout class="LoggerLayoutPattern">
            <param name="ConversionPattern" value="%d{Y-m-d H:i:s} [%p] %c: %m (at %F line %L)%n" />
        </layout>
        <filter class="LoggerFilterLevelRange">
            <param name="LevelMin" value="error" />
            <param name="LevelMax" value="fatal" />
        </filter>
        <filter class="LoggerFilterDenyAll" />
    </appender>
    <root>
        <level value="DEBUG" />
        <appender_ref ref="default" />
    </root>
    <logger name="example" additivity="false">
        <level value="INFO" />
        <appender_ref ref="exampleInfoLog" />
        <appender_ref ref="exampleErrorLog" />
        <appender_ref ref="exampleErrorEmail" />
    </logger>
</log4php:configuration>

27 March 2010 | PHP | Comments

Comments:

  1.  
  2.  
  3.