PHP Deployment Scripts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
neatoDeploy/app/neato_logger.php

148 lines
3.8 KiB

<?php
/**
* File Logger
*
* PHP version 8.3
*
* @category Util
* @package Neato
* @author Robert S. <tips@technowizardbob.com>
* @license https://mit-license.org/ MIT License
* @link https://git.mysnippetsofcode.com/tts/neatoDeploy
*/
/**
* $cwd is defined in neato.php
*
* @phpstan-ignore-next-line Variable $cwd might not be defined
*/
define('PROJECT_LOGS_DIR', $cwd. '/log');
/**
* Logs display data
*
* @category Util
* @package Neato
* @author Robert S. <tips@technowizardbob.com>
* @license https://mit-license.org/ MIT License
* @link https://git.mysnippetsofcode.com/tts/neatoDeploy
*
*/
class Logger
{
private $_handle;
/**
* Get Filename for writing to Log file
*
* @param string $filename for log
* @param int $max_count of lines before file wipe, to keep small logs.
*/
public function __construct(string $filename = 'neato_Installer', int $max_count = 1000)
{
if (strpos($filename, "..") !== false) {
$this->_handle = false; // Too dangerious, so return false
} else {
$filename = str_replace("php", "", $filename);
if (! is_dir(PROJECT_LOGS_DIR)) {
//Directory does not exist, so lets create it.
mkdir(PROJECT_LOGS_DIR, 0775);
}
$filename = preg_replace("|[^A-Za-z0-9_]|", "", $filename);
$filename = escapeshellcmd($filename);
$file = PROJECT_LOGS_DIR . '/' . $filename . ".log.txt";
if ($max_count > 1) {
if ($this->getLines($file) > $max_count) {
unlink($file);
}
}
$success = touch($file);
if ($success === false) {
$this->_handle = false;
throw new \Exception('Unable to touch file:' . $file);
}
chmod($file, 0660);
if (! is_writable($file)) {
$this->_handle = false;
throw new \Exception('Unable to write to file:' . $file);
}
$this->_handle = fopen($file, 'a');
}
}
/**
* Count number of lines in Log File
*
* @param string $file filename to check how big it is
*
* @return int line count
*/
public function getLines(string $file): int
{
// No such file, so return zero for length.
if (! file_exists($file)) {
return 0;
}
$f = fopen($file, 'rb');
$lines = 0;
if ($f === false || !is_resource($f)) {
return 0;
}
while (!feof($f)) {
$line = fread($f, 8192);
if ($line === false) {
return 0;
}
$lines += substr_count($line, "\n");
}
fclose($f);
return $lines;
}
/**
* Write to Log File
*
* @param string $message to save
*
* @return bool able to write to log file
*/
public function write(string $message): bool
{
if ($this->_handle === false || ! is_resource($this->_handle) ) {
return false;
}
$tz = Configure::get('logger_time_zone');
if ($tz !== false && !empty($tz)) {
$tz_obj = new \DateTimeZone($tz);
$dt = new \DateTime();
$dt->setTimezone($tz_obj);
$now = $dt->format('g:i A \o\n l jS F Y');
} else {
$dt = new \DateTime();
$now = $dt->format('g:i A \o\n l jS F Y');
}
fwrite($this->_handle, $now . ' - ' . print_r($message, true) . "\n");
return true;
}
/**
* Close Log File Handle
*/
public function __destruct()
{
if ($this->_handle !== false && is_resource($this->_handle)) {
fclose($this->_handle);
}
}
} // end of Logger