我正在尝试使用jackrabbit-standalone-2.6.0.jar使用程序设置日志记录。这个档案包含一些slf4j-packages(org.slf4j,org.slf4j.helpers,org.slf4j.impl,org.slf4j.spi),但据我所知,没有日志记录框架。但是当我添加slf4j-log4j12-1.7.2.jar时,我收到了消息:
SLF4J:发现绑定 [JAR:文件:/ d:/Anwendungen/EclipsePlugins/Jackrabbit/jackrabbit-standalone-2.6.0.jar /org/slf4j/impl/StaticLoggerBinder.class] SLF4J:发现绑定 [罐:文件:/ d:/Anwendungen/EclipsePlugins/slf4j-1.7.2/slf4j-1.7.2/slf4j-log4j12-1.7.2.jar /org/slf4j/impl/StaticLoggerBinder.class]
有没有机会看到这里使用了哪种实施者?
我想配置记录器。现在它将大量的DEBUG消息写入名为“jackrabit.log_IS_UNDEFINED”的文件中,我迫切需要压制它。互联网上有几个提示可以设置记录器,但我并不完全明白我需要做什么。 类“DOMConfigurator”和“PropertyConfigurator”在包中不可用,但是当添加例如“slf4j-log4j12-1.7.2.jar”时,我得到上述消息。所以我无法在程序中初始化记录器。 据说将配置XML添加到类路径中。我试过这个(在Eclipse中我添加了将XML包含在BuildPath中的文件夹,然后我从我的XML-File创建了一个jar文件并将这个jar文件添加到了BuildPath中)但它没有任何区别。
我在http://logging.apache.org/log4j/1.2/manual.html中阅读了“默认初始化过程”的描述,但必须说明我根本不理解它。 这是什么意思: 2.将资源字符串变量设置为log4j.configuration系统属性的值。指定默认初始化文件的首选方法是通过log4j.configuration系统属性。如果未定义系统属性log4j.configuration,则将字符串变量资源设置为其默认值“log4j.properties”。 我在哪里指定资源字符串变量?
我的log4j.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n" />
</layout>
</appender>
<root>
<priority value="info" />
<appender-ref ref="Console" />
</root>
</log4j:configuration>
非常欢迎以编程方式配置记录器或进行默认初始化的任何想法。
Ulrich
答案 0 :(得分:0)
从版本1.6.6开始,如果在类路径上找到多个绑定,SLF4J将输出它绑定的框架/实现类的名称。在“SLF4J: Found binding
”行之后,应该有一行以:
"SLF4J: Actual binding is of type []"
你错过了这条线吗?
jackrabbit-standalone-2.6.0.jar的内容表明它的回溯作为日志记录框架。 jackrabbit-standalone-2.6.0.jar文件还附带了一个logback.xml配置文件。
这是logback.xml文件:
<configuration>
<appender name="jackrabbit" class="ch.qos.logback.core.FileAppender">
<file>${jackrabbit.log}</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern>
</encoder>
</appender>
<appender name="jetty" class="ch.qos.logback.core.FileAppender">
<file>${jetty.log}</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n</pattern>
</encoder>
</appender>
<logger name="org.mortbay.log" level="${log.level}"
additivity="false">
<appender-ref ref="jetty"/>
</logger>
<root level="${log.level}">
<appender-ref ref="jackrabbit"/>
</root>
</configuration>
与Unix shell一样,在logback.xml中${} designates a variable内的任何字符串。
查看上面的logback.xml文件,我们可以看到变量$ {jackrabbit.log},$ {jetty.log}和“$ {log.level}”被引用。这些变量由prepareServerLog设置( )Main class of jackrabbit-standalone 2中的方法。除非在命令行上给出“-i”或“--cli”选项,否则调用prepareServerLog()。你是否用-i或 - 调用jackrabbit CLI?
无论如何,在这里发布由SLF4J打印的所有消息以及用于启动jackrabbit-standalone的命令将会很有帮助。