0

我正在尝试使用 jackrabbit-standalone-2.6.0.jar 的程序设置日志记录。该档案包含一些 slf4j 包(org.slf4j、org.slf4j.helpers、org.slf4j.impl、org.slf4j.spi),但据我所知没有日志框架。但是当我添加 slf4j-log4j12-1.7.2.jar 时,我收到以下消息:

SLF4J:在 [jar:file:/D:/Anwendungen/EclipsePlugins/Jackrabbit/jackrabbit-standalone-2.6.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定 SLF4J:在 [jar:file 中找到绑定:/D:/Anwendungen/EclipsePlugins/slf4j-1.7.2/slf4j-1.7.2/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

有没有机会看看这里使用了哪种实施者?

我想配置记录器。现在它将大量的调试消息写入一个名为“jackrabit.log_IS_UNDEFINED”的文件,我迫切需要抑制它。在互联网上有几个提示建议设置记录器,但我不完全明白我需要做什么。“DOMConfigurator”和“PropertyConfigurator”类在包中不可用,但是当添加例如“slf4j-log4j12-1.7.2.jar”时,我得到了上述消息。所以我无法在我的程序中初始化记录器。据说将配置 XML 添加到类路径中。我尝试了这个(在 Eclipse 中,我将包含 XML 的文件夹添加到 BuildPath,然后我从我的 XML 文件创建了一个 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>

非常欢迎以编程方式或默认初始化配置记录器的任何想法。

乌尔里希

4

1 回答 1

0

从版本 1.6.6 开始,如果在类路径上找到多个绑定,SLF4J 将输出它绑定的框架/实现类的名称。在 " SLF4J: Found binding" 行之后,应该有一行以:

"SLF4J: Actual binding is of type []"

你错过了那条线吗?

jackrabbit-standalone-2.6.0.jar 的内容表明它附带 logback 作为日志框架。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 中${} 中的任何字符串都指定一个 variable

Looking at the logback.xml file above, we can see that the variables ${jackrabbit.log}, ${jetty.log} and "${log.level} are referenced. These variables are set by the prepareServerLog() method in Main class of jackrabbit-standalone 2. The prepareServerLog() is invoked unless the "-i" or "--cli" option is given on the command line. Are you invoking jackrabbit with -i or --cli?

Anyway, it would be helpful to post here all messages printed by SLF4J as well the command you are using to launch jackrabbit-standalone.

于 2013-04-09T09:07:27.977 回答