2014-08-28 100 views
1

即使我将它放在每个源文件夹中,或者使用-Dlogback.configurationFile=C:\Users\dell\Documents\Corr\conf\logback.xml作为程序参数或vm参数,我仍然无法使用logback.xml文件。但是,它没有工作。为什么?为什么?配置logback失败 - 为什么

我应该在哪里放这个文件,以便它被检测到?

我做了什么;

logback.xml

<configuration> 
    <appender name ="FileAppender" 
     class="ch.qos.logback.core.FileAppender"> 


     <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
      <level>   INFO </level> 
      <onMatch>  ACCEPT </onMatch> 
      <onMismatch> DENY </onMismatch> 
     </filter> 

     <property file="conf/variables.properties" /> 

     <file> ${HOME}/build/log/corr.log </file> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern> 
       ${HOME}/build/log/%d{yyyy/MM/dd}.%i.log 
      </fileNamePattern> 

      <timeBasedFileNamingAndTriggeringPolicy 
       class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize> 2MB </maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 

     <encoder> 
      <charset>UTF-8</charset> 
      <pattern> 
       %date{yyyy-MM-dd HH:mm:ss.SSS} 
       %level{5} 
       [%thread] 
       %class{0}.%method at %line 
       %msg 
       %n 
       %ex{full} 
       %n 
      </pattern> 
     </encoder> 
    </appender> 

    <root level="DEBUG"> 
      <appender-ref ref="FileAppender" /> 
    </root> 
</configuration> 

属性文件; variables.properties

HOME=C:\Users\dell\Documents\Corr 

项目层次

Corr 
    | - - src 
      | - - CorrAnaly 
        | - - main.java 
    | - - testSrc 
    | - - build 
      | - - log 
    | - - bin 
    | - - conf 
      | - - logback.xml 
      | - - variables.properties 

我哪里有下的主要类项目的是在包(把logback.xml

  • 直接src文件夹下
  • 直接在main.java附近)
  • Corr folder

所有这些都没有工作。另外,我尝试使用conf文件夹作为源文件夹。我已经声明它并使用它,但没有奏效。

帮我弄清楚为什么logback没有检测到我的文件。我应该怎么做才能使用Logback功能?

环境:Windows 7,Eclipse的靛蓝

UPDATE

为了运行应用程序,我使用;

  • Eclipse中运行Java应用程序
  • ivyDe解决依赖

我ivy.xml文件

<ivy-module version="2.0"> 
    <configurations defaultconfmapping="runtime->compile">  
     <conf name="compile" /> 
     <conf name="test" /> 
     <conf name="runtime"  
       extends="compile" /> 
    </configurations> 
    <dependencies>   
     <dependency org="SLF4J" name="slf4j-api-1.7.7" rev="1.7.7" 
          conf="compile->default"/> 
     <dependency org="LOGBack" name="logback-core-1.1.2" rev="1.1.2" 
          conf="runtime->default"/> 
     <dependency org="SLF4J" name="slf4j-jdk14-1.7.7" rev="1.7.7" 
          conf="runtime->default"/> 
    </dependencies> 
</ivy-module> 

更新2 我也试过用简单的情况下logback.xml我的第一个配置不起作用。即使对于简单的logback.xml情况它也没有工作;

<appender name ="ConsoleAppender" 
    class="ch.qos.logback.core.ConsoleAppender"> 

    <encoder> 
     <charset> UTF-8 </charset> 
     <pattern>%-5level [%thread] %class{0}.%method at line %line --%message%n%ex</pattern> 
    </encoder> 
</appender> 

<root level="DEBUG"> 
     <appender-ref ref="ConsoleAppender" /> 
</root> 

更新3

从昨晚开始,我已经尝试了一堆东西,最后在源代码中,我可以从getClass().getResource("/logback/logback.xml").toURI().toString()获得不空的结果。但是,仍然会调用默认的logback.xml。

仓结构

bin 
| - - Corr 
| - - conf 
     | - - logback.xml 

我已经在Eclipse的VM参数部(separatly和逐个)试图-Dlogback.configurationFile=;

  • \ BIN \的logback \ logback.xml
  • /bin/logback/logback.xml
  • 仓\的logback \ logback.xml
  • 斌/的logback/logback.xml
  • \的logback \ logback.xml
  • /logback/logback.xml
  • 的logback \ logback.xml
  • 的logback/logback.xml
  • \ logback.xml
  • /logback.xml
  • logback.xml
  • 〜\文件\科尔\建立\的logback \ logback.xml
  • 〜/文档/科尔/建造/的logback /的logback .xml

我的大脑:不记得错误;帮我!

+0

您的.xml文件是否被复制到bin(或target)目录中?你使用的是什么构建系统?它不会在类路径中,除非它与.class文件位于相同的目录结构中。 – ccleve 2014-08-28 21:41:03

+0

另外,给你完整的-Dlogback.configurationFile =值。 – ccleve 2014-08-28 21:41:48

+0

@ccleve我怎么能说eclipse将logback.xml复制到bin文件夹?不,它不会复制到bin目录。 – Hevan 2014-08-28 21:42:44

回答

0

我不知道上述问题背后的原因,但改变依赖文件后,如;

<dependency org="SLF4J" name="slf4j-api-1.7.7" rev="1.7.7" 
      conf="compile->default"/> 
<dependency org="LOGBack" name="logback-core-1.1.2" rev="1.1.2" 
      conf="runtime->default"/> 
<dependency org="LOGBack" name="logback-classic-1.1.2" rev="1.1.2" 
      conf="runtime->default"/> 

我的配置文件现在已经被Logback认可了。我认为slf4j-jdk14-1.7.7阻止Logback读取我的配置文件。

为了强调,我使用了slf4j的jdk,它导致将Logback绑定到其内部并忽略我自己的配置文件,即logback.xml。 (我说“忽略”,因为你可以我的努力​​,我试过的所有可能性,在问题身上)。

+0

你的问题肯定是缺少logback-classic而不是关于slf4j-jdk14-1.7.7,因为经典实现了很多所需的东西。 – 2014-08-30 09:09:57

+0

@ThorstenSchöning你错了。我已经使用jdk版本,并没有发生错误或警告。日志以“日期错误类名msg”的形式显示。每当我试图找到哪个配置文件被读取时,我都将经典的jar版本放在依赖脚本中;事后我采取了多个绑定错误。在Logback网站阅读了一些说明之后,我觉得jdk block Logback可以读取我的conf文件。我认为我是对的。 – Hevan 2014-08-30 09:23:43

+0

你是对的,我认为slf4j-jdk14-1.7.7是一个额外的“to slf4j”绑定,但它不是,它完全相反,是一个“从slf4j到除了logback之外的任何地方”绑定。这就是为什么logback不适合你。 – 2014-08-30 09:57:29