Lisp Game Programming 再履修 <その8> アクセスログ プチ整形
ささくれだった気持ちで書いていたせいか、ちょっと見逃していた。
クライアントサーバ型ゲームの実験をしていたら気がついたんだけど、前回のプログラムコードではアクセスが連続するとこんな感じになる。
醜い(見にくい)じゃん!
なので、Windows 用にプチ整形実施。
これを
;; Step2 <Access Log> ;; ----------------------------------------------------------------------------------------------- (defparameter *log-file* "C:\\work\\Server-log.log") (defun Log-event (strings &rest args) ; <-- attention! args to list (multiple-value-bind (second minute hour date month year day daylight-p zone) (decode-universal-time (get-universal-time)) ; get time (declare (ignore day daylight-p zone)) ; need not day,daylight-p,zone (let ((message (apply #'format nil strings args))) ; message <-- format function (with-open-file (stream *log-file* ; open log-file :direction :output ; output :if-does-not-exist :create ; if not exist create :if-exists :append) ; if exist append (format stream "~4,'0D-~2,'0D-~2,'0D ~2,'0D:~2,'0D:~2,'0D ~A ~%" year month date hour minute second ; output Y M D H M S message message)))))
こんな感じに整形!
本当にプチです。へへ!
;; Step2 <Access Log> ;; ----------------------------------------------------------------------------------------------- (defparameter *log-file* "C:\\work\\Server-log.log") (defun Log-event (strings &rest args) ; <-- attention! args to list (multiple-value-bind (second minute hour date month year day daylight-p zone) (decode-universal-time (get-universal-time)) ; get time (declare (ignore day daylight-p zone)) ; need not day,daylight-p,zone (let ((message (apply #'format nil strings args))) ; message <-- format function (with-open-file (stream *log-file* ; open log-file :direction :output ; output :if-does-not-exist :create ; if not exist create :if-exists :append) ; if exist append (format stream "~4,'0D-~2,'0D-~2,'0D ~2,'0D:~2,'0D:~2,'0D ~A~C~C" year month date hour minute second ; output Y M D H M S message message #\return #\linefeed))))) ; output CR/LF for windows!
注)ログファイルの名前が違うのは、実験用のプログラムコードに組み込み、名前を変更して使用しているため。
すると、ちょっとは見やすくなったかな?
でも、なんかどうも、うーん。
~% の動作のため、Unix系OS( LF ) 、Windows( CR/LF )、Mac( CR )の違いや処理系の違いを考慮して「場合分け」して書くのは「美しく」ないよね?
ポータビリティがプログラムコードの「キモ」だと思うけど。