从eclipse导出jar时不同的log4j.xml

时间:2014-01-31 18:06:24

标签: eclipse maven log4j slf4j m2eclipse

导出到可执行jar时出现问题。

我正在使用maven和slf4j和log4j

我的pom.xml

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.7.2</version>
   <scope>runtime</scope>
</dependency>

我在/ src / java / main中添加了一个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="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/media/dlm/log/dlm.log" />
    <param name="Threshold" value="INFO" />
    <param name="Append" value="false" />
    <param name="MaxFileSize" value="10MB" />
    <param name="MaxBackupIndex" value="1" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m %n" />
    </layout>
</appender>

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <param name="Threshold" value="INFO" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m %n" />
    </layout>
</appender>


<root>
    <level value="INFO" />
    <appender-ref ref="FILE" />
</root>

</log4j:configuration>

但是当我从eclipse导出时,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="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/tmp/dlm/log4j.log" />
    <param name="Threshold" value="INFO" />
    <param name="Append" value="false" />
    <param name="MaxFileSize" value="1MB" />
    <param name="MaxBackupIndex" value="1" />

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p %X{service} %X{user} [%c] %m%n" />
    </layout>
</appender>

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <param name="Threshold" value="ERROR" />

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="%d{ABSOLUTE} %-5p %X{service} %X{user} [%c{1}] %m%n" />
    </layout>
</appender>


<root>
    <level value="INFO" />
    <appender-ref ref="CONSOLE" />
</root>
</log4j:configuration>

我尝试使用log4j.properties文件显示为here,但没有。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

感谢Peter,我明白当使用eclipse运行aplicacition时,我正在使用eclipse选项而不是maven本身来构建我的应用程序。这就是log4j.xml可能改变的原因。下一个解决方案无法解决它为什么会发生,但解决问题并给我一个正确的方法来使用100%maven构建我的应用程序。

我只需要在我的pom.xml中添加一些新字段,以便使eclipse选项可能会自动添加。

1.-包含xml文件:

<build>
...
<!-- RECURSOS -->
<resources>
    <resource>
    <directory>src/main/java</directory>
    <includes>
        <include>**/*.fxml</include>
        <include>log4j.xml</include>
    </includes>
    </resource>
</resources>
...
</build>

2.-可执行jar(我在同一个项目中有3个不同的主类):

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
  <archive>
    <manifest>
      <mainClass>${class.main}</mainClass>
    </manifest>
  </archive>
  <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
  </descriptorRefs>
</configuration>
</plugin>

3.-添加配置文件以选择主类:

<profiles>
<!-- DLM ANALOG -->
<profile>
  <id>dlmdesktopanalog</id>
  <properties>        
    <class.main>cl.icpdas.dlm.desktop.fx.main.analog.DataLoggerAnalogManager</class.main>
  </properties>
</profile>
<!-- DLM DIGITAL -->
<profile>
  <id>dlmdesktopdigital</id>
  <properties>
    <class.main>cl.icpdas.dlm.desktop.fx.main.digital.DataLoggerDigitalManager</class.main>
  </properties>
</profile>
<!-- DLM EXTRACTOR -->
<profile>
  <id>dlmdesktopextractor</id>
  <properties>
    <class.main>cl.icpdas.dlm.desktop.fx.main.extractor.DataLoggerExtractorManager</class.main>
  </properties>
</profile>
</profiles>

最后,我使用了下一个目标制作我的可执行jar。

mvn clean package assembly:single -e -P dlmdesktopanalog

无论如何,如果有人知道eclipse在创建一个可执行的jar时设置了log4j.xml和其他选项,或者什么是reasson,为什么它改变了log4j.xml,答案很好地作为评论。