Author: ihabunek
Date: Sun Aug 19 16:14:24 2012
New Revision: 1374786

URL: http://svn.apache.org/viewvc?rev=1374786&view=rev
Log:
A substantial rewrite of the three file appenders:
- a file will not be created on activation, but on first append (LOG4PHP-130) 
- compression in rolling appender is done in chunks (LOG4PHP-164)
- general improvements in writing logic, better error handling

Modified:
    logging/log4php/trunk/pom.xml
    logging/log4php/trunk/src/main/php/appenders/LoggerAppenderDailyFile.php
    logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFile.php
    logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php
    logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFileTest.php
    
logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php

Modified: logging/log4php/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/pom.xml?rev=1374786&r1=1374785&r2=1374786&view=diff
==============================================================================
--- logging/log4php/trunk/pom.xml (original)
+++ logging/log4php/trunk/pom.xml Sun Aug 19 16:14:24 2012
@@ -166,71 +166,7 @@
                                </dependencies>
                                
                                <executions>
-                                       <execution>
-                                               <id>pear-package</id>
-                                               <phase>package</phase>
-                                               <configuration>
-                                                       <target>
-                                                               <ant 
target="pear-package" />
-                                                       </target>
-                                               </configuration>
-                                               <goals>
-                                                       <goal>run</goal>
-                                               </goals>
-                                       </execution>
-
-                                       <execution>
-                                               <id>pre-site</id>
-                                               <phase>pre-site</phase>
-                                               <configuration>
-                                                       <target>
-                                                               <ant 
target="google-search" />
-                                                               <ant 
target="api-docs" />
-                                                       </target>
-                                               </configuration>
-                                               <goals>
-                                                       <goal>run</goal>
-                                               </goals>
-                                       </execution>
-                                       
-                                       <execution>
-                                               <id>unit-testing</id>
-                                               <phase>test</phase>
-                                               <configuration>
-                                                       <target>
-                                                               <ant 
target="unit-testing" />
-                                                       </target>
-                                               </configuration>
-                                               <goals>
-                                                       <goal>run</goal>
-                                               </goals>
-                                       </execution>
-                                       
-                                       <execution>
-                                               <id>post-site</id>
-                                               <phase>post-site</phase>
-                                               <configuration>
-                                                       <target>
-                                                               <ant 
target="post-site" />
-                                                       </target>
-                                               </configuration>
-                                               <goals>
-                                                       <goal>run</goal>
-                                               </goals>
-                                       </execution>
-                                       
-                                       <execution>
-                                               <id>site-deploy</id>
-                                               <phase>site-deploy</phase>
-                                               <configuration>
-                                                       <target>
-                                                               <ant 
target="site-deploy" />
-                                                       </target>
-                                               </configuration>
-                                               <goals>
-                                                       <goal>run</goal>
-                                               </goals>
-                                       </execution>
+                               
                                </executions>
                        </plugin>
                        
@@ -267,7 +203,7 @@
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-release-plugin</artifactId>
-                               <version>2.2.2</version>
+                               <version>2.3.2</version>
                                <configuration>
                                        <goals>site assembly:assembly</goals>
                                </configuration>
@@ -276,7 +212,7 @@
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-site-plugin</artifactId>
-                               <version>3.0</version>
+                               <version>3.1</version>
                                <configuration>
 
                                        <!-- Override default site template for 
achieveing a custom look. -->
@@ -284,59 +220,6 @@
 
                                        <!-- Configure additional reports on 
the site -->
                                        <reportPlugins>
