+/**
+ * @brief An alternative logger for development.
+ * Works largely as logger() but allows developers
+ * to isolate particular elements they are targetting
+ * personally without background noise
+ *
+ * log levels:
+ * LOGGER_NORMAL (default)
+ * LOGGER_TRACE
+ * LOGGER_DEBUG
+ * LOGGER_DATA
+ * LOGGER_ALL
+ *
+ * @global App $a
+ * @global dba $db
+ * @global array $LOGGER_LEVELS
+ * @param string $msg
+ * @param int $level
+ */
+
+function dlogger($msg, $level = 0) {
+ $a = get_app();
+ global $db;
+
+ // turn off logger in install mode
+ if (
+ $a->module == 'install'
+ || ! ($db && $db->connected)
+ ) {
+ return;
+ }
+
+ $logfile = get_config('system','dlogfile');
+
+ if (! $logfile) {
+ return;
+ }
+
+ if (count($LOGGER_LEVELS) == 0) {
+ foreach (get_defined_constants() as $k => $v) {
+ if (substr($k, 0, 7) == "LOGGER_") {
+ $LOGGER_LEVELS[$v] = substr($k, 7, 7);
+ }
+ }
+ }
+
+ $process_id = session_id();
+
+ if ($process_id == '') {
+ $process_id = get_app()->process_id;
+ }
+
+ $callers = debug_backtrace();
+ $logline = sprintf("%s@\t%s:\t%s:\t%s\t%s\t%s\n",
+ datetime_convert(),
+ $process_id,
+ basename($callers[0]['file']),
+ $callers[0]['line'],
+ $callers[1]['function'],
+ $msg
+ );
+
+ $stamp1 = microtime(true);
+ @file_put_contents($logfile, $logline, FILE_APPEND);
+ $a->save_timestamp($stamp1, "file");
+}