anchor.diff:        (format os "(defvar *log-root* #p\"logs\")~%~%")
         (format os "(defun init-logging()~%")
         (format os "  (log5:start-sender 'http-access-log (rotating-log-sender ~%")
  -      (format os "  				       :interval (* 30 60) ;; new log every 30 minutes~%")
  -      (format os " 				       :max 5~%")
  -      (format os " 				       :location (merge-pathnames \"~a-access.log\" *log-root*))~%" package-name)
  -      (format os " 		     :category-spec `(http-access)~%")
  -      (format os " 		     :output-spec `(log5:message))~%")
  +      (format os "                                     :interval (* 30 60) ;; new log every 30 minutes~%")
  +      (format os "                                     :max 5~%")
  +      (format os "                                     :location (merge-pathnames \"~a-access.log\" *log-root*))~%" package-name)
  +      (format os "                   :category-spec `(http-access)~%")
  +      (format os "                   :output-spec `(log5:message))~%")
         (format os "  (log5:start-sender 'http-messages-log (rotating-log-sender ~%")
  -      (format os "  				       :interval (* 30 60) ;; new log every 30 minutes~%")
  -      (format os " 				       :max 5~%")
  -      (format os " 				       :location (merge-pathnames \"~a-messages.log\" *log-root*))~%" package-name)
  -      (format os " 		     :category-spec `(http-message)~%")
  -      (format os " 		     :output-spec `(log5:message)))~%")
  +      (format os "                                     :interval (* 30 60) ;; new log every 30 minutes~%")
  +      (format os "                                     :max 5~%")
  +      (format os "                                     :location (merge-pathnames \"~a-messages.log\" *log-root*))~%" package-name)
  +      (format os "                   :category-spec `(http-message)~%")
  +      (format os "                   :output-spec `(log5:message)))~%")
         )))
   
   (defmethod generate-skeleton-component ((skeleton skeleton) (component (eql :urls)))
  
positive.code: (defgeneric generate-skeleton-component (skeleton component)
    (:documentation "Generate the files necessary for the indicated component and skeleton"))
  
  (defmethod generate-skeleton-component ((skeleton skeleton) (component symbol)) 
    "If no such component exists for the skeleton, do nothing"
    component)
  
  
negative.code: 
  (defgeneric skeleton-location (skeleton)
    (:method ((skeleton skeleton))
      (merge-pathnames (make-pathname :directory `(:relative ,(string-downcase (string (for-package skeleton)))))
                       (location-pathname (in-location skeleton)))))
  
  (defmacro with-skeleton-file ((stream skeleton path) &rest body)
    "Write a string representation of content to the
  location specified path relative to the skeleton's base director"
    `(with-open-file (,stream (merge-pathnames ,path (skeleton-location ,skeleton))
                              :direction :output
                              :if-does-not-exist :create)
       ,@body))
  
  (defun generate-skeleton-file (skeleton path content)
    (declare (type skeleton skeleton)
             (type pathname path)
             (type content list))
    (with-open-file (os (merge-pathnames path (skeleton-location skeleton))
                        :direction :output
                        :if-does-not-exist :create)
      (let ((*print-case* :downcase)
            (*package* (find-package :asdf)))
        (loop for item in content
           do (print item os)
           do (pprint-newline :mandatory)
           do (pprint-newline :mandatory)))))
  
  (defgeneric generate-skeleton (skeleton)
    (:documentation "Generate all the files necessary for a project using hh-web")
  