【问题标题】:different log4j.xml when exporting jar from eclipse从eclipse导出jar时不同的log4j.xml
【发布时间】:2014-01-31 18:06:23
【问题描述】:

导出到可执行 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>

我尝试使用出现 here 的 log4j.properties 文件,但没有。

提前感谢您的回答。

【问题讨论】:

  • 你为什么使用 Eclipse 导出,为什么不让 Maven 使用 mvn package 构建你的工件?
  • 只是,我认为比每次打开终端并写入命令更简单。但是,我会做它来比较以检查是否发生效果。
  • 您可以右键单击 Eclipse 项目,而不是使用终端,选择“运行方式”和“Maven 安装”或“Maven 构建...”。第一次运行后,您可以将设置添加到“运行”->“组织收藏夹”,以便它粘在菜单中。
  • 我不知道那个技巧!!。总是,我在用 Maven 编译时遇到问题,尽管在 Eclipse 中运行良好。这就是为什么我更喜欢使用 eclipse 导出可执行文件的主要原因。实际上,现在我正在尝试使用 maven 解决编译问题。
  • 您实际看到的 log4j 配置文件(与您期望看到的相反)是否存在于您工作区的任何位置?在磁盘上?它是从某个地方的脚本生成的吗?

标签: eclipse maven log4j slf4j m2eclipse


【解决方案1】:

感谢 Peter,我了解到,当使用 eclipse 运行应用程序时,我使用的是 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 和其他选项,或者它更改 log4j.xml 的原因是什么,那么答案很受欢迎。

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2017-10-27
    • 2023-04-08
    • 2012-10-26
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多