• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
logrotate for log files

#1
I would like to logrotate my CI log files and keep 3 days worth of logs (3 as an example to keep the examples small) 

my  /etc/logrotate.d/gjtst    logrotate conf file
 
 /var/www/html/application/logs/*.php {
su www-data www-data
    rotate 3
    daily
    missingok
}

Before folder entries
log-2019-06-29.php
log-2019-06-28.php
log-2019-06-27.php
log-2019-06-26.php
...

After this run  logrotate -f -v /etc/logrotate.d/gjtst

After folder entries
log-2019-06-29.php.1
log-2019-06-28.php.1
log-2019-06-27.php.1
log-2019-06-26.php.1
...


Desired folder entries  I can live with changing the file name, I just want 3 versions

log-2019-06-29.php
log-2019-06-28.php
log-2019-06-27.php

What do I change to get the desired effect?

Or is there a simpler procedure for a lamp stack based system
a bash or php script I could put in a cron job?
I wrote my first program in 15 minutes. It took me 3 hours to keypunch it.

I wrote my first BASH script in 5 minutes. It took me a day to find out I had to put a . (period) in front of it to get it to execute.
Reply

#2
PHP Code:
// 1- get a list of file in the CI default CI log file

$LogPathCI '/var/www/html/Zapplication/logs';

$f1 = new FilesystemIterator($LogPathCI FilesystemIterator::SKIP_DOTS);

$gjcount=0// start at
$gjstart=10// total number to keep

if(iterator_count($f1) < $gjstart){
    
gjLog('Number of Files less than number to keep - Nothing to unlink' .PHP_EOL,'test.log');
}

// 2- create an array of files to sort by Modified Time in step 3

$thefiles = array();
foreach(
$f1 as $fileinfo) {
    
$akey $f1->getFileName();
    if((
strtolower($akey)) != 'index.html') {
        
$thefiles[$akey] = $f1->getMTime();
    }
}

// 3- sort the files by date - descending  newest first

arsort($thefiles);

// 4- start at 0, after 10 files delete the rest


foreach ($thefiles as $key => $value) {

    if(
$gjstart $gjcount){
        
gjLog('unlink these key: ' $key .' value: '$value .PHP_EOL,'test.log');
        
$killme $LogPathCI DIRECTORY_SEPARATOR $key;
        if(!
unlink($killme)) {
            
gjLog('unable to unlink '$killme .PHP_EOL,'test.log');
        }
    } else {
        
gjLog('keep these key: ' $key .' value: '$value .PHP_EOL,'test.log');
    }
    
$gjcount++;

I wrote my first program in 15 minutes. It took me 3 hours to keypunch it.

I wrote my first BASH script in 5 minutes. It took me a day to find out I had to put a . (period) in front of it to get it to execute.
Reply


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2019 MyBB Group.