如何为jackrabbit-standalone-2.6.0.jar配置记录器

时间:2013-04-09 07:59:33

标签: log4j slf4j jackrabbit

我正在尝试使用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

1 个答案:

答案 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的命令将会很有帮助。