Mercurial > hg > rc1
comparison plugins/debug_logger/debug_logger.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
| author | Charlie Root |
|---|---|
| date | Thu, 04 Jan 2018 15:50:29 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1e000243b222 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 /** | |
| 4 * Debug Logger | |
| 5 * | |
| 6 * Enhanced logging for debugging purposes. It is not recommened | |
| 7 * to be enabled on production systems without testing because of | |
| 8 * the somewhat increased memory, cpu and disk i/o overhead. | |
| 9 * | |
| 10 * Debug Logger listens for existing console("message") calls and | |
| 11 * introduces start and end tags as well as free form tagging | |
| 12 * which can redirect messages to files. The resulting log files | |
| 13 * provide timing and tag quantity results. | |
| 14 * | |
| 15 * Enable the plugin in config.inc.php and add your desired | |
| 16 * log types and files. | |
| 17 * | |
| 18 * @author Ziba Scott | |
| 19 * @website http://roundcube.net | |
| 20 * | |
| 21 * Example: | |
| 22 * | |
| 23 * config.inc.php: | |
| 24 * | |
| 25 * // $config['debug_logger'][type of logging] = name of file in log_dir | |
| 26 * // The 'master' log includes timing information | |
| 27 * $config['debug_logger']['master'] = 'master'; | |
| 28 * // If you want sql messages to also go into a separate file | |
| 29 * $config['debug_logger']['sql'] = 'sql'; | |
| 30 * | |
| 31 * index.php (just after $RCMAIL->plugins->init()): | |
| 32 * | |
| 33 * console("my test","start"); | |
| 34 * console("my message"); | |
| 35 * console("my sql calls","start"); | |
| 36 * console("cp -r * /dev/null","shell exec"); | |
| 37 * console("select * from example","sql"); | |
| 38 * console("select * from example","sql"); | |
| 39 * console("select * from example","sql"); | |
| 40 * console("end"); | |
| 41 * console("end"); | |
| 42 * | |
| 43 * | |
| 44 * logs/master (after reloading the main page): | |
| 45 * | |
| 46 * [17-Feb-2009 16:51:37 -0500] start: Task: mail. | |
| 47 * [17-Feb-2009 16:51:37 -0500] start: my test | |
| 48 * [17-Feb-2009 16:51:37 -0500] my message | |
| 49 * [17-Feb-2009 16:51:37 -0500] shell exec: cp -r * /dev/null | |
| 50 * [17-Feb-2009 16:51:37 -0500] start: my sql calls | |
| 51 * [17-Feb-2009 16:51:37 -0500] sql: select * from example | |
| 52 * [17-Feb-2009 16:51:37 -0500] sql: select * from example | |
| 53 * [17-Feb-2009 16:51:37 -0500] sql: select * from example | |
| 54 * [17-Feb-2009 16:51:37 -0500] end: my sql calls - 0.0018 seconds shell exec: 1, sql: 3, | |
| 55 * [17-Feb-2009 16:51:37 -0500] end: my test - 0.0055 seconds shell exec: 1, sql: 3, | |
| 56 * [17-Feb-2009 16:51:38 -0500] end: Task: mail. - 0.8854 seconds shell exec: 1, sql: 3, | |
| 57 * | |
| 58 * logs/sql (after reloading the main page): | |
| 59 * | |
| 60 * [17-Feb-2009 16:51:37 -0500] sql: select * from example | |
| 61 * [17-Feb-2009 16:51:37 -0500] sql: select * from example | |
| 62 * [17-Feb-2009 16:51:37 -0500] sql: select * from example | |
| 63 */ | |
| 64 class debug_logger extends rcube_plugin | |
| 65 { | |
| 66 function init() | |
| 67 { | |
| 68 require_once(__DIR__ . '/runlog/runlog.php'); | |
| 69 $this->runlog = new runlog(); | |
| 70 | |
| 71 if(!rcmail::get_instance()->config->get('log_dir')){ | |
| 72 rcmail::get_instance()->config->set('log_dir',INSTALL_PATH.'logs'); | |
| 73 } | |
| 74 | |
| 75 $log_config = rcmail::get_instance()->config->get('debug_logger',array()); | |
| 76 | |
| 77 foreach ($log_config as $type => $file){ | |
| 78 $this->runlog->set_file(rcmail::get_instance()->config->get('log_dir').'/'.$file, $type); | |
| 79 } | |
| 80 | |
| 81 $start_string = ""; | |
| 82 $action = rcmail::get_instance()->action; | |
| 83 $task = rcmail::get_instance()->task; | |
| 84 if($action){ | |
| 85 $start_string .= "Action: ".$action.". "; | |
| 86 } | |
| 87 if($task){ | |
| 88 $start_string .= "Task: ".$task.". "; | |
| 89 } | |
| 90 $this->runlog->start($start_string); | |
| 91 | |
| 92 $this->add_hook('console', array($this, 'console')); | |
| 93 $this->add_hook('authenticate', array($this, 'authenticate')); | |
| 94 } | |
| 95 | |
| 96 function authenticate($args){ | |
| 97 $this->runlog->note('Authenticating '.$args['user'].'@'.$args['host']); | |
| 98 return $args; | |
| 99 } | |
| 100 | |
| 101 function console($args){ | |
| 102 $note = $args[0]; | |
| 103 $type = $args[1]; | |
| 104 | |
| 105 | |
| 106 if(!isset($args[1])){ | |
| 107 // This could be extended to detect types based on the | |
| 108 // file which called console. For now only rcube_imap/rcube_storage is supported | |
| 109 $bt = debug_backtrace(); | |
| 110 $file = $bt[3]['file']; | |
| 111 switch(basename($file)){ | |
| 112 case 'rcube_imap.php': | |
| 113 $type = 'imap'; | |
| 114 break; | |
| 115 case 'rcube_storage.php': | |
| 116 $type = 'storage'; | |
| 117 break; | |
| 118 default: | |
| 119 $type = FALSE; | |
| 120 break; | |
| 121 } | |
| 122 } | |
| 123 switch($note){ | |
| 124 case 'end': | |
| 125 $type = 'end'; | |
| 126 break; | |
| 127 } | |
| 128 | |
| 129 | |
| 130 switch($type){ | |
| 131 case 'start': | |
| 132 $this->runlog->start($note); | |
| 133 break; | |
| 134 case 'end': | |
| 135 $this->runlog->end(); | |
| 136 break; | |
| 137 default: | |
| 138 $this->runlog->note($note, $type); | |
| 139 break; | |
| 140 } | |
| 141 return $args; | |
| 142 } | |
| 143 | |
| 144 function __destruct() | |
| 145 { | |
| 146 if ($this->runlog) | |
| 147 $this->runlog->end(); | |
| 148 } | |
| 149 } |
