Raketenlogbuchschreiber: PHP: error_log();

Beitrag lesen

Bevor gemeckert wird:

ini_set( 'error_log', '/tmp/php-error.log' );
user_error( 'Huch! Was passiert', E_USER_Notice );

kenne ich natürlich. Einen Ersatz für Logrotate braucht es natürlich trotzdem.

Hier ein unvollständiger Ansatz zum Testen:

<?php

class phpLogger {
	var $logDir = '/tmp';
	var $logName = '404.log';
	
	var $maxFileSize = 60; #zum Testen
	#var $maxFileSize = 10485760; #10MB

	var $maxOldLogs  = 3;
	var $logStyle    = false; # false: error_log(text) / E_USER_NOTICE ... E_USER_ERROR
	var $logFile = false;

	function __construct() {
		
		if ( ! is_writable( $this -> logDir ) ) {
			trigger_error( 'Das Verzeichnis "' . $this -> logDir . '" existiert nicht.', E_USER_WARNING );
			$this -> enabled = false;
			return false;
		}
		if ( ! is_writable( $this -> logDir ) ) {
			trigger_error( 'Das Verzeichnis "' . $this -> logDir . '"ist nicht beschreibbar.', E_USER_WARNING );
			$this -> enabled = false;
			return false;
		}
		
		$this -> logFile = $this -> logDir . '/' . $this -> logName;
		if ( 
			     is_file ( $this -> logFile )
			and filesize ( $this -> logFile ) >= $this -> maxFileSize
		) {
				if ( 0 == $this -> maxOldLogs ) {
						file_put_contents( $this -> logFile, '' );
						return true;
				} else {
					$f = $this -> logFile . '.' . ( $this -> maxOldLogs ) . 'gz';
					if ( is_file ( $f ) ) { unlink( $f ); }
				}
				if ( 0 < $this -> maxOldLogs ) {
					for ( $i = $this -> maxOldLogs -1 ; $i > 0; $i-- ) {
						if ( $i > 1 ) {
							$o = $this -> logFile . '.' . strval( $i - 1 ) . '.gz';
						} else {
							$o = $this -> logFile . '.gz';
						}
						$n = $f = $this -> logFile . '.' . strval( $i ) . '.gz';
						if (is_file ( $o ) ) { 
							rename ( $o, $n );
						}
					}
				}
				$sys = 'gzip ' . escapeshellarg( $this -> logFile );
				exec( $sys );
				file_put_contents(  $this -> logFile, '' );
		}	
	} 

	function log( $s ) {
		
		if ( $this -> logFile ) {
			if ( NULL == $this -> logStyle ) {
				error_log (
					trim( $s ) . PHP_EOL,
					3,
					$this -> logFile
				);
			} else {
				ini_set( 'error_log', $this -> logFile );
				user_error( trim( $s ), E_USER_NOTICE );
			}
		}
	}
}

$logger = new phpLogger();
$logger -> log( 'Hallo Welt' );
0 56

Was macht diese Zeile PHP code genau?

oxo888oxo
  • php
  1. 1
    dedlfix
    1. 0
      Tabellenkalk
      1. 0
        oxo888oxo
      2. 0
        dedlfix
        1. 0

          Hier nun doch mal das ganze Script

          oxo888oxo
          1. 0
            dedlfix
            1. 0
              oxo888oxo
              1. 0
                Rolf B
                1. 0
                  oxo888oxo
          2. 0
            Rolf B
            1. 0
              oxo888oxo
              1. 0
                dedlfix
                1. 0
                  oxo888oxo
                  1. 0
                    dedlfix
                    1. 0
                      oxo888oxo
                  2. 0
                    Rolf B
                    1. 0
                      dedlfix
          3. 2
            Mitleser 2.0
            1. 0
              oxo888oxo
              1. 0
                Mitleser 2.0
                1. 0
                  oxo888oxo
                2. 0

                  PHP: error_log();

                  Raketenlogbuchschreiber
                  1. -1
                    Raketenlogbuchschreiber
                    1. 0

                      Verwendungsbeispiel

                      Raketenlogbuchschreiber
                  2. 0

                    PHP: error_log(); Logrotate

                    TS
                    • linux
                    • php
                    1. 0
                      Raketenlogbuchschreiber
            2. 1
              dedlfix
              1. 0
                TS
                • dateisystem
                • php
                • webserver
                1. 0
                  Mitleser 2.0
                  1. 0
                    Frank
                    1. 0
                      Raketenfleischwurst
                      1. 0

                        Zum Forum

                        Raketenfleischwurst
                        • zu diesem forum
                        1. 0
                          Der Martin
                          1. 0
                            Raketenfleischwurst
                            1. 0
                              Raketenwissenschaftler
                              1. 0
                                klawischnigg
                                1. 0
                                  Raketenwissenschaftler
                                  1. 0
                                    klawischnigg
                                    1. 0
                                      Raketenwissenschaftler
                                  2. 0
                                    Raketenfleischwurst
                              2. 0
                                Amateurpsychologe
                                1. 0
                                  Raketenennachrichtenempfangsbestätiger
                        2. 0
                          Rolf B
                          1. 0
                            Raketenwissenschaftler
                            1. 4
                              Tabellenkalk
                          2. 0
                            Der Martin
                            1. -2
                              Raketenwilli
                              1. 0
                                Martl
                                • menschelei
              2. 0
                Frank
              3. 0

                Mail? Wirklich?

                Raketeneinwandfinder
      3. 0
        TS
    2. 0
      TS
      • logik
      • php
      • programmiertechnik
  2. 0
    Rolf B
    1. 0
      Der Martin
      1. 0
        oxo888oxo