我有一个应用程序,可以通过prn
将Clojure地图记录到日志文件中。来自日志的设计条目可能是:
{:foo "bar"
:baz [:quux]
:body #<HttpInput org.eclipse.jetty.server.HttpInput@2a4bd173>}
我希望能够将其粘贴到repl中以检查“简单”键和值,但读者会在#<
值上窒息。
CompilerException java.lang.RuntimeException:
Unable to resolve symbol: HttpInput in this context
我不关心#<
值。有没有办法让读者忽略它们,或者让我有机会直接处理它们(有点像*data-readers*
)?
答案 0 :(得分:3)
据我所知,如果不手动编辑日志输出,就无法使这个输入与阅读器一起工作。 prn
对于无法识别的数据类型的默认行为是输出以下格式:
#<(.getSimpleName (class o)) (str o)>
#
字符表示读取器宏,它调度以下字符,<
字符表示不可读的格式;读者在遇到这种情况时总会抛出异常。
您最好的选择可能是更改应用程序的日志记录,打印更具可读性的内容。一种方法是为目标类提供print-method
多方法的实现,例如:
(defmethod print-method org.eclipse.jetty.server.HttpInput [o w]
(print-method {:type "HttpInput"
:request-uri (-> o ._connection .getRequest .getUri str)}
w))
(这可能不适用于受保护的字段_connection
,但希望您能了解到这一点。)