logging-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From florians...@apache.org
Subject svn commit: r1310475 - in /logging/log4php/trunk/src: main/php/appenders/LoggerAppenderRollingFile.php test/php/appenders/LoggerAppenderRollingFileTest.php
Date Fri, 06 Apr 2012 16:50:18 GMT
Author: floriansemm
Date: Fri Apr  6 16:50:17 2012
New Revision: 1310475

URL: http://svn.apache.org/viewvc?rev=1310475&view=rev
Log:
LOG4PHP-164: Compress rotated files with Gzip/Zip

Modified:
    logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php
    logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php

Modified: logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php
URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php?rev=1310475&r1=1310474&r2=1310475&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php (original)
+++ logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php Fri Apr  6
16:50:17 2012
@@ -33,6 +33,7 @@
  *                       reach before being rolled over to backup files.
  *                       Suffixes like "KB", "MB" or "GB" are allowed, f. e. "10KB" is interpreted
as 10240
  * - maximumFileSize   - Alias to maxFileSize (deprecated, use "maxFileSize" instead)
+ * - compress	   	   - Compress the rollover file ("true" or "false")
  *
  * <p>Contributors: Sergio Strampelli.</p>
  *
@@ -86,6 +87,16 @@ class LoggerAppenderRollingFile extends 
 	private $expandedFileName = null;
 
 	/**
+	 * <p>The <var>Compress</var> option determindes the compression with
zlib. 
+	 * If set to true, then the rollover file is compressed and saved with the 
+	 * file-extension .gz. 
+	 * </p>
+	 * 
+	 * @var boolean Compress the rollover file
+	 */
+	protected $compress = false;
+	
+	/**
 	 * Returns the value of the MaxBackupIndex option.
 	 * @return integer 
 	 */
@@ -119,20 +130,19 @@ class LoggerAppenderRollingFile extends 
 
 			// Delete the oldest file, to keep Windows happy.
 			$file = $fileName . '.' . $this->maxBackupIndex;
-			if(is_writable($file))
+			if(is_writable($file)) {
 				unlink($file);
+			}
 
 			// Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3, 2}
-			for($i = $this->maxBackupIndex - 1; $i >= 1; $i--) {
-				$file = $fileName . "." . $i;
-				if(is_readable($file)) {
-					$target = $fileName . '.' . ($i + 1);
-					rename($file, $target);
-				}
-			}
+			$this->renameArchievedLogs($fileName);
 	
-			// Backup the active file
-			copy($fileName, "$fileName.1");
+			if (true === $this->compress) {
+				file_put_contents('compress.zlib:///'.$fileName.'.1.gz', file_get_contents($fileName));
+			} else {
+				// Backup the active file
+				copy($fileName, "$fileName.1");				
+			}
 		}
 		
 		// Truncate the active file
@@ -140,6 +150,25 @@ class LoggerAppenderRollingFile extends 
 		rewind($this->fp);
 	}
 	
+	private function renameArchievedLogs($fileName) {
+		for($i = $this->maxBackupIndex - 1; $i >= 1; $i--) {
+			
+			$file = $fileName . "." . $i;
+			if (true === $this->compress) {
+				$file = $fileName . "." . $i .'.gz';
+			}
+			
+			if(is_readable($file)) {
+				$target = $fileName . '.' . ($i + 1);
+				if (true === $this->compress) {
+					$target = $fileName . '.' . ($i + 1) . '.gz';
+				}				
+				
+				rename($file, $target);
+			}
+		}		
+	}
+	
 	public function setFile($fileName) {
 		$this->file = $fileName;
 		// As LoggerAppenderFile does not create the directory, it has to exist.
@@ -214,6 +243,16 @@ class LoggerAppenderRollingFile extends 
 		} 
 	}
 	
+	public function activateOptions() {
+		parent::activateOptions();
+		
+		if ($this->compress == true && !function_exists('gzcompress')) {
+			$this->closed = true;
+			
+			$this->warn('zlib is required for file-compression');
+		}
+	}
+	
 	/**
 	 * @return Returns the maximum number of backup files to keep around.
 	 */
@@ -228,4 +267,8 @@ class LoggerAppenderRollingFile extends 
 	public function getMaxFileSize() {
 		return $this->maxFileSize;
 	}
+	
+	public function setCompress($compress) {
+		$this->setBoolean('compress', $compress);
+	}
 }

Modified: logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php
URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php?rev=1310475&r1=1310474&r2=1310475&view=diff
==============================================================================
--- logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php (original)
+++ logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php Fri Apr
 6 16:50:17 2012
@@ -33,6 +33,8 @@ class LoggerAppenderRollingFileTest exte
 	 */
 	private $dir;
 
+	const WARNING_MASSAGE = 'WARN - my messageXYZ';
+	
 	protected function setUp() {
 		$this->dir = dirname(__FILE__) . '/../../../../target/phpunit';
 		@mkdir($this->dir);
@@ -85,16 +87,25 @@ class LoggerAppenderRollingFileTest exte
 		$expectedFilePattern = '/' . implode(preg_quote(DIRECTORY_SEPARATOR, '/'), array('target',
'phpunit', 'doesnotexist\.log')) . '$/';
 		self::assertEquals(preg_match($expectedFilePattern, $expandedFileName), 1, $expandedFileName);
 	}
