diff options
Diffstat (limited to 'PlugIns/Logger.lisp')
-rw-r--r-- | PlugIns/Logger.lisp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/PlugIns/Logger.lisp b/PlugIns/Logger.lisp new file mode 100644 index 0000000..f456fc3 --- /dev/null +++ b/PlugIns/Logger.lisp @@ -0,0 +1,73 @@ +;;; -*- Lisp -*- +;;; $Id: Logger.lisp 20 2005-12-27 15:21:23Z bjc $ + +(defpackage default-logger + (:use :cl :cl-user :moxie :bjc-utils)) +(in-package :default-logger) + +(defvar *default-log-directory* (merge-pathnames "Documents/Moxie Transcripts/" + (user-homedir-pathname))) + +(defun start-logging-hook (&optional arg) + (let ((log-filen (car (world-var :log-file-path)))) + (setf (world-var :log-stream) + (open log-filen :direction :output + :if-exists :append :if-does-not-exist :create)) + (awhen (world-var :log-stream) + (format it "[Logging started on: ~A]~%" (format-timestamp (get-universal-time))) + (finish-output it) + (print-to-world *world* (format nil "Now logging to: ~A~%" log-filen))))) + +(defun stop-logging-hook (&optional arg) + (awhen (world-var :log-stream) + (format it "[Logging ended on: ~A]~%" (format-timestamp (get-universal-time))) + (finish-output it) + (close it) + (setf (world-var :log-stream) nil) + (print-to-world *world* (format nil "Logging is now disabled.~%")))) + +(defun log-output (string) + "Log STRING to DEFAULT-FILE-NAME." + (awhen (world-var :log-stream) + (let* (*print-pretty* + (string (if (stringp string) string (car string)))) + (format it "~A ~A" (format-timestamp (get-universal-time)) string) + (finish-output it)))) + +(defun log-input (string) + "Log STRING to DEFAULT-FILE-NAME." + (awhen (world-var :log-stream) + (let* (*print-pretty* + (string (if (stringp string) string (car string)))) + (format it "~A -> ~A~%" (format-timestamp (get-universal-time)) string) + (finish-output it)))) + +(defun format-timestamp (universal-time) + (multiple-value-bind (sec min hour date mon year day daylight-p zone) + (decode-universal-time universal-time) + (format nil "[~D-~2,'0D-~2,'0D ~2,'0D:~2,'0D:~2,'0D]" year mon date hour min sec))) + +;; +;; Convienence aliases +;; +(defun logger-alias (arg) + (if (> (length arg) 0) + (start-logging-to arg) + (if (world-var :log-stream) + (disable-logging *world*) + (enable-logging *world*))) + nil) + +(defun start-logging-to (filename) + (awhen (world-var :log-stream) + (disable-logging *world*)) + (setf (world-var :log-file-path) + (list (merge-pathnames filename *default-log-directory*))) + (enable-logging *world*)) + +(add-hook 'start-logging-hook :start-logging-hook) +(add-hook 'stop-logging-hook :stop-logging-hook) +(add-hook 'log-output :output-from-server-hook) +(add-hook 'log-input :input-from-client-hook) + +(add-keyword 'logger-alias "log")
\ No newline at end of file |