7max / log4cl Goto Github PK
View Code? Open in Web Editor NEWCommon Lisp logging framework, modeled after Log4J
License: Apache License 2.0
Common Lisp logging framework, modeled after Log4J
License: Apache License 2.0
On Thu, May 10, 2012 at 5:25 PM, Alistair Gee ...... wrote:
Hi,
I am using log4cl (latest via quicklisp) and SBCL 1.0.55 on 64-bit Linux.
The following will cause a memory fault:
(defun foo ()
(handler-case
(assert nil)
(error (e)
(log:i e))))
CL-USER> (foo)
CORRUPTION WARNING in SBCL pid 15228(tid 140698642544384):
Memory fault at 336 (pc=0x100e41a963, sp=0x7ff6f49bdbd0)
The integrity of this image is possibly compromised.
Continuing with fingers crossed.
I am actually trying to print out an error that I've defined as:
;;; define my own error type
(define-condition my-error (error)
((text :initarg :text :reader text :type (or null string)))
(:report (lambda (c s)
(declare (type stream s))
(format s "my error: ~a" (text c)))))
;;; (format) can print out the error without crashing.
(defun foo2 ()
(handler-case
(assert nil nil 'my-error :text "hello")
(error (e)
(format t "I can print out the error via (format): ~A" e))))
;;; However, (log:i) will crash SBCL when attempting to print out the error.
(defun foo3 ()
(handler-case
(assert nil nil 'my-error :text "hello")
(error (e)
(log:i e))))
This is certainly a SBCL bug, but I am not sure where to start looking. Let me know what how I can help you track this down.
I'm getting this when doing
(defpackage :turtl
...)
(in-package :turtl)
(log:config '(turtl) :debu1)
Gives me:
Logger named #1=(TURTL) not found. If you want to create it, use (LOG:CONFIG (LOG:LOGGER #1#) ...) instead
Oddly enough, if I change the load order in the .asd to make the (log:config '(turtl) :debu1)
later, it works. Is this possibly some kind of race condition between the package being declared and the log:config
call?
Thanks for the great library. I'm using it in all my new projects.
Recent versions of ASDF do not export GETENV or any utilities anymore.
This breaks log4cl.
The fix is to either
1- use ASDF-UTILS that exports all these utilities, or
2- use internal symbols like ASDF::GETENV if you really can't or won't depend on ASDF-UTILS.
Please test with a new ASDF (such as 2.25), without loading any system-provided ASDF via require.
My apologies for the breakage.
(log:info "hello")
=> works
(log:info (with-output-to-string (s) (format s "hello")))
=>
value "hello" is not of the expected type LOG4CL-IMPL::LOGGER.
[Condition of type TYPE-ERROR]
This is CCL-1.8, Windows.
Issue, if you do not use some package, but put a method on a generic function in it like so:
(in-package :some-package)
(defmethod asdf:operate (....)
(log:info "blah"))
Then message will come out as
<INFO> [time] some-package (operate ...) - blah
And going to the left click go to source fails, because it there is no (FIND-SYMBOL "OPERATE")
in some-package
Solution would be to change naming to use prin1 for symbols instead of princ,
this would change automatic naming to produce some-package.asdf:operate as the logger name, and message will be
<INFO> [time] some-package (asdf:operate ...) - blah
CL-USER> (defun x () (log:info "foo"))
X
CL-USER> (defun y () (log:info "bar ~A" (x)))
Y
CL-USER> (log:config :info)
; No value
CL-USER> (y)
Recursive lock attempt #<SB-THREAD:MUTEX "Anonymous lock" owner: #<SB-THREAD:THREAD "repl-thread" RUNNING {100AC7FFA3}>>.
[Condition of type SIMPLE-ERROR]
Restarts:
0: [RETRY] Retry SLIME REPL evaluation request.
1: [*ABORT] Return to SLIME's top level.
2: [ABORT] abort thread (#<THREAD "repl-thread" RUNNING {100AC7FFA3}>)
Backtrace:
0: (SB-THREAD::%TRY-MUTEX #<unavailable argument> #<unavailable argument>)
1: (SB-THREAD:GRAB-MUTEX #<SB-THREAD:MUTEX "Anonymous lock" owner: #<SB-THREAD:THREAD "repl-thread" RUNNING {100AC7FFA3}>> :WAITP T :TIMEOUT NIL)
2: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-THREAD::CALL-WITH-MUTEX))
3: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN LOG4CL-IMPL:APPENDER-DO-APPEND) {7FFF87B5CE8B}> #<SB-THREAD:MUTEX "Anonymous lock" owner: #<SB-THREAD:THREAD "repl-thread" R..
4: ((:METHOD LOG4CL-IMPL:APPENDER-DO-APPEND :AROUND (LOG4CL-IMPL:SERIALIZED-APPENDER T T T)) #<LOG4CL-IMPL:CONSOLE-APPENDER {100C522BC3}> #<LOG4CL-IMPL::FILE-LOGGER CL-USER.X NIL {100F60B983}> 4 #<FUNCTI..
5: ((LABELS LOG4CL-IMPL::LOG-TO-LOGGER-APPENDERS :IN LOG4CL-IMPL::LOG-WITH-LOGGER) #<LOGGER +ROOT+ {100BAA2E83}> #<LOG4CL-IMPL::FILE-LOGGER CL-USER.X NIL {100F60B983}> 4 #<FUNCTION (FLET "log-stmt16" :IN..
6: ((LABELS LOG4CL-IMPL::LOG-TO-LOGGER-APPENDERS :IN LOG4CL-IMPL::LOG-WITH-LOGGER) #<LOG4CL-IMPL::FILE-LOGGER CL-USER NIL {100F60B083}> #<LOG4CL-IMPL::FILE-LOGGER CL-USER.X NIL {100F60B983}> 4 #<FUNCTION..
7: ((LABELS LOG4CL-IMPL::LOG-TO-LOGGER-APPENDERS :IN LOG4CL-IMPL::LOG-WITH-LOGGER) #<LOG4CL-IMPL::FILE-LOGGER CL-USER.X NIL {100F60B983}> #<LOG4CL-IMPL::FILE-LOGGER CL-USER.X NIL {100F60B983}> 4 #<FUNCTI..
8: (LOG4CL-IMPL::LOG-WITH-LOGGER #<LOG4CL-IMPL::FILE-LOGGER CL-USER.X NIL {100F60B983}> 4 #<FUNCTION (FLET "log-stmt16" :IN X) {100EF48F7B}> #<PACKAGE "COMMON-LISP-USER">)
9: (X)```
As logging is used in more and more complex systems, this sometimes led to terrible (and unexpected) crashes.
Hey! I love this software, it really changed my logging life!
Recently I switched to Sly from Slime and I am struggling to get the interactive features and colorization working. Does any body know if someone already approached this, or if not any suggestions for me to start a contribution like 'log4sly'?
Thanks in advance
The emacs support is delightful!
In this example...
cl-user> (log:info '(x y z) "yogurt for breakfast!")
<INFO> [08:51:06] (x y z) - yogurt for breakfast!
; No value
cl-user>
It seems to think yogurt is a function, but you and I know it's a dairy product.
Further, if you place the cursor on the close paren, well between the "z" and ")" and then bring up the context menu you get an ecase error. Yeah, ecase!
I'm using the latest SBCL from git, and when I build log4cl, I get this error:
; caught ERROR:
; READ error during COMPILE-FILE: Lock on package SB-C violated when interning HAIRY-ARG-PROCESSOR while in package LOG4CL-IMPL.
I have several packages with different log levels writing to different files and I create a file appender for root logger which should write all ERROR messages from all loggers to error.log. Currently messages are only filtered by the logger they're initiated at so if one package's logger is set to DEBUG root logger would write debug messages to error.log even if it's set to ERROR.
Here's my (log:config)
ROOT, ERROR
|
+-(1)-#<DAILY-FILE-APPENDER {131D9559}>
| with #<PATTERN-LAYOUT {EC39B39}>
| :conversion-pattern
| "%&%<{nopretty}%I%;<;;>;-5p [%D{%H:%M:%S}] %g{}{}{:downcase} (%C{}{ }{:downcase})%2.2N - %:_%m%>%n"
| :immediate-flush NIL
| :flush-interval 1
| :stream-owner T
| :rollover-check-period 60
| :name-format #P"/home/naryl/eshop-logs/eshop.log"
| :backup-name-format NIL
| :utc NIL
| :message-count 2962
|
+-ESHOP, DEBUG
| |
| +-(1)-#<THIS-CONSOLE-APPENDER {131E4B31}>
| with #<PATTERN-LAYOUT {BB97C89}>
| :conversion-pattern
| "%&%<{nopretty}%I%;<;;>;-5p [%D{%H:%M:%S}] %g{}{}{:downcase} (%C{}{ }{:downcase})%2.2N - %:_%m%>%n"
| :immediate-flush NIL
| :flush-interval 1
| :stream-owner NIL
| :stream #<SB-SYS:FD-STREAM for "the terminal" {B322409}>
| :message-count 2962
|
+-SEARCH-TIPS, TRACE
|
+-(1)-#<DAILY-FILE-APPENDER {11BC4DE9}>
with #<PATTERN-LAYOUT {11BC2651}>
:conversion-pattern
"%&%<%I%;<;;>;-5p [%D{%H:%M:%S}] %g{}{}{:downcase}%:; ;F (%C{}{ }{:downcase})%2.2N - %:_%m%>%n"
:immediate-flush NIL
:flush-interval 1
:stream-owner T
:rollover-check-period 60
:name-format "/home/naryl/eshop-logs/search-tips.log"
:backup-name-format NIL
:utc NIL
:message-count 0
Search for " theh system"
Currently everything between debug level and package, needs to match log4slime-time-regexp, including thread names. And it seems weird characters in thread names are more common then anticipated.
Split the regexp into two, one for date/time, and one for thread part, and relax the thread/ndc regexp, so it can handle most punctuation
Also change them to (defcustom) instead of defvars.
It would be nice if in addition to controlling the log level of future logging, there was ability to hide and unhide log messages that are already in REPL
Interface could be right-click -> together with log levels, a new choice "Hide".
This needs thought, because if user selects "Hide" new messages from same place would appear in the future. Should these messages still appear? If so, then we have to maintain visibility flag per message in REPL, rather then using invisibility-spec, which may lead to performance problem
And where would "Unhide" go, "Reset children" will also unhide is one option.
Another minimalist solution is simply have "Off+Delete" choice next to "Off", which turns logging off for that category, and permanently erases any existing messages in REPL
There is an often used pattern is Lisp for writing wrappers like this:
(defun call-with-wrapping (thunk)
(unwind-protect
(progn
(log:trace "Wrapping is on")
(funcall thunk))
(log:trace "Wrapping is off")
(defmacro with-wrapping (&body body)
`(call-with-wrapping (lambda () ,@body))
(defun foobar ()
(call-with-wrapping ...))
Currently above results in log category auto-naming making the log category
of package.foobar.call-with-wrapping.lambda
, which is too much information we don't want.
Its possible to fix the above pattern, by adding a logger object argument to call-with-wrapping, and passing the logger object to macro like this.
(defun call-with-wrapping (logger thunk)
(unwind-protect
(progn
(log:trace :logger logger "Wrapping is on")
(funcall thunk))
(log:trace :logger logger "Wrapping is off")
(defmacro with-wrapping (&body body)
`(call-with-wrapping (log:category) (lambda () ,@body))
(defun foobar ()
(call-with-wrapping ...))
But it would be nice if above can be done without such workaround, by adding some syntax sugar to logging macros, that indicate that auto category naming should drop a level, something like (log:trace /// ....)
or (log:trace ***)
to indicate that naming should drop 3 levels
based on
commit d6293f9
Author: Max Mikhanosha [email protected]
compilation with sbcl fails, when it reaches the reference to sb-posix:getpid.
adding a conditional :sb-posix to the system dependencies resolves the problem.
I use the these entries in my .emacs file for emacs 23.4.1:
(load "~/quicklisp/log4slime-setup.el")
(global-log4slime-mode 1)
and I get these two error messages in the messages buffer of emacs/slime:
error in process filter: ad-Orig-slime-repl-emit: Text is read-only
error in process filter: Text is read-only
The two error messages are repeated once for a total of two and then slime is running. I don't know if there are other issues because with the error messages, I comment out the load entries in my .emacs file to disable log4cl.
I'm using the newer github release of slime on a Linux-mint-14-kde distro.
log4cl
is wonderful, THANK YOU!!
Hello.
I have a program which logs to file and console.
log4cl is configured using
(log:config :daily log-file)
On CCL it works as expected.
But on SBCL I see that log file looses two last log messages, while the console shows all the messages.
sbcl-1.0.57-linux-x86
log4cl is from quicklisp 2012-07-03.
Because there is a small error in format-time, log4cl does not output anything all on LispWorks.
In pattern-layout.lisp, the call to decode-universal-time is:
(decode-universal-time ut (if utc-p 0))
When utc-p is nil, decode-universal-time is called with the wrong timezone.
I temporarily fixed this issue by removing the if form:
(decode-universal-time ut 0)
log4cl now works for me.
Thanks for this fine library!
What is going on here?
$ sbcl
* (ql:quickload "log4cl" :silent t)
* (log4cl:start-hierarchy-watcher-thread)
* (LOG4CL-IMPL::SAVE-HOOK)
ERROR - Caught SB-THREAD:JOIN-THREAD-ERROR during
'(LOG4CL-IMPL:STOP-HIERARCHY-WATCHER-THREAD :JOIN-THREAD):
Joining thread failed: thread #<THREAD "Hierarchy Watcher" ABORTED
{10054D0CE3}> did not return normally.;
Continuing.
There isn't much of a focus to keep the SWANK API stable beyond the needs of SLIME itself. Have you considered using Conium instead?
I installed log4cl and log4slime through Quicklisp and executed the install command.
After adding the requested lines to my .emacs file, I get the following error on Emacs launch:
Symbol's function definition is void: org-compatible-face
I'm usually running Emacs on my terminal, but even if I start it in X mode, the error still occurs. The Emacs version is
GNU Emacs 24.3.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.8.1) of 2013-04-29 on eric
and the log4slime version from Quicklisp is
#<SYSTEM log4slime / log4cl-stable-26f358ee-git / quicklisp 2013-06-15>
If there's any additional information on my setup that you need, I'd be happy to provide you with what I can.
Hello,
When running ros install arrival
, I get an error related to log4cl
To load "arrival":
Load 1 ASDF system:
arrival
; Loading "arrival"
..[1/3] System 'arrival' found. Loading the system..
;
; caught ERROR:
; READ error during COMPILE-FILE:
;
; Lock on package SB-C violated when interning LAMBDA-PARENT while in package
; LOG4CL-IMPL.
; See also:
; The SBCL Manual, Node "Package Locks"
;
; (in form starting at line: 99, column: 0, position: 3779)
Aborted during step [1/3].
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD tid=80526 "main thread" RUNNING
{10044A0113}>:
COMPILE-FILE-ERROR while
compiling #<CL-SOURCE-FILE "log4cl" "src" "naming-sbcl">
Any idea where this comes from ?
Thanks
Consider the following:
(with-simple-restart (abort "Abort")
(handler-bind
((error (lambda (condition)
(log:error "caught error: ~A" condition)
(abort))))
(log:info "~A")
:finished))
(log:info "~A")
is obviously wrong since there are not enough format arguments. One would expect this error to be caught and reported by the outer "catch-all" handler-bind
. However, since the format error is signaled while in appender-do-append
, the (log:error "caught error: ~A" condition)
code re-enters appender-do-append
and causes a recursive lock attempt. As a consequence, a relatively harmless format error in logging code escalates even beyond the intended "catch-all" error handling.
I can imagine two possible improvements:
<INFO> [20:08:12] cl-user () - <<error printing log message>>
. This approach would similar to the usual <SOME-CLASS <<error printing object>> >
-behavior. This solution would not change the control flow, i.e. return :finished
in the above example, since no error would be signaled.<ERROR> [20:08:12] cl-user () -
caught error: error in FORMAT: required argument missing
~A
^
This solution would change the control flow since the format-error would still be signaled.
*debug-log-statements?*
:)Attempting to call the project-options macro as log4cl:project-options
raises the following condition (at least on sbcl):
The symbol "PACKAGE-OPTIONS" is not external in the LOG4CL-IMPL package.
However calling it as log4cl::project-options
works fine.
I also get that error if I try to describe 'log4cl:project-options
, but agin describing 'log4cl::project-options
works fine. I have no idea what would cause this to happen.
(let ((stream 123)) (log:info stream))
does not work as expected.
Output:
<INFO> [17:25:02] cl-user () - STREAM: #<SB-PRETTY:PRETTY-STREAM {BCDFF21}>
(logging-enabled-for)
, consult both regular log level and binary log level.appender-do-append
generic will gain an extra argument, orig-args-vector
orig-args-vector
will be initialized, for log statements with the format control string, as all arguments to the format call. For expression logging , it will be all arguments in order.This will allow people to write binary binary appenders, that examine the actual arguments, and not their textual representation..
One example would be writing the the binary representation of each log statement arguments into a binary log file, with additional tools that analyze the file. This method should be much faster both at runtime, and at analyzing part, due to no need for formatting arguments into text
When point is inside of a method like (defmethod blah ((a a-type) (b (eql 42))
the Log4CL menubar and C-c C-g d
show category as blah a-type
. It should be blah a-type 42
(ql:quickload :log4slime)
fails (I am attaching the stack-trace). All other packages load fine (including log4cl
). I am using Emacs 24.5.1 with SLIME 2.14 and Clozure CL 1.9.
The value (SWANK-LOADER::SWANK
SWANK-LOADER::BACKEND) is not of the expected type (OR
STRING
SYMBOL
CHARACTER).
[Condition of type TYPE-ERROR]
Restarts:
0: [TRY-RECOMPILING] Recompile swank-loader and try loading it again
1: [RETRY] Retry loading FASL for #<SWANK-LOADER-FILE "swank" "swank-loader">.
2: [ACCEPT] Continue, treating loading FASL for #<SWANK-LOADER-FILE "swank" "swank-loader"> as having been successful.
3: [RETRY] #<error printing RESTART #xB56ED6EE>
4: [CLEAR-CONFIGURATION-AND-RETRY] #<error printing RESTART #xB56ED716>
5: [ABORT] Give up on "log4slime"
--more--
Backtrace:
0: (CCL::COPY-STRING-ARG (SWANK-LOADER::SWANK SWANK-LOADER::BACKEND))
1: (STRING-DOWNCASE (SWANK-LOADER::SWANK SWANK-LOADER::BACKEND) :START 0 :END NIL)
2: ((:INTERNAL SWANK-LOADER::SRC-FILES) (SWANK-LOADER::SWANK SWANK-LOADER::BACKEND))
3: (SWANK-LOADER::SRC-FILES ((SWANK-LOADER::SWANK SWANK-LOADER::BACKEND) SWANK-LOADER::METERING (SWANK-LOADER::SWANK SWANK-LOADER::CCL) (SWANK-LOADER::SWANK SWANK-LOADER::GRAY) ..))) #P"/home/egarrulo/..
4: (SWANK-LOADER::COMPILE-CONTRIBS :SRC-DIR #P"/home/egarrulo/emacs/lisp/site-lisp/slime/slime-2.14/contrib/" :FASL-DIR #P"/home/egarrulo/.cache/slime/fasl/2015-06-01/clozure-version_1.9-r15756__(..
5: (SWANK::RUN-HOOK (SWANK-LOADER::COMPILE-CONTRIBS SWANK::INIT-LOG-OUTPUT))
6: (CCL::%%BEFORE-AND-AFTER-COMBINED-METHOD-DCODE (NIL #<STANDARD-METHOD ASDF/ACTION:PERFORM (ASDF/LISP-ACTION:LOAD-OP SWANK-LOADER::SWANK-LOADER-FILE)> . -312467164))
7: (CCL::%%STANDARD-COMBINED-METHOD-DCODE ((#<STANDARD-METHOD ASDF/ACTION:PERFORM :BEFORE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)>) ..))) -312467164)
8: (NIL #<Unknown Arguments>)
9: (CCL::%CALL-NEXT-METHOD (NIL #<STANDARD-METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (T T)> . -312467097))
10: (#<STANDARD-METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (ASDF/LISP-ACTION:LOAD-OP ASDF/LISP-ACTION:CL-SOURCE-FILE)> #<LOAD-OP > #<SWANK-LOADER-FILE "swank" "swank-loader">)
11: (CCL::%CALL-NEXT-METHOD (NIL #<STANDARD-METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS (T T)> . -312467097))
12: (#<STANDARD-METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)> #<LOAD-OP > #<SWANK-LOADER-FILE "swank" "swank-loader">)
13: (CCL::%%STANDARD-COMBINED-METHOD-DCODE (#<STANDARD-METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)> ..)) -312467097)
14: (NIL #<Unknown Arguments>)
15: (#<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN (LIST)> ((#<COMPILE-OP > . #<SYSTEM "alexandria">) (#<COMPILE-OP > . #<MODULE "bordeaux-threads" "src">) (#<COMPILE-OP > . #<SYSTEM "bordeaux-threads">) ..)))..
16: (CCL::%CALL-NEXT-METHOD (NIL #<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN (LIST)> . -312467036))
17: (CCL::CALL-WITH-COMPILATION-UNIT #<COMPILED-LEXICAL-CLOSURE (:INTERNAL CCL::WITH-COMPILATION-UNIT-BODY (ASDF/PLAN:PERFORM-PLAN :AROUND (T))) #xB56ED52E> :OVERRIDE NIL)
18: (#<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)> ((#<COMPILE-OP > . #<SYSTEM "alexandria">) (#<COMPILE-OP > . #<MODULE "bordeaux-threads" "src">) ..))))
19: (CCL::%%STANDARD-COMBINED-METHOD-DCODE (#<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)> #<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN (LIST)>) -312467036)
20: (NIL #<Unknown Arguments>)
21: (CCL::%CALL-NEXT-METHOD (NIL #<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN (T)> . -312466983))
22: (CCL::CALL-WITH-COMPILATION-UNIT #<COMPILED-LEXICAL-CLOSURE (:INTERNAL CCL::WITH-COMPILATION-UNIT-BODY (ASDF/PLAN:PERFORM-PLAN :AROUND (T))) #xB56ED5B6> :OVERRIDE NIL)
23: (#<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)> #<ASDF/PLAN:SEQUENTIAL-PLAN #x18E755E6>)
24: (CCL::%%STANDARD-COMBINED-METHOD-DCODE (#<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)> #<STANDARD-METHOD ASDF/PLAN:PERFORM-PLAN (T)>) -312466983)
25: (NIL #<Unknown Arguments>)
26: (#<STANDARD-METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)> #<LOAD-OP :VERBOSE NIL> #<SYSTEM "log4slime"> :VERBOSE NIL)
27: (CCL::%CALL-NEXT-METHOD ((NIL) #<STANDARD-METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)> #<LOAD-OP :VERBOSE NIL> #<SYSTEM "log4slime"> :VERBOSE NIL))
28: ((:INTERNAL (ASDF/OPERATE:OPERATE :AROUND (T T))))
29: (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)> #<LOAD-OP :VERBOSE NIL> #<SYSTEM "log4slime"> :VERBOSE NIL)
30: (CCL::%%STANDARD-COMBINED-METHOD-DCODE (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)> (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :BEFORE #> #<#>) NIL ..))) -312466911)
31: (NIL #<Unknown Arguments>)
32: (CCL::%CALL-NEXT-METHOD ((NIL) #<STANDARD-METHOD ASDF/OPERATE:OPERATE (SYMBOL T)> ASDF/LISP-ACTION:LOAD-OP "log4slime" :VERBOSE NIL))
33: ((:INTERNAL (ASDF/OPERATE:OPERATE :AROUND (T T))))
34: (ASDF/CACHE:CALL-WITH-ASDF-CACHE #<COMPILED-LEXICAL-CLOSURE (:INTERNAL (ASDF/OPERATE:OPERATE :AROUND (T T))) #x18E73AC6> :OVERRIDE NIL :KEY NIL)
35: (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)> ASDF/LISP-ACTION:LOAD-OP "log4slime" :VERBOSE NIL)
36: (CCL::%%STANDARD-COMBINED-METHOD-DCODE (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)> (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :BEFORE #>) NIL ..) -312466828)
37: (NIL #<Unknown Arguments>)
38: (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)> ASDF/LISP-ACTION:LOAD-OP "log4slime" :VERBOSE NIL)
39: (CCL::%%STANDARD-COMBINED-METHOD-DCODE (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :AROUND (T T)> (#<STANDARD-METHOD ASDF/OPERATE:OPERATE :BEFORE #>) NIL ..) -312466793)
40: (NIL #<Unknown Arguments>)
41: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<COMPILED-LEXICAL-CLOSURE (:INTERNAL QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) #x18E73FF6>)
42: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "log4slime" :PROMPT NIL)
When I add log4slime to my emacs config, I have the following problems:
When I start slime I get a bunch of errors:
WARNING: SWANK-LOADER also exports the following symbols:
(SWANK-LOADER:*FASL-DIRECTORY* SWANK-LOADER:DUMP-IMAGE SWANK-LOADER:INIT SWANK-LOADER:*SOURCE-DIRECTORY*)
See also:
The ANSI Standard, Macro DEFPACKAGE
The SBCL Manual, Variable SB-EXT:*ON-PACKAGE-VARIANCE*
STYLE-WARNING: redefining SWANK-LOADER::Q in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::LISP-VERSION-STRING in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::UNIQUE-DIR-NAME in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::FILE-NEWER-P in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::SLIME-VERSION-STRING in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::DEFAULT-FASL-DIR in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::BINARY-PATHNAME in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::HANDLE-SWANK-LOAD-ERROR in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::COMPILE-FILES in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::LOAD-USER-INIT-FILE in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::LOAD-SITE-INIT-FILE in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::SRC-FILES in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::APPEND-DIR in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::CONTRIB-DIR in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::LOAD-SWANK in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::DELETE-STALE-CONTRIB-FASL-FILES in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::COMPILE-CONTRIBS in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::LOADUP in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::SETUP in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::STRING-STARTS-WITH in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::LIST-SWANK-PACKAGES in DEFUN
STYLE-WARNING: redefining SWANK-LOADER::DELETE-PACKAGES in DEFUN
STYLE-WARNING: redefining SWANK-LOADER:INIT in DEFUN
STYLE-WARNING: redefining SWANK-LOADER:DUMP-IMAGE in DEFUN
WARNING: Not reloading SWANK. Package already exists.
And I don't get any syntax highlighting/fontification.
Does the load command need to be in a specific place in my emacs configuration?
Is it intentional?
See also cl-test-grid/cl-test-grid#16
Since this repository is abandoned and unmaintained it has been forked here: https://github.com/sharplispers/log4cl. It still happens to be the first result in searches since it is the original repository and many programmers report issues mistakenly here.
The version from sharplispers repository is the one present on Quicklisp and has numerous bugs fixed. If the author decides to maintain this repository again we will be happy to backport fixes. Please report new issues here: https://github.com/sharplispers/log4cl/issues.
Thank you.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.