-
-	public function testSimpleLogging() {
+	
+	/**
+	 * @return LoggerAppenderRollingFile
+	 */
+	private function createRolloverAppender() {
 		$layout = new LoggerLayoutSimple();
-
+		
 		$appender = new LoggerAppenderRollingFile("mylogger");
 		$appender->setFile($this->dir.'/TEST-rolling.txt');
 		$appender->setLayout($layout);
 		$appender->setMaxFileSize('1KB');
 		$appender->setMaxBackupIndex(2);
 		$appender->activateOptions();
+		
+		return $appender;
+	}
+
+	public function testSimpleLogging() {
+		$appender = $this->createRolloverAppender();
 
 		$event = new LoggerLoggingEvent('LoggerAppenderFileTest',
 										new Logger('mycategory'),
@@ -121,37 +132,19 @@ class LoggerAppenderRollingFileTest exte
 		self::assertEquals($e, $line);
 
 		$file = $this->dir.'/TEST-rolling.txt.1';
-		$data = file($file);
-		$line = $data[count($data)-1];
-		$e = "WARN - my message123".PHP_EOL;
-		foreach($data as $r) {
-			self::assertEquals($e, $r);
-		}
+		$this->checkFileContent($file);
 
 		$file = $this->dir.'/TEST-rolling.txt.2';
-		$data = file($file);
-		$line = $data[count($data)-1];
-		$e = "WARN - my message123".PHP_EOL;
-		foreach($data as $r) {
-			self::assertEquals($e, $r);
-		}
+		$this->checkFileContent($file);
 
-		if(file_exists($this->dir.'/TEST-rolling.txt.3')) {
-			self::assertTrue(false);
-		}
+		$this->assertFalse(file_exists($this->dir.'/TEST-rolling.txt.3'), 'should not roll
over three times');
 	}
 	
 	public function testLoggingViaLogger() {
 		$logger = Logger::getLogger('mycat');
 		$logger->setAdditivity(false);
-		$layout = new LoggerLayoutSimple();
-
-		$appender = new LoggerAppenderRollingFile("mylogger");
-		$appender->setFile($this->dir.'/TEST-rolling.txt');
-		$appender->setLayout($layout);
-		$appender->setMaxFileSize('1KB');
-		$appender->setMaxBackupIndex(2);
-		$appender->activateOptions();
+		
+		$appender = $this->createRolloverAppender();
 
 		$logger->addAppender($appender);
 		
@@ -169,30 +162,69 @@ class LoggerAppenderRollingFileTest exte
 		self::assertEquals($e, $line);
 
 		$file = $this->dir.'/TEST-rolling.txt.1';
-		$data = file($file);
-		$line = $data[count($data)-1];
-		$e = "WARN - my message123".PHP_EOL;
-		foreach($data as $r) {
-			self::assertEquals($e, $r);
-		}
+		$this->checkFileContent($file);
 
 		$file = $this->dir.'/TEST-rolling.txt.2';
+		$this->checkFileContent($file);
+
+		$this->assertFalse(file_exists($this->dir.'/TEST-rolling.txt.3'), 'should not roll
over three times');
+	}
+	
+	public function testRolloverWithCompression() {
+		$logger = Logger::getLogger('mycat');
+		$logger->setAdditivity(false);
+
+		$appender = $this->createRolloverAppender();
+		$appender->setCompress(true);
+		
+		$logger->addAppender($appender);
+		
+		for($i = 0; $i < 1000; $i++) {
+			$logger->warn(self::WARNING_MASSAGE. $i);
+		}
+		
+		$logger->warn("my messageXYZ");
+
+		$file = $this->dir.'/TEST-rolling.txt';
 		$data = file($file);
+		
 		$line = $data[count($data)-1];
-		$e = "WARN - my message123".PHP_EOL;
-		foreach($data as $r) {
-			self::assertEquals($e, $r);
-		}
+		$e = self::WARNING_MASSAGE.PHP_EOL;
+		self::assertEquals($e, $line);
 
-		if(file_exists($this->dir.'/TEST-rolling.txt.3')) {
-			self::assertTrue(false);
-		}
+		$firstCompressedRollingFile = $this->dir.'/TEST-rolling.txt.1.gz';
+		$this->assertTrue(file_exists($firstCompressedRollingFile),'TEST-rolling.txt.1.gz not
found');
+
+		$firstUncompressedRollingField = $this->dir.'/TEST-rolling.txt.1';
+		$this->assertFalse(file_exists($firstUncompressedRollingField),'TEST-rolling.txt.1 should
be replaced by compressed');
+		
+		$secondCompressedRollingFile = $this->dir.'/TEST-rolling.txt.2.gz';
+		$this->assertTrue(file_exists($secondCompressedRollingFile), 'TEST-rolling.txt.2.gz
not found');
+		
+		$secondUncompressedRollingField = $this->dir.'/TEST-rolling.txt.2';
+		$this->assertFalse(file_exists($secondUncompressedRollingField),'TEST-rolling.txt.2
should be replaced by compressed');
+		
+	}	
+
+	private function checkFileContent($file) {
+		$data = file($file);
+		$this->checkText($data);		
 	}
 
+	private function checkText($text) {
+		$line = $text[count($text)-1];
+		$e = "WARN - my message123".PHP_EOL;
+		foreach($text as $r) {
+			self::assertEquals($e, $r);
+		}		
+	}
+	
 	protected function tearDown() {
 		@unlink($this->dir.'/TEST-rolling.txt');
 		@unlink($this->dir.'/TEST-rolling.txt.1');
 		@unlink($this->dir.'/TEST-rolling.txt.2');
+		@unlink($this->dir.'/TEST-rolling.txt.1.gz');
+		@unlink($this->dir.'/TEST-rolling.txt.2.gz');
 		@rmdir($this->dir);
 	}
 



Mime
View raw message