source: trunk/workflow/inc/class.Logger.inc.php @ 8091

Revision 8091, 9.4 KB checked in by viani, 11 years ago (diff)

Ticket #3424 - Correção de bug na classe de Log do Workflow

  • Property svn:executable set to *
RevLine 
[795]1<?php
2
3/**************************************************************************\
4* eGroupWare                                                               *
5* http://www.egroupware.org                                                *
6* --------------------------------------------                             *
7*  This program is free software; you can redistribute it and/or modify it *
8*  under the terms of the GNU General Public License as published by the   *
9*  Free Software Foundation; either version 2 of the License, or (at your  *
10*  option) any later version.                                              *
11\**************************************************************************/
12
13require_once 'log/Log.php';
14
15/**
16 * Classe de logs de dentro dos processos e módulo
17 * @package Workflow
18 * @author Guilherme Striquer Bisotto - gbisotto@celepar.pr.gov.br
19 * @license http://www.gnu.org/copyleft/gpl.html GPL
20 * @subpackage Job
21 */
22class Logger
23{
24        /**
25         * @var object $db Objeto de banco de dados já conectado
26         * @access private
27         */
28        private $db = null;
29
30        /**
[8091]31         * @var object $db Objeto de banco de dados do modulo workflow
32         * @access private
33         */
34        private $dbGalaxia = null;
35
36        /**
[795]37         * @var string $logPath Caminho onde será salvo o arquivo de log, caso o tipo de log Log_file seja adicionado à composição
38         * @access private
39         */
40        private $logPath = null;
41
42        /**
43         * @var string $logFileName Nome do arquivo de log, caso o tipo de log Log_file seja adicionado à composição
44         * @access private
45         */
46        private $logFileName = 'workflow.log';
47
48        /**
49         * @var string $curProcessName Nome do processo normalizado, caso o objeto de log seja criado por um processo
50         * @access private
51         */
52        private $curProcessName = null;
53
54        /**
55         * @var array $logsAllowed Logs permitidos no frontend
56         * @access private
57         */
58        private $logsAllowed = array();
59
60        /**
61         * @var array $logTypes Array com ponteiros para os objetos de log adicionados à composição
62         * @access private
63         */
64        private $logTypes = array();
65
66        /**
67         * @var object $log Objeto de log do tipo Log_composite
68         * @access private
69         */
70        private $log = null;
71
72        /**
73         * @var int $logLevel nível de log atualmente configurado
74         * @access protected
75         */
76        protected $logLevel = null;
77
78        /**
79         * Construtor da classe Logger
80         * @param array $logTypes array com os tipos de logs que se deseja gerar
81         * @param string $curProcessName nome normalizado do processo que utilizará o log
82         * @return object Objeto da classe Logger
83         * @access public
84         */
85        public function Logger($logTypes = 'file', $curProcessId = null, $curProcessName = null)
86        {
87
[3167]88                $this->db =& Factory::getInstance('WorkflowObjects')->getDBExpresso()->Link_ID;
[8091]89                $this->dbGalaxia =& Factory::getInstance('WorkflowObjects')->getDBGalaxia()->Link_ID;
[795]90
91                if(!empty($curProcessName)){
[8091]92
[795]93                        $query = '
94                                SELECT
95                                        wf_normalized_name
96                                FROM
97                                        egw_wf_processes';
98
[8091]99                        if(!($result = $this->dbGalaxia->query($query)))
[795]100                                throw new Exception(lang('Cannot execute query'));
101
102                        while($row = $result->fetchRow())
103                                $processNames[] = $row['wf_normalized_name'];
104
105                        if(!in_array($curProcessName, $processNames))
106                                throw new Exception(lang('Cannot find the process provided'));
107
108                        $this->curProcessName = $curProcessName;
109                }
110
111                $this->configure($curProcessId);
112
113                if(!is_array($logTypes) && !empty($logTypes))
114                        $logTypes = array($logTypes);
115
116                $this->log =& Log::factory('composite');
117                foreach($logTypes as $logType){
118                        $this->addLogType($logType);
119                }
120        }
121
122        /**
123         * Configura o objeto de acordo com o contexto
124         * @params int $curProcessId O Id do processo corrente
125         * @return null
126         * @access private
127         */
128        private function configure($curProcessId = null)
129        {
130                if(!empty($curProcessId)){
131                        $query = "
132                                        SELECT
133                                                wf_config_name, wf_config_value_int
134                                        FROM
135                                                egw_wf_process_config
136                                        WHERE
137                                                wf_p_id = $curProcessId
138                                        AND
139                                                wf_config_name like 'log_level'
140                                                ";
[8091]141                        $config_value = array_pop($this->dbGalaxia->query($query)->GetArray(-1));
[795]142                        $this->logLevel = $config_value['wf_config_value_int'];
143                } else {
144                        $query = "
145                                        SELECT
146                                                config_name, config_value
147                                        FROM
148                                                phpgw_config
149                                        WHERE
150                                                config_app like 'workflow'
151                                        AND
152                                                config_name like 'log_level'
153                                                ";
154
155                        $result = array_pop($this->db->query($query)->GetArray());
156                        $this->logLevel = $result['config_value'];
157                }
158
159                $query = "
160                        SELECT
161                                config_name, config_value
162                        FROM
163                                phpgw_config
164                        WHERE
165                                config_app like 'workflow'
166                        AND
167                                config_name like 'log_type_%'
168                                ";
169                $result = $this->db->query($query);
170                while($row = $result->fetchRow()){
171                        if($row['config_value'] == 'True'){
172                                $this->logsAllowed[] = str_replace('log_type_', '', $row['config_name']);
173                        }
174                }
175        }
176        /**
177         * Configura e salva um objeto de log
178         * @params string logType tipo de log a ser criado
179         * @return object Objeto da classe Log_($logType) ou null caso o tipo de log não exista ou não seja permitido no frontend
180         * @access private
181         */
182        private function setLogType($logType)
183        {
184                if(in_array($logType, $this->logsAllowed)){
185                        $logMethod = 'setLog_'.$logType;
186                        if(method_exists($this, $logMethod))
187                                $this->logTypes[$logType] =& $this->$logMethod();
188                }
189                return $this->logTypes[$logType];
190        }
191
192        /**
193         * Adiciona um tipo de log à composição de logs caso ela já não tenha sido adicionada
194         * @params string $logType tipo de log a ser adicionado
195         * @return boolean true no caso do tipo de log ter sido adicionado com sucesso, false caso contrário
196         * @access public
197         */
198        public function addLogType($logType)
199        {
200                if(!in_array($logType, array_keys($this->logTypes))){
201                        $log =& $this->setLogType($logType);
202                        if(is_a($log, "Log_$logType")){
203                                return $this->log->addChild($log);
204                        }
205                }
206                return false;
207        }
208
209        /**
210         * Remove um tipo de log da composição de logs
211         * @params $logType tipo de log a ser removido
212         * @return object Objeto Log_($logType) removido, ou null caso não tenha removido qualquer um
213         * @access public
214         */
215        public function removeLogType($logType)
216        {
217                if(in_array($logType ,array_keys($this->logTypes)) && count($this->logTypes) > 1){
218                        $this->log->removeChild($this->logTypes[$logType]);
219                        $logRemoved =& $this->logTypes[$logTypes];
220                        unset($this->logTypes[$logType]);
221
222                        if(count($this->logTypes) == 1){
223                                unset($this->log);
224                                $this->log =& $this->logTypes[0];
225                        }
226                } else {
227                        return null;
228                }
229                return $logRemoved;
230        }
231
232        /**
233         * Configura o log do tipo file
234         * @return object Objeto do tipo Log_file
235         * @access private
236         */
237        private function setLog_file()
238        {
239                if(!empty($this->curProcessName)){
240                        $this->logPath = GALAXIA_PROCESSES.SEP.$this->curProcessName.SEP.'logs';
241                } else {
242                        $this->logPath = GALAXIA_PROCESSES.SEP.'logs';
243                }
244
245                $conf = array('mode' => 0600, 'timeFormat' => '%X %x');
246                $log =& Log::factory('file', $this->logPath.SEP.$this->logFileName, $this->curProcessName, $conf, $this->logLevel);
247                return $log;
248        }
249
250        /**
251         * Configura o log do tipo firebug
252         * @return object Objeto do tipo Log_firebug
253         * @access private
254         */
255        private function setLog_firebug()
256        {
257                $log =& Log::factory('firebug', '', $this->curProcessName, array('buffering' => true), $this->logLevel);
258                return $log;
259        }
260
261        /**
262         * Grava um log do nível emergência (sistema inoperante)
263         * @params string $message Mensagem a ser gravada do log
264         * @return boolean true em caso de sucesso e false caso contrário
265         * @access public
266         */
267        public function emerg($message)
268        {
269                return $this->log->log($message, PEAR_LOG_EMERG);
270        }
271
272        /**
273         * Grava um log do nível alerta (ação imediata requerida)
274         * @params string $message Mensagem a ser gravada do log
275         * @return boolean true em caso de sucesso e false caso contrário
276         * @access public
277         */
278        public function alert($message)
279        {
280                return $this->log->log($message, PEAR_LOG_ALERT);
281        }
282
283        /**
284         * Grava um log do nível crítico (situações críticas)
285         * @params string $message Mensagem a ser gravada do log
286         * @return boolean true em caso de sucesso e false caso contrário
287         * @access public
288         */
289        public function crit($message)
290        {
291                return $this->log->log($message, PEAR_LOG_CRIT);
292        }
293
294        /**
295         * Grava um log do nível erro (situações de erro)
296         * @params string $message Mensagem a ser gravada do log
297         * @return boolean true em caso de sucesso e false caso contrário
298         * @access public
299         */
300        public function err($message)
301        {
302                return $this->log->log($message, PEAR_LOG_ERR);
303        }
304
305        /**
306         * Grava um log do nível aviso (condições de aviso - warning)
307         * @params string $message Mensagem a ser gravada do log
308         * @return boolean true em caso de sucesso e false caso contrário
309         * @access public
310         */
311        public function warning($message)
312        {
313                return $this->log->log($message, PEAR_LOG_WARNING);
314        }
315
316        /**
317         * Grava um log do nível notificação (situações normais, mas significantes)
318         * @params string $message Mensagem a ser gravada do log
319         * @return boolean true em caso de sucesso e false caso contrário
320         * @access public
321         */
322        public function notice($message)
323        {
324                return $this->log->log($message, PEAR_LOG_NOTICE);
325        }
326
327        /**
328         * Grava um log do nível informação (informacional)
329         * @params string $message Mensagem a ser gravada do log
330         * @return boolean true em caso de sucesso e false caso contrário
331         * @access public
332         */
333        public function info($message)
334        {
335                return $this->log->log($message, PEAR_LOG_INFO);
336        }
337
338        /**
339         * Grava um log do nível debug
340         * @params string $message Mensagem a ser gravada do log
341         * @return boolean true em caso de sucesso e false caso contrário
342         * @access public
343         */
344        public function debug($message)
345        {
346                return $this->log->log($message, PEAR_LOG_DEBUG);
347        }
348}
349
350?>
Note: See TracBrowser for help on using the repository browser.