Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Buenas,
Fiz uma classe que comporta, até o momento, uma função que gera log de erro. Vocês poderiam dar uma olhada para ver se existe uma forma mais inteligente (deve existir) de fazer essa classe? Principalmente na gravação do LOG em XML. Segue codigo:
class Other {
protected $pathLog;
public function __construct() {
$this->pathLog = $_SERVER["DOCUMENT_ROOT"].'projeto_01_agenda/apps/logs/';
}
public function writeLog($errorDescription, $errorDateTime, $fileType){
if ($fileType == 1) {
error_log($errorDescription."\n", 3, $this->pathLog.'logs.log');
} elseif ($fileType == 2) {
$documentXML = new DOMDocument();
if (!file_exists($this->pathLog.'logs.xml')) {
$rootNode = $documentXML->createElement("errors");
$documentXML->appendChild($rootNode);
$errorNode = $documentXML->createElement('error','');
$rootNode->appendChild($errorNode);
$errorDescriptionNode = $documentXML->createElement('errorDescription',$errorDescription);
$errorNode->appendChild($errorDescriptionNode);
$errorDateTimeNode = $documentXML->createElement('errorDateTime',$errorDateTime);
$errorNode->appendChild($errorDateTimeNode);
$documentXML->save($this->pathLog.'logs.xml');
} else {
$documentXML->Load($this->pathLog.'logs.xml');
$errorNode = $documentXML->getElementsByTagName('errors')->item(0);
$newErrorElement = $documentXML ->createElement('error');
$newErrorDescriptionElement = $documentXML ->createElement('errorDescription');
$newErrorDateTimeElement = $documentXML ->createElement('errorDateTime');
$errorDescriptionNode = $documentXML ->createTextNode ($errorDescription);
$errorDateTimeNode = $documentXML ->createTextNode ($errorDateTime);
$newErrorDescriptionElement -> appendChild($errorDescriptionNode);
$newErrorDateTimeElement -> appendChild($errorDateTimeNode);
$newErrorElement -> appendChild($newErrorDescriptionElement);
$newErrorElement -> appendChild($newErrorDateTimeElement);
$errorNode -> appendChild($newErrorElement);
$documentXML->save($this->pathLog.'logs.xml');
}
}
}
}
Grato desde já.
PERFEITO Henrique!
Vou analisar o que você escreveu...MUITO obrigado pelo retorno.
Forte Abraço!
Sugestões: dê a opção de customizar o diretório de log no construtor:
Para definir como o log será salvo, sugiro que pesquise pelo padrão Strategy, que proporciona uma solução muito mais elegante do que essas condicionais.
Imagine que um dia você queira inserir a possibilidade de salvar o log em formato JSON, ou CSV, ou sei lá o que, vai ter que ficar mexendo na classe, o que não é uma boa coisa...
Observe este trecho:
if (!file_exists($this->pathLog.'logs.xml')) { ... } else { ... }
Percebe que eles possuem muitas partes em comum?
Ao verificar que o arquivo não existe, simplesmente crie-o, a partir daí o fluxo segue exatamente como no else...
Outra coisa, logs não guardam apenas erros, mas também informações e warnings gerados pelo PHP.