-
-                                               <!-- Project info report -->
-                                               <plugin>
-                                                       
<groupId>org.apache.maven.plugins</groupId>
-                                                       
<artifactId>maven-project-info-reports-plugin</artifactId>
-                                                       <version>2.4</version>
-                                                       <reportSets>
-                                                               <reportSet>
-                                                                       
<reports>
-                                                                               
<report>cim</report>    
-                                                                               
<report>scm</report>
-                                                                               
<report>dependencies</report>
-                                                                               
<report>license</report>
-                                                                               
<report>project-team</report>
-                                                                               
<report>issue-tracking</report>
-                                                                               
<report>mailing-list</report>
-                                                                       
</reports>
-                                                               </reportSet>
-                                                       </reportSets>
-                                               </plugin>
-                                               
-                                               <!-- Changes report -->
-                                               <plugin>
-                                                       
<groupId>org.apache.maven.plugins</groupId>
-                                                       
<artifactId>maven-changes-plugin</artifactId>
-                                                       <version>2.6</version>
-                                                       <reportSets>
-                                                               <reportSet>
-                                                                       
<reports>
-                                                                               
<report>changes-report</report>
-                                                                               
<report>jira-report</report>
-                                                                       
</reports>
-                                                               </reportSet>
-                                                       </reportSets>
-                                                       <configuration>
-                                                               
<statusIds>Resolved, Closed</statusIds>
-                                                               
<columnNames>Type,Key,Summary,Assignee,Status,Resolution,Fix 
Version</columnNames>
-                                                       </configuration>
-                                               </plugin>
-                                               
-                                               <!-- Surefire report -->
-                                               <plugin>
-                                                       
<groupId>org.apache.maven.plugins</groupId>
-                                                       
<artifactId>maven-surefire-report-plugin</artifactId>
-                                                       <version>2.12</version>
-                                               </plugin>
-                       
-                                               <!-- RAT report -->
-                                               <plugin>
-                                                       
<groupId>org.apache.rat</groupId>
-                                                       
<artifactId>apache-rat-plugin</artifactId>
-                                                       <version>0.8</version>
-                                               </plugin>
                                        </reportPlugins>
                                </configuration>
                        </plugin>

Modified: 
logging/log4php/trunk/src/main/php/appenders/LoggerAppenderDailyFile.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/appenders/LoggerAppenderDailyFile.php?rev=1374786&r1=1374785&r2=1374786&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/appenders/LoggerAppenderDailyFile.php 
(original)
+++ logging/log4php/trunk/src/main/php/appenders/LoggerAppenderDailyFile.php 
Sun Aug 19 16:14:24 2012
@@ -48,42 +48,27 @@ class LoggerAppenderDailyFile extends Lo
         * @var string
         */
        protected $datePattern = "Ymd";
-       
-       /** 
-        * Similar to parent method, but but replaces "%s" in the file name 
with 
-        * the current date in format specified by the 'datePattern' parameter.
-        */ 
+
+       /** Additional validation for the date pattern. */
        public function activateOptions() {
-               $fileName = $this->getFile();
-               $date = date($this->getDatePattern());
-               $fileName = sprintf($fileName, $date);
-               
-               if(!is_file($fileName)) {
-                       $dir = dirname($fileName);
-                       if(!is_dir($dir)) {
-                               mkdir($dir, 0777, true);
-                       }
-               }
+               parent::activateOptions();
        
-               $this->fp = fopen($fileName, ($this->getAppend()? 'a':'w'));
-               if($this->fp) {
-                       if(flock($this->fp, LOCK_EX)) {
-                               if($this->getAppend()) {
-                                       fseek($this->fp, 0, SEEK_END);
-                               }
-                               fwrite($this->fp, $this->layout->getHeader());
-                               flock($this->fp, LOCK_UN);
-                               $this->closed = false;
-                       } else {
-                               // TODO: should we take some action in this 
case?
-                               $this->closed = true;
-                       }
-               } else {
+               if (empty($this->datePattern)) {
+                       $this->warn("Required parameter 'datePattern' not set. 
Closing appender.");
                        $this->closed = true;
+                       return;
                }
        }
        
        /**
+        * Determines target file. Replaces %s in file path with a date. 
+        */
+       protected function getTargetFile() {
+               $date = date($this->datePattern);
+               return str_replace('%s', $date, $this->file);
+       }
+       
+       /**
         * Sets the 'datePattern' parameter.
         * @param string $datePattern
         */

Modified: logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFile.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFile.php?rev=1374786&r1=1374785&r2=1374786&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFile.php 
(original)
+++ logging/log4php/trunk/src/main/php/appenders/LoggerAppenderFile.php Sun Aug 
19 16:14:24 2012
@@ -37,76 +37,134 @@
 class LoggerAppenderFile extends LoggerAppender {
 
        /**
-        * @var boolean if {@link $file} exists, appends events.
+        * If set to true, the file is locked before appending. This allows 
+        * concurrent access. However, appending without locking is faster so
+        * it should be used where appropriate.
+        * 
+        * TODO: make this a configurable parameter
+        * 
+        * @var boolean
+        */
+       protected $locking = true;
+       
+       /**
+        * If set to true, appends to file. Otherwise overwrites it.
+        * @var boolean
         */
        protected $append = true;
        
        /**
-        * @var string the file name used to append events
+        * Path to the target file.
+        * @var string 
         */
        protected $file;
 
        /**
-        * @var mixed file resource
+        * The file resource.
+        * @var resource
         */
-       protected $fp = false;
+       protected $fp;
        
-       public function activateOptions() {
-               $fileName = $this->getFile();
+       /** 
+        * Helper function which can be easily overriden by daily file 
appender. 
+        */
+       protected function getTargetFile() {
+               return $this->file;
+       }
+       
+       /**
+        * Acquires the target file resource, creates the destination folder if 
+        * necessary. Writes layout header to file.
+        */
+       protected function openFile() {
+               $file = $this->getTargetFile();
+
+               // Create the target folder if needed
+               if(!is_file($file)) {
+                       $dir = dirname($file);
 
-               if (empty($fileName)) {
-                       $this->warn("Required parameter 'fileName' not set. 
Closing appender.");
+                       if(!is_dir($dir)) {
+                               $success = mkdir($dir, 0777, true);
+                               if ($success === false) {
+                                       $this->warn("Failed creating target 
directory [$dir]. Closing appender.");
+                                       $this->closed = true;
+                                       return;
+                               }
+                       }
+               }
+               
+               $mode = $this->append ? 'a' : 'w';
+               $this->fp = fopen($file, $mode);
+               if ($this->fp === false) {
+                       $this->warn("Failed opening target file. Closing 
appender.");
                        $this->closed = true;
                        return;
                }
                
-               if(!is_file($fileName)) {
-                       $dir = dirname($fileName);
-                       if(!is_dir($dir)) {
-                               mkdir($dir, 0777, true);
-                       }
+               // Required when appending with concurrent access
+               if($this->append) {
+                       fseek($this->fp, 0, SEEK_END);
                }
-
-               $this->fp = fopen($fileName, ($this->getAppend()? 'a':'w'));
-               if($this->fp) {
-                       if(flock($this->fp, LOCK_EX)) {
-                               if($this->getAppend()) {
-                                       fseek($this->fp, 0, SEEK_END);
-                               }
-                               fwrite($this->fp, $this->layout->getHeader());
-                               flock($this->fp, LOCK_UN);
-                               $this->closed = false;
-                       } else {
-                               // TODO: should we take some action in this 
case?
-                               $this->closed = true;
-                       }                
+               
+               // Write the header
+               $this->write($this->layout->getHeader());
+       }
+       
+       /**
+        * Writes a string to the target file. Opens file if not already open.
+        * @param string $string Data to write.
+        */
+       protected function write($string) {
+               // Lazy file open
+               if(!isset($this->fp)) {
+                       $this->openFile();
+               }
+               
+               if ($this->locking) {
+                       $this->writeWithLocking($string);
                } else {
-                       $this->closed = true;
+                       $this->writeWithoutLocking($string);
                }
        }
        
-       public function close() {
-               if($this->closed != true) {
-                       if($this->fp and $this->layout !== null) {
-                               if(flock($this->fp, LOCK_EX)) {
-                                       fwrite($this->fp, 
$this->layout->getFooter());
-                                       flock($this->fp, LOCK_UN);
-                               }
-                               fclose($this->fp);
+       protected function writeWithLocking($string) {
+               if(flock($this->fp, LOCK_EX)) {
+                       if(fwrite($this->fp, $string) === false) {
+                               $this->warn("Failed writing to file. Closing 
appender.");
+                               $this->closed = true;                           
                        }
+                       flock($this->fp, LOCK_UN);
+               } else {
+                       $this->warn("Failed locking file for writing. Closing 
appender.");
+                       $this->closed = true;
+               }
+       }
+       
+       protected function writeWithoutLocking($string) {
+               if(fwrite($this->fp, $string) === false) {
+                       $this->warn("Failed writing to file. Closing 
appender.");
+                       $this->closed = true;                           
+               }
+       }
+       
+       public function activateOptions() {
+               if (empty($this->file)) {
+                       $this->warn("Required parameter 'file' not set. Closing 
appender.");
                        $this->closed = true;
+                       return;
                }
        }
+       
+       public function close() {
+               if (is_resource($this->fp)) {
+                       $this->write($this->layout->getFooter());
+                       fclose($this->fp);
+               }
+               $this->closed = true;
+       }
 
        public function append(LoggerLoggingEvent $event) {
-               if($this->fp and $this->layout !== null) {
-                       if(flock($this->fp, LOCK_EX)) {
-                               fwrite($this->fp, 
$this->layout->format($event));
-                               flock($this->fp, LOCK_UN);
-                       } else {
-                               $this->closed = true;
-                       }
-               } 
+               $this->write($this->layout->format($event));
        }
        
        /**

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=1374786&r1=1374785&r2=1374786&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php 
(original)
+++ logging/log4php/trunk/src/main/php/appenders/LoggerAppenderRollingFile.php 
Sun Aug 19 16:14:24 2012
@@ -44,19 +44,15 @@
  */
 class LoggerAppenderRollingFile extends LoggerAppenderFile {
 
+       /** Compressing backup files is done in chunks, this determines how 
large. */
+       const COMPRESS_CHUNK_SIZE = 102400; // 100KB
+       
        /**
-        * Set the maximum size that the output file is allowed to reach
+        * The maximum size (in bytes) that the output file is allowed to reach 
         * before being rolled over to backup files.
         *
-        * <p>In configuration files, the <var>MaxFileSize</var> option takes a
-        * long integer in the range 0 - 2^63. You can specify the value
-        * with the suffixes "KB", "MB" or "GB" so that the integer is
-        * interpreted being expressed respectively in kilobytes, megabytes
-        * or gigabytes. For example, the value "10KB" will be interpreted
-        * as 10240.</p>
-        * <p>The default maximum file size is 10MB.</p>
-        *
-        * <p>Note that MaxFileSize cannot exceed <b>2 GB</b>.</p>
+        * The default maximum file size is 10MB (10485760 bytes). Maximum 
value 
+        * for this option may depend on the file system.
         *
         * @var integer
         */
@@ -65,36 +61,23 @@ class LoggerAppenderRollingFile extends 
        /**
         * Set the maximum number of backup files to keep around.
         * 
-        * <p>The <var>MaxBackupIndex</var> option determines how many backup
-        * files are kept before the oldest is erased. This option takes
-        * a positive integer value. If set to zero, then there will be no
-        * backup files and the log file will be truncated when it reaches
-        * MaxFileSize.</p>
-        * <p>There is one backup file by default.</p>
+        * Determines how many backup files are kept before the oldest is 
erased. 
+        * This option takes a positive integer value. If set to zero, then 
there 
+        * will be no backup files and the log file will be truncated when it 
+        * reaches <var>maxFileSize</var>.
+        * 
+        * There is one backup file by default.
         *
         * @var integer 
         */
        protected $maxBackupIndex = 1;
        
        /**
-        * @var string the filename expanded
-        */
-       private $expandedFileName = null;
-
-       /**
         * The <var>compress</var> parameter determindes the compression with 
zlib. 
         * If set to true, the rollover files are compressed and saved with the 
.gz extension.
         * @var boolean
         */
        protected $compress = false;
-       
-       /**
-        * Returns the value of the MaxBackupIndex option.
-        * @return integer 
-        */
-       private function getExpandedFileName() {
-               return $this->expandedFileName;
-       }
 
        /**
         * Get the maximum size that the output file is allowed to reach
@@ -108,33 +91,30 @@ class LoggerAppenderRollingFile extends 
        /**
         * Implements the usual roll over behaviour.
         *
-        * <p>If MaxBackupIndex is positive, then files File.1, ..., 
File.MaxBackupIndex -1 are renamed to File.2, ..., File.MaxBackupIndex. 
+        * If MaxBackupIndex is positive, then files File.1, ..., 
File.MaxBackupIndex -1 are renamed to File.2, ..., File.MaxBackupIndex. 
         * Moreover, File is renamed File.1 and closed. A new File is created 
to receive further log output.
         * 
-        * <p>If MaxBackupIndex is equal to zero, then the File is truncated 
with no backup files created.
+        * If MaxBackupIndex is equal to zero, then the File is truncated with 
no backup files created.
         * 
         * Rollover must be called while the file is locked so that it is safe 
for concurrent access. 
+        * 
+        * @throws LoggerException If any part of the rollover procedure fails.
         */
        private function rollOver() {
                // If maxBackups <= 0, then there is no file renaming to be 
done.
                if($this->maxBackupIndex > 0) {
-                       $fileName = $this->getExpandedFileName();
-
                        // Delete the oldest file, to keep Windows happy.
-                       $file = $fileName . '.' . $this->maxBackupIndex;
-                       if(is_writable($file)) {
-                               unlink($file);
+                       $file = $this->file . '.' . $this->maxBackupIndex;
+                       
+                       if (file_exists($file) && !unlink($file)) {
+                               throw new LoggerException("Unable to delete 
oldest backup file from [$file].");
                        }
 
                        // Map {(maxBackupIndex - 1), ..., 2, 1} to 
{maxBackupIndex, ..., 3, 2}
-                       $this->renameArchievedLogs($fileName);
+                       $this->renameArchievedLogs($this->file);
        
-                       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");                 
        
-                       }
+                       // Backup the active file
+                       $this->moveToBackup($this->file);
                }
                
                // Truncate the active file
@@ -142,115 +122,129 @@ class LoggerAppenderRollingFile extends 
                rewind($this->fp);
        }
        
+       private function moveToBackup($source) {
+               if ($this->compress) {
+                       $target = $source . '.1.gz';
+                       $this->compressFile($source, $target);
+               } else {
+                       $target = $source . '.1';
+                       copy($source, $target);
+               }
+       }
+       
+       private function compressFile($source, $target) {
+               $target = 'compress.zlib://' . $target;
+               
+               $fin = fopen($source, 'rb');
+               if ($fin === false) {
+                       throw new LoggerException("Unable to open file for 
reading: [$source].");
+               }
+               
+               $fout = fopen($target, 'wb');
+               if ($fout === false) {
+                       throw new LoggerException("Unable to open file for 
writing: [$target].");
+               }
+       
+               while (!feof($fin)) {
+                       $chunk = fread($fin, self::COMPRESS_CHUNK_SIZE);
+                       if (false === fwrite($fout, $chunk)) {
+                               throw new LoggerException("Failed writing to 
compressed file.");
+                       }
+               }
+       
+               fclose($fin);
+               fclose($fout);
+       }
+       
        private function renameArchievedLogs($fileName) {
                for($i = $this->maxBackupIndex - 1; $i >= 1; $i--) {
                        
-                       $file = $fileName . "." . $i;
-                       if (true === $this->compress) {
-                               $file = $fileName . "." . $i .'.gz';
+                       $source = $fileName . "." . $i;
+                       if ($this->compress) {
+                               $source .= '.gz';
                        }
                        
-                       if(is_readable($file)) {
+                       if(file_exists($source)) {
                                $target = $fileName . '.' . ($i + 1);
-                               if (true === $this->compress) {
-                                       $target = $fileName . '.' . ($i + 1) . 
'.gz';
+                               if ($this->compress) {
+                                       $target .= '.gz';
                                }                               
                                
-                               rename($file, $target);
+                               rename($source, $target);
                        }
-               }               
+               }
        }
        
-       public function setFile($fileName) {
-               $this->file = $fileName;
-               // As LoggerAppenderFile does not create the directory, it has 
to exist.
-               // realpath() fails if the argument does not exist so the 
filename is separated.
-               $this->expandedFileName = realpath(dirname($fileName));
-               if ($this->expandedFileName === false) throw new 
Exception("Directory of $fileName does not exist!");
-               $this->expandedFileName .= DIRECTORY_SEPARATOR . 
basename($fileName);
-       }
-
-
        /**
-        * Set the maximum number of backup files to keep around.
-        * 
-        * <p>The <b>MaxBackupIndex</b> option determines how many backup
-        * files are kept before the oldest is erased. This option takes
-        * a positive integer value. If set to zero, then there will be no
-        * backup files and the log file will be truncated when it reaches
-        * MaxFileSize.
-        *
-        * @param mixed $maxBackups
+        * Writes a string to the target file. Opens file if not already open.
+        * @param string $string Data to write.
         */
-       public function setMaxBackupIndex($maxBackups) {
-               $this->setPositiveInteger('maxBackupIndex', $maxBackups);
-       }
-
-
-       public function append(LoggerLoggingEvent $event) {
-               if($this->fp and $this->layout !== null) {
-                       if(flock($this->fp, LOCK_EX)) {
-                               fwrite($this->fp, 
$this->layout->format($event));
-
-                               // Stats cache must be cleared, otherwise 
filesize() returns cached results
-                               clearstatcache();
-                               
-                               // Rollover if needed
-                               if (filesize($this->expandedFileName) > 
$this->maxFileSize) {
+       protected function write($string) {
+               // Lazy file open
+               if(!isset($this->fp)) {
+                       $this->openFile();
+               }
+               
+               // Lock the file while writing and possible rolling over
+               if(flock($this->fp, LOCK_EX)) {
+                       
+                       // Write to locked file
+                       if(fwrite($this->fp, $string) === false) {
+                               $this->warn("Failed writing to file. Closing 
appender.");
+                               $this->closed = true;
+                       }
+                       
+                       // Stats cache must be cleared, otherwise filesize() 
returns cached results
+                       clearstatcache();
+                       
+                       // Rollover if needed
+                       if (filesize($this->file) > $this->maxFileSize) {
+                               try {
                                        $this->rollOver();
+                               } catch (LoggerException $ex) {
+                                       $this->warn("Rollover failed: " . 
$ex->getMessage() . " Closing appender.");
+                                       $this->closed = true;
                                }
-                               
-                               flock($this->fp, LOCK_UN);
-                       } else {
-                               $this->closed = true;
                        }
-               } 
+                       
+                       flock($this->fp, LOCK_UN);
+               } else {
+                       $this->warn("Failed locking file for writing. Closing 
appender.");
+                       $this->closed = true;
+               }
        }
        
        public function activateOptions() {
                parent::activateOptions();
                
-               if ($this->compress == true && !extension_loaded('zlib')) {
-                       $this->warn('The zlib extension is required for 
file-compression');
-                       $this->closed = true;
+               if ($this->compress && !extension_loaded('zlib')) {
+                       $this->warn("The 'zlib' extension is required for file 
compression. Disabling compression.");
+                       $this->compression = false;
                }
        }
        
        /**
-        * Returns the 'maxBackupIndex' parameter.
-        * @return integer
+        * Set the 'maxBackupIndex' parameter.
+        * @param integer $maxBackupIndex
         */
-       public function getMaxBackupIndex() {
-               return $this->maxBackupIndex;
+       public function setMaxBackupIndex($maxBackupIndex) {
+               $this->setPositiveInteger('maxBackupIndex', $maxBackupIndex);
        }
        
        /**
-        * Set the maximum size that the output file is allowed to reach
-        * before being rolled over to backup files.
-        * <p>In configuration files, the <b>maxFileSize</b> option takes an
-        * long integer in the range 0 - 2^63. You can specify the value
-        * with the suffixes "KB", "MB" or "GB" so that the integer is
-        * interpreted being expressed respectively in kilobytes, megabytes
-        * or gigabytes. For example, the value "10KB" will be interpreted
-        * as 10240.
-        *
-        * @param mixed $value
-        * @return the actual file size set
+        * Returns the 'maxBackupIndex' parameter.
+        * @return integer
         */
-       public function setMaxFileSize($value) {
-               $this->setFileSize('maxFileSize', $value);
+       public function getMaxBackupIndex() {
+               return $this->maxBackupIndex;
        }
        
        /**
-        * Set the maximum size that the output file is allowed to reach
-        * before being rolled over to backup files.
-        *
+        * Set the 'maxFileSize' parameter.
         * @param mixed $maxFileSize
-        * @see setMaxFileSize()
-        * @deprecated
         */
-       public function setMaximumFileSize($maxFileSize) {
-               return $this->setMaxFileSize($maxFileSize);
+       public function setMaxFileSize($maxFileSize) {
+               $this->setFileSize('maxFileSize', $maxFileSize);
        }
        
        /**
@@ -261,7 +255,29 @@ class LoggerAppenderRollingFile extends 
                return $this->maxFileSize;
        }
        
+       /**
+        * Set the 'maxFileSize' parameter (kept for backward compatibility).
+        * @param mixed $maxFileSize
+        * @deprecated Use setMaxFileSize() instead.
+        */
+       public function setMaximumFileSize($maxFileSize) {
+               $this->warn("The 'maximumFileSize' parameter is deprecated. Use 
'maxFileSize' instead.");
+               return $this->setMaxFileSize($maxFileSize);
+       }
+       
+       /**
+        * Sets the 'compress' parameter.
+        * @param boolean $compress
+        */
        public function setCompress($compress) {
                $this->setBoolean('compress', $compress);
        }
+       
+       /**
+        * Returns the 'compress' parameter.
+        * @param boolean 
+        */
+       public function getCompress() {
+               return $this->compress;
+       }
 }

Modified: 
logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFileTest.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFileTest.php?rev=1374786&r1=1374785&r2=1374786&view=diff
==============================================================================
--- logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFileTest.php 
(original)
+++ logging/log4php/trunk/src/test/php/appenders/LoggerAppenderFileTest.php Sun 
Aug 19 16:14:24 2012
@@ -68,6 +68,21 @@ class LoggerAppenderFileTest extends PHP
                self::assertTrue($appender->requiresLayout());
        }
        
+       public function testActivationDoesNotCreateTheFile() {
+               $path = PHPUNIT_TEMP_DIR . "/doesnotexisthopefully.log";
+               @unlink($path);
+               $appender = new LoggerAppenderFile();
+               $appender->setFile($path);
+               $appender->activateOptions();
+               
+               self::assertFalse(file_exists($path));
+               
+               $event = LoggerTestHelper::getInfoEvent('bla');
+               $appender->append($event);
+               
+               self::assertTrue(file_exists($path));
+       }
+       
        public function testSimpleLogging() {
                $config = $this->config1;
                $config['appenders']['default']['params']['file'] = 
$this->testPath;

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=1374786&r1=1374785&r2=1374786&view=diff
==============================================================================
--- 
logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php 
(original)
+++ 
logging/log4php/trunk/src/test/php/appenders/LoggerAppenderRollingFileTest.php 
Sun Aug 19 16:14:24 2012
@@ -113,7 +113,8 @@ class LoggerAppenderRollingFileTest exte
                $file = PHPUNIT_TEMP_DIR . '/TEST-rolling.txt.2';
                $this->checkFileContent($file);
 
-               
$this->assertFalse(file_exists(PHPUNIT_TEMP_DIR.'/TEST-rolling.txt.3'), 'should 
not roll over three times');
+               // Should not roll over three times
+               
$this->assertFalse(file_exists(PHPUNIT_TEMP_DIR.'/TEST-rolling.txt.3'));
        }
        
        public function testLoggingViaLogger() {
@@ -202,5 +203,4 @@ class LoggerAppenderRollingFileTest exte
                @unlink(PHPUNIT_TEMP_DIR.'/TEST-rolling.txt.1.gz');
                @unlink(PHPUNIT_TEMP_DIR.'/TEST-rolling.txt.2.gz');
        }
-
 }


Reply via email to