mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-27 11:09:20 +03:00
Added "write_on_php_error_only" setting
This commit is contained in:
parent
9bf5847983
commit
9bde3fe5dd
7 changed files with 125 additions and 61 deletions
|
|
@ -48,6 +48,11 @@ abstract class Driver
|
|||
*/
|
||||
private $bWriteOnErrorOnly;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $bWriteOnPhpErrorOnly;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
|
|
@ -71,9 +76,10 @@ abstract class Driver
|
|||
|
||||
$this->iWriteOnTimeoutOnly = 0;
|
||||
$this->bWriteOnErrorOnly = false;
|
||||
$this->bWriteOnPhpErrorOnly = false;
|
||||
$this->bFlushCache = false;
|
||||
$this->aCache = array();
|
||||
|
||||
|
||||
$this->aPrefixes = array(
|
||||
\MailSo\Log\Enumerations\Type::INFO => '[DATA]',
|
||||
\MailSo\Log\Enumerations\Type::SECURE => '[SECURE]',
|
||||
|
|
@ -84,6 +90,10 @@ abstract class Driver
|
|||
\MailSo\Log\Enumerations\Type::NOTICE => '[NOTICE]',
|
||||
\MailSo\Log\Enumerations\Type::WARNING => '[WARNING]',
|
||||
\MailSo\Log\Enumerations\Type::ERROR => '[ERROR]',
|
||||
|
||||
\MailSo\Log\Enumerations\Type::NOTICE_PHP => '[NOTICE]',
|
||||
\MailSo\Log\Enumerations\Type::WARNING_PHP => '[WARNING]',
|
||||
\MailSo\Log\Enumerations\Type::ERROR_PHP => '[ERROR]',
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -107,7 +117,7 @@ abstract class Driver
|
|||
|
||||
/**
|
||||
* @param bool $bValue
|
||||
*
|
||||
*
|
||||
* @return \MailSo\Log\Driver
|
||||
*/
|
||||
public function WriteOnErrorOnly($bValue)
|
||||
|
|
@ -116,6 +126,17 @@ abstract class Driver
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $bValue
|
||||
*
|
||||
* @return \MailSo\Log\Driver
|
||||
*/
|
||||
public function WriteOnPhpErrorOnly($bValue)
|
||||
{
|
||||
$this->bWriteOnPhpErrorOnly = !!$bValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $iTimeout
|
||||
*
|
||||
|
|
@ -128,7 +149,7 @@ abstract class Driver
|
|||
{
|
||||
$this->iWriteOnTimeoutOnly = 0;
|
||||
}
|
||||
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
|
@ -214,15 +235,31 @@ abstract class Driver
|
|||
final public function Write($sDesc, $iType = \MailSo\Log\Enumerations\Type::INFO, $sName = '')
|
||||
{
|
||||
$bResult = true;
|
||||
if (!$this->bFlushCache && ($this->bWriteOnErrorOnly || 0 < $this->iWriteOnTimeoutOnly))
|
||||
if (!$this->bFlushCache && ($this->bWriteOnErrorOnly || $this->bWriteOnPhpErrorOnly || 0 < $this->iWriteOnTimeoutOnly))
|
||||
{
|
||||
if ($this->bWriteOnErrorOnly && \in_array($iType, array(
|
||||
$bErrorPhp = false;
|
||||
|
||||
$bError = $this->bWriteOnErrorOnly && \in_array($iType, array(
|
||||
\MailSo\Log\Enumerations\Type::NOTICE,
|
||||
\MailSo\Log\Enumerations\Type::NOTICE_PHP,
|
||||
\MailSo\Log\Enumerations\Type::WARNING,
|
||||
\MailSo\Log\Enumerations\Type::ERROR
|
||||
)))
|
||||
\MailSo\Log\Enumerations\Type::WARNING_PHP,
|
||||
\MailSo\Log\Enumerations\Type::ERROR,
|
||||
\MailSo\Log\Enumerations\Type::ERROR_PHP
|
||||
));
|
||||
|
||||
if (!$bError)
|
||||
{
|
||||
$sFlush = '--- FlushLogCache: WriteOnErrorOnly';
|
||||
$bErrorPhp = $this->bWriteOnPhpErrorOnly && \in_array($iType, array(
|
||||
\MailSo\Log\Enumerations\Type::NOTICE_PHP,
|
||||
\MailSo\Log\Enumerations\Type::WARNING_PHP,
|
||||
\MailSo\Log\Enumerations\Type::ERROR_PHP
|
||||
));
|
||||
}
|
||||
|
||||
if ($bError || $bErrorPhp)
|
||||
{
|
||||
$sFlush = '--- FlushLogCache: '.($bError ? 'WriteOnErrorOnly' : 'WriteOnPhpErrorOnly');
|
||||
if (isset($this->aCache[0]) && empty($this->aCache[0]))
|
||||
{
|
||||
$this->aCache[0] = $sFlush;
|
||||
|
|
@ -255,7 +292,7 @@ abstract class Driver
|
|||
|
||||
$this->aCache[] = '--- FlushLogCache: Trigger';
|
||||
$this->aCache[] = $this->loggerLineImplementation($this->getTimeWithMicroSec(), $sDesc, $iType, $sName);
|
||||
|
||||
|
||||
$this->bFlushCache = true;
|
||||
$bResult = $this->writeImplementation($this->aCache);
|
||||
$this->aCache = array();
|
||||
|
|
@ -289,7 +326,7 @@ abstract class Driver
|
|||
*/
|
||||
final public function WriteEmptyLine()
|
||||
{
|
||||
if (!$this->bFlushCache && ($this->bWriteOnErrorOnly || 0 < $this->iWriteOnTimeoutOnly))
|
||||
if (!$this->bFlushCache && ($this->bWriteOnErrorOnly || $this->bWriteOnPhpErrorOnly || 0 < $this->iWriteOnTimeoutOnly))
|
||||
{
|
||||
$this->aCache[] = '';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,13 +69,13 @@ class Inline extends \MailSo\Log\Driver
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function clearImplementation()
|
||||
{
|
||||
if (\defined('PHP_SAPI') && 'cli' === PHP_SAPI)
|
||||
if (\defined('PHP_SAPI') && 'cli' === PHP_SAPI && \MailSo\Base\Utils::FunctionExistsAndEnabled('system'))
|
||||
{
|
||||
\system('clear');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,4 +18,8 @@ class Type
|
|||
const TIME = 6;
|
||||
const MEMORY = 7;
|
||||
const TIME_DELTA = 8;
|
||||
|
||||
const NOTICE_PHP = 11;
|
||||
const WARNING_PHP = 12;
|
||||
const ERROR_PHP = 13;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,11 @@ class Logger extends \MailSo\Base\Collection
|
|||
*/
|
||||
private $bShowSecter;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $bHideErrorNotices;
|
||||
|
||||
/**
|
||||
* @access protected
|
||||
*/
|
||||
|
|
@ -39,7 +44,9 @@ class Logger extends \MailSo\Base\Collection
|
|||
$this->aForbiddenTypes = array();
|
||||
$this->aSecretWords = array();
|
||||
$this->bShowSecter = false;
|
||||
$this->bHideErrorNotices = false;
|
||||
|
||||
\set_error_handler(array(&$this, '__phpErrorHandler'));
|
||||
\register_shutdown_function(array(&$this, '__loggerShutDown'));
|
||||
}
|
||||
|
||||
|
|
@ -83,6 +90,14 @@ class Logger extends \MailSo\Base\Collection
|
|||
return $sCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function Ping()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -107,13 +122,23 @@ class Logger extends \MailSo\Base\Collection
|
|||
|
||||
/**
|
||||
* @param bool $bShow
|
||||
*
|
||||
*
|
||||
* @return \MailSo\Log\Logger
|
||||
*/
|
||||
public function SetShowSecter($bShow)
|
||||
{
|
||||
$this->bShowSecter = !!$bShow;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $bValue
|
||||
*
|
||||
* @return \MailSo\Log\Logger
|
||||
*/
|
||||
public function HideErrorNotices($bValue)
|
||||
{
|
||||
$this->bHideErrorNotices = !!$bValue;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
|
@ -145,10 +170,36 @@ class Logger extends \MailSo\Base\Collection
|
|||
public function RemoveForbiddenType($iType)
|
||||
{
|
||||
$this->aForbiddenTypes[$iType] = false;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $iErrNo
|
||||
* @param string $sErrStr
|
||||
* @param string $sErrFile
|
||||
* @param int $iErrLine
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function __phpErrorHandler($iErrNo, $sErrStr, $sErrFile, $iErrLine)
|
||||
{
|
||||
$iType = \MailSo\Log\Enumerations\Type::NOTICE_PHP;
|
||||
switch ($iErrNo)
|
||||
{
|
||||
case E_USER_ERROR:
|
||||
$iType = \MailSo\Log\Enumerations\Type::ERROR_PHP;
|
||||
break;
|
||||
case E_USER_WARNING:
|
||||
$iType = \MailSo\Log\Enumerations\Type::WARNING_PHP;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->Write($sErrFile.' [line:'.$iErrLine.', code:'.$iErrNo.']', $iType, 'PHP');
|
||||
$this->Write('Error: '.$sErrStr, $iType, 'PHP');
|
||||
|
||||
return !!(\MailSo\Log\Enumerations\Type::NOTICE === $iType && $this->bHideErrorNotices);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
|
|
@ -164,7 +215,7 @@ class Logger extends \MailSo\Base\Collection
|
|||
$this->Write('Memory peak usage: '.$aStatistic['php']['memory_get_peak_usage'],
|
||||
\MailSo\Log\Enumerations\Type::MEMORY);
|
||||
}
|
||||
|
||||
|
||||
if (isset($aStatistic['time']))
|
||||
{
|
||||
$this->Write('Time delta: '.$aStatistic['time'], \MailSo\Log\Enumerations\Type::TIME_DELTA);
|
||||
|
|
@ -179,7 +230,7 @@ class Logger extends \MailSo\Base\Collection
|
|||
public function WriteEmptyLine()
|
||||
{
|
||||
$iResult = 1;
|
||||
|
||||
|
||||
$aLoggers =& $this->GetAsArray();
|
||||
foreach ($aLoggers as /* @var $oLogger \MailSo\Log\Driver */ &$oLogger)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -128,6 +128,8 @@ class Actions
|
|||
|
||||
$oConfig = $this->Config();
|
||||
$this->Plugins()->RunHook('filter.application-config', array(&$oConfig));
|
||||
|
||||
$this->Logger()->Ping();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -726,8 +728,9 @@ class Actions
|
|||
|
||||
$this->oLogger->Add(
|
||||
\MailSo\Log\Drivers\File::NewInstance($sLogFileFullPath)
|
||||
->WriteOnErrorOnly($this->Config()->Get('logs', 'write_on_error_only', true))
|
||||
->WriteOnTimeoutOnly($this->Config()->Get('logs', 'write_on_timeout_only', 30))
|
||||
->WriteOnErrorOnly($this->Config()->Get('logs', 'write_on_error_only', false))
|
||||
->WriteOnPhpErrorOnly($this->Config()->Get('logs', 'write_on_php_error_only', false))
|
||||
->WriteOnTimeoutOnly($this->Config()->Get('logs', 'write_on_timeout_only', 0))
|
||||
);
|
||||
|
||||
if (!$this->Config()->Get('debug', 'enable', false))
|
||||
|
|
@ -1555,7 +1558,7 @@ class Actions
|
|||
include_once 'Crypt/RSA.php';
|
||||
}
|
||||
|
||||
\RainLoop\Service::$__HIDE_ERROR_NOTICES = true;
|
||||
$oLogger->HideErrorNotices(true);
|
||||
|
||||
$oRsa = new \Crypt_RSA();
|
||||
$oRsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
|
||||
|
|
@ -1575,7 +1578,7 @@ class Actions
|
|||
$oLogger->Write('Invalid decrypted data', \MailSo\Log\Enumerations\Type::WARNING, 'RSA');
|
||||
}
|
||||
|
||||
\RainLoop\Service::$__HIDE_ERROR_NOTICES = false;
|
||||
$oLogger->HideErrorNotices(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1591,9 +1594,11 @@ class Actions
|
|||
*/
|
||||
public function DoGetPublicKey()
|
||||
{
|
||||
$oLogger = $this->Logger();
|
||||
|
||||
if ($this->Config()->Get('security', 'use_rsa_encryption', false))
|
||||
{
|
||||
\RainLoop\Service::$__HIDE_ERROR_NOTICES = true;
|
||||
$oLogger->HideErrorNotices(true);
|
||||
|
||||
if (!\class_exists('Crypt_RSA'))
|
||||
{
|
||||
|
|
@ -1613,14 +1618,14 @@ class Actions
|
|||
|
||||
$sHash = \md5($e->toHex().$n->toHex());
|
||||
|
||||
\RainLoop\Service::$__HIDE_ERROR_NOTICES = false;
|
||||
$oLogger->HideErrorNotices(false);
|
||||
return $this->DefaultResponse(__FUNCTION__,
|
||||
$this->Cacher()->Set(\RainLoop\KeyPathHelper::RsaCacherKey($sHash), $aKeys['privatekey']) ?
|
||||
array($sHash, $e->toHex(), $n->toHex()) : false);
|
||||
}
|
||||
}
|
||||
|
||||
\RainLoop\Service::$__HIDE_ERROR_NOTICES = false;
|
||||
$oLogger->HideErrorNotices(false);
|
||||
return $this->FalseResponse(__FUNCTION__);
|
||||
}
|
||||
|
||||
|
|
@ -6476,7 +6481,7 @@ class Actions
|
|||
{
|
||||
return $this->rawSmart(false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -6495,7 +6500,7 @@ class Actions
|
|||
|
||||
$iCode = 0;
|
||||
$sContentType = '';
|
||||
|
||||
|
||||
$sData = $this->Http()->GetUrlAsString('http://gravatar.com/avatar/'.\md5($sEmail).'.jpg?s=80&d=404',
|
||||
null, $sContentType, $iCode, $this->Logger(), 5,
|
||||
$this->Config()->Get('labs', 'curl_proxy', ''), $this->Config()->Get('labs', 'curl_proxy_auth', ''));
|
||||
|
|
@ -6524,7 +6529,7 @@ class Actions
|
|||
$sContentType = 'image/png';
|
||||
$sData = \file_get_contents(APP_VERSION_ROOT_PATH.'app/resources/images/empty-contact.png');
|
||||
}
|
||||
|
||||
|
||||
$this->cacheByKey($sRawKey);
|
||||
\header('Content-Type: '.$sContentType);
|
||||
echo $sData;
|
||||
|
|
|
|||
|
|
@ -140,7 +140,8 @@ Values:
|
|||
|
||||
'enable' => array(false, 'Enable logging'),
|
||||
|
||||
'write_on_error_only' => array(false, 'Logs entire request only if error occured'),
|
||||
'write_on_error_only' => array(false, 'Logs entire request only if error occured (php requred)'),
|
||||
'write_on_php_error_only' => array(false, 'Logs entire request only if php error occured'),
|
||||
'write_on_timeout_only' => array(0, 'Logs entire request only if request timeout (in seconds) occured.'),
|
||||
|
||||
'hide_passwords' => array(true, 'Required for development purposes only.
|
||||
|
|
|
|||
|
|
@ -4,11 +4,6 @@ namespace RainLoop;
|
|||
|
||||
class Service
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
static $__HIDE_ERROR_NOTICES = false;
|
||||
|
||||
/**
|
||||
* @var \MailSo\Base\Http
|
||||
*/
|
||||
|
|
@ -32,8 +27,6 @@ class Service
|
|||
$this->oHttp = \MailSo\Base\Http::SingletonInstance();
|
||||
$this->oActions = \RainLoop\Api::Actions();
|
||||
|
||||
\set_error_handler(array(&$this, 'LogPhpErrorHandler'));
|
||||
|
||||
$this->oServiceActions = new \RainLoop\ServiceActions($this->oHttp, $this->oActions);
|
||||
|
||||
if ($this->oActions->Config()->Get('debug', 'enable', false))
|
||||
|
|
@ -65,33 +58,6 @@ class Service
|
|||
return new self();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $iErrNo
|
||||
* @param string $sErrStr
|
||||
* @param string $sErrFile
|
||||
* @param int $iErrLine
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function LogPhpErrorHandler($iErrNo, $sErrStr, $sErrFile, $iErrLine)
|
||||
{
|
||||
$iType = \MailSo\Log\Enumerations\Type::NOTICE;
|
||||
switch ($iErrNo)
|
||||
{
|
||||
case E_USER_ERROR:
|
||||
$iType = \MailSo\Log\Enumerations\Type::ERROR;
|
||||
break;
|
||||
case E_USER_WARNING:
|
||||
$iType = \MailSo\Log\Enumerations\Type::WARNING;
|
||||
break;
|
||||
}
|
||||
|
||||
$this->oActions->Logger()->Write($sErrFile.' [line:'.$iErrLine.', code:'.$iErrNo.']', $iType, 'PHP');
|
||||
$this->oActions->Logger()->Write('Error: '.$sErrStr, $iType, 'PHP');
|
||||
|
||||
return !!(\MailSo\Log\Enumerations\Type::NOTICE === $iType && \RainLoop\Service::$__HIDE_ERROR_NOTICES);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \RainLoop\Service
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue