source: branches/2.2/workflow/inc/class.Logger.inc.php @ 3167

Revision 3167, 9.2 KB checked in by viani, 14 years ago (diff)

Ticket #1135 - Merged r1990:3166 from /trunk/workflow into /branches/2.2/workflow

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