dolibarr 18.0.6
mod_syslog_file.php
1<?php
2
3require_once DOL_DOCUMENT_ROOT.'/core/modules/syslog/logHandler.php';
4
9{
10 public $code = 'file';
11 public $lastTime = 0;
12
18 public function getName()
19 {
20 global $langs;
21
22 return $langs->trans('File');
23 }
24
30 public function getVersion()
31 {
32 return 'dolibarr';
33 }
34
40 public function getInfo()
41 {
42 global $langs;
43
44 return $langs->trans('YouCanUseDOL_DATA_ROOT');
45 }
46
52 public function isActive()
53 {
54 global $conf;
55 return empty($conf->global->SYSLOG_DISABLE_LOGHANDLER_FILE) ? 1 : 0; // Set SYSLOG_DISABLE_LOGHANDLER_FILE to 1 to disable this loghandler
56 }
57
63 public function configure()
64 {
65 global $langs;
66
67 return array(
68 array(
69 'name' => $langs->trans('SyslogFilename'),
70 'constant' => 'SYSLOG_FILE',
71 'default' => 'DOL_DATA_ROOT/dolibarr.log',
72 'attr' => 'size="60"'
73 )
74 );
75 }
76
82 public function checkConfiguration()
83 {
84 global $langs;
85
86 $errors = array();
87
88 $filename = $this->getFilename();
89
90 if (file_exists($filename) && is_writable($filename)) {
91 dol_syslog('admin/syslog: file '.$filename);
92 } else {
93 $errors[] = $langs->trans("ErrorFailedToOpenFile", $filename);
94 }
95
96 return $errors;
97 }
98
105 private function getFilename($suffixinfilename = '')
106 {
107 global $conf;
108
109 if (empty($conf->global->SYSLOG_FILE)) {
110 $tmp = DOL_DATA_ROOT.'/dolibarr.log';
111 } else {
112 $tmp = str_replace('DOL_DATA_ROOT', DOL_DATA_ROOT, $conf->global->SYSLOG_FILE);
113 }
114
115 if (!empty($conf->global->SYSLOG_FILE_ONEPERSESSION)) {
116 if (is_numeric($conf->global->SYSLOG_FILE_ONEPERSESSION)) {
117 if ($conf->global->SYSLOG_FILE_ONEPERSESSION == 1) { // file depend on instance session key name (Note that session name is same for the instance so for all users and is not a per user value)
118 $suffixinfilename .= '_'.session_name();
119 }
120 if ($conf->global->SYSLOG_FILE_ONEPERSESSION == 2) { // file depend on instance session key name + ip so nearly per user
121 $suffixinfilename .= '_'.session_name().'_'.$_SERVER["REMOTE_ADDR"];
122 }
123 } else {
124 $suffixinfilename .= '_'.$conf->global->SYSLOG_FILE_ONEPERSESSION;
125 }
126 }
127
128 return $suffixinfilename ? preg_replace('/\.log$/i', $suffixinfilename.'.log', $tmp) : $tmp;
129 }
130
138 public function export($content, $suffixinfilename = '')
139 {
140 global $conf, $dolibarr_main_prod;
141
142 if (!empty($conf->global->MAIN_SYSLOG_DISABLE_FILE)) {
143 return; // Global option to disable output of this handler
144 }
145
146 $logfile = $this->getFilename($suffixinfilename);
147
148 // Test constant SYSLOG_FILE_NO_ERROR (should stay a constant defined with define('SYSLOG_FILE_NO_ERROR',1);
149 if (defined('SYSLOG_FILE_NO_ERROR')) {
150 $filefd = @fopen($logfile, 'a+');
151 } else {
152 $filefd = fopen($logfile, 'a+');
153 }
154
155 if (!$filefd) {
156 if (!defined('SYSLOG_FILE_NO_ERROR') || !constant('SYSLOG_FILE_NO_ERROR')) {
157 // Do not break dolibarr usage if log fails
158 //throw new Exception('Failed to open log file '.basename($logfile));
159 print 'Failed to open log file '.($dolibarr_main_prod ?basename($logfile) : $logfile);
160 }
161 } else {
162 $logLevels = array(
163 LOG_EMERG => 'EMERG',
164 LOG_ALERT => 'ALERT',
165 LOG_CRIT => 'CRIT',
166 LOG_ERR => 'ERR',
167 LOG_WARNING => 'WARNING',
168 LOG_NOTICE => 'NOTICE',
169 LOG_INFO => 'INFO',
170 LOG_DEBUG => 'DEBUG'
171 );
172
173 $delay = "";
174 if (!empty($conf->global->MAIN_SYSLOG_SHOW_DELAY)) {
175 $now = microtime(true);
176 $delay = " ".sprintf("%05.3f", $this->lastTime != 0 ? $now - $this->lastTime : 0);
177 $this->lastTime = $now;
178 }
179
180 $message = dol_print_date(dol_now('gmt'), 'standard', 'gmt').$delay." ".sprintf("%-7s", $logLevels[$content['level']])." ".sprintf("%-15s", $content['ip'])." ".($this->ident > 0 ?str_pad('', $this->ident, ' ') : '').$content['message'];
181 fwrite($filefd, $message."\n");
182 fclose($filefd);
183 dolChmod($logfile);
184 }
185 }
186}
Parent class for log handlers.
Class to manage logging to a file.
isActive()
Is the module active ?
getInfo()
Content of the info tooltip.
getName()
Return name of logger.
getVersion()
Version of the module ('x.y.z' or 'dolibarr' or 'experimental' or 'development')
checkConfiguration()
Return if configuration is valid.
export($content, $suffixinfilename='')
Export the message.
getFilename($suffixinfilename='')
Return the parsed logfile path.
configure()
Return array of configuration data.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dolChmod($filepath, $newmask='')
Change mod of a file.
dol_now($mode='auto')
Return date for now.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
LogHandlerInterface.