java - 我如何在我的 vert.x 应用程序中使用独立的 log4j 实例?

标签 java maven log4j vert.x

我正在开发一个 vert.x 应用程序。具体来说,我使用的是 Java + Eclipse + Maven + Vert.x。我读到 JUL 是首选的日志记录框架,vertx.log 保存在/tmp 下(我是 linux 用户)。实际上,我想使用 log4j 并在自定义日志文件夹下生成不同的日志文件。我怎样才能做到这一点? vert.x 文档说 ( http://vertx.io/manual.html#logging ):

If you don't want to use the Vert.x provided logging facilities that's fine. You can just use your preferred logging framework as normal and include the logging jar and config in your module.

所以我尝试将 log4j 依赖项包含到我的 pom.xml 中,将 log4j.xml 文件复制到 src/main/resources 并在我的 Verticle 类中定义一个 logger 变量,但是控制台不打印任何内容。 . 我哪里做错了?

谢谢, 弗朗切斯科

EDIT1:我的 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>it.uniroma1.dis.wsngroup</groupId>
    <artifactId>wochat</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>WoChat</name>

    <parent>
         <groupId>org.sonatype.oss</groupId>
         <artifactId>oss-parent</artifactId>
         <version>7</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- Set pullInDeps to true if you want any modules specified in the 'includes' and 'deploys' fields
        in your mod.json to be automatically pulled in during packaging and added inside your module. Doing this means your
        module won't download and install those dependencies at run-time when they're first requested. -->
        <vertx.pullInDeps>false</vertx.pullInDeps>

        <!-- Set createFatJar to true if you want to create a fat executable jar which contains the Vert.x binaries
        along with the module so it can be run with java -jar <jarname> -->
        <vertx.createFatJar>false</vertx.createFatJar>

        <!--Vertx module name-->
        <module.name>${project.groupId}~${project.artifactId}~${project.version}</module.name>

        <!-- The directory where the module will be assembled - you can override this on the command line
        with -Dmods.directory=mydir -->
        <mods.directory>target/mods</mods.directory>

        <!--Dependency versions-->
        <vertx.version>2.1M1</vertx.version>
        <vertx.testtools.version>2.0.2-final</vertx.testtools.version>
        <junit.version>4.11</junit.version>

        <!--Plugin versions-->
        <maven.compiler.plugin.version>3.0</maven.compiler.plugin.version>
        <maven.resources.plugin.version>2.6</maven.resources.plugin.version>
        <maven.clean.plugin.version>2.5</maven.clean.plugin.version>
        <maven.vertx.plugin.version>2.0.1-final</maven.vertx.plugin.version>
        <maven.surefire.plugin.version>2.14</maven.surefire.plugin.version>
        <maven.failsafe.plugin.version>2.14</maven.failsafe.plugin.version>
        <maven.surefire.report.plugin.version>2.14</maven.surefire.report.plugin.version>
        <maven.javadoc.plugin.version>2.9</maven.javadoc.plugin.version>
        <maven.dependency.plugin.version>2.7</maven.dependency.plugin.version>
    </properties>

    <repositories>
        <repository>
            <id>sonatype-nexus-snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </repository>
    </repositories>

    <dependencies>
        <!--Vertx provided dependencies-->
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-core</artifactId>
            <version>${vertx.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-platform</artifactId>
            <version>${vertx.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-hazelcast</artifactId>
            <version>${vertx.version}</version>
            <scope>provided</scope>
        </dependency>
        <!--Test dependencies-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>testtools</artifactId>
            <version>${vertx.testtools.version}</version>
            <scope>test</scope>
        </dependency>

        <!-- Add any other dependencies that you want packaged into your module (in the lib dir) here
        as 'compile' dependencies. Here is an example
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <version>1.3</version>
            <scope>compile</scope>
        </dependency>
        -->

    </dependencies>

    <build>
        <plugins>

            <!-- The vert.x Maven plugin -->
            <plugin>
                <groupId>io.vertx</groupId>
                <artifactId>vertx-maven-plugin</artifactId>
                <version>${maven.vertx.plugin.version}</version>
                <!--
                You can specify extra config to the plugin as required here
                <configuration>
                     <configFile>/path/to/MyVerticle.conf</configFile>
                     <instances>1</instances>
                     <classpath>src/main/resources/:src/test/resources/:target/classes/:target/test-classes/</classpath>
                </configuration>
                -->
                <executions>
                    <execution>
                        <id>PullInDeps</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>pullInDeps</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Other plugins required by the build -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.plugin.version}</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>${maven.resources.plugin.version}</version>
                <executions>
                    <execution>
                        <id>copy-mod-to-target</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <overwrite>true</overwrite>
                            <outputDirectory>${mods.directory}/${module.name}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>target/classes</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>${maven.dependency.plugin.version}</version>
                <executions>
                    <execution>
                        <id>copy-mod-dependencies-to-target</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${mods.directory}/${module.name}/lib</outputDirectory>
                            <includeScope>runtime</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <includes>
                        <include>**/unit/*Test*.java</include>
                    </includes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>${maven.failsafe.plugin.version}</version>
                <configuration>
                    <systemProperties>
                        <property>
                            <name>vertx.mods</name>
                            <value>${mods.directory}</value>
                        </property>
                    </systemProperties>
                    <includes>
                        <include>**/integration/**</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>${maven.surefire.report.plugin.version}</version>
                <executions>
                    <execution>
                        <id>generate-test-report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report-only</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>generate-integration-test-report</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>failsafe-report-only</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/mod.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>assemble</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings 
                    only. It has no influence on the Maven build itself.
                    http://stackoverflow.com/questions/8706017/maven-dependency-plugin-goals-copy-dependencies-unpack-is-not-supported-b
                -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.maven.plugins
                                        </groupId>
                                        <artifactId>
                                            maven-dependency-plugin
                                        </artifactId>
                                        <versionRange>[2.7,)</versionRange>
                                        <goals>
                                            <goal>copy-dependencies</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>${maven.surefire.report.plugin.version}</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>${maven.javadoc.plugin.version}</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
        </plugins>
    </reporting>
</project>

EDIT2:我的 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">
    <param name="Threshold" value="DEBUG"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p [%F:%L] - %m%n" />
    </layout>
    </appender>

    <appender name="Generic_File" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="logs/wochat.log"/>
    <param name="Threshold" value="DEBUG"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p [%F:%L] - %m%n" />
    </layout>
    </appender>

    <appender name="Interactions_Log_File" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="logs/interactions.log"/>
    <param name="Threshold" value="INFO"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n" />
    </layout>
    </appender>

    <appender name="Messages_Log_File" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="logs/messages.log"/>
    <param name="Threshold" value="INFO"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m%n" />
    </layout>
    </appender>

    <logger name="it.uniroma1.dis.wsngroup.wochat.logging.LogInteraction" additivity="false">
    <level value="INFO" />
    <appender-ref ref="Interactions_Log_File" />
    </logger>

    <logger name="it.uniroma1.dis.wsngroup.wochat.logging.LogMessage" additivity="false">
    <level value="INFO" />
    <appender-ref ref="Messages_Log_File" />
    </logger>

    <root>
    <level value="DEBUG" />
    <appender-ref ref="Console" />
    <appender-ref ref="Generic_File" />
    </root>
</log4j:configuration>

最佳答案

这里是官方话题:https://groups.google.com/forum/#!topic/vertx/xhA9Gze1LM4

作者正在调查为什么它不起作用。与此同时,他建议使用:

-Dlog4j.configuration=file:./your_path/log4j.xml

关于java - 我如何在我的 vert.x 应用程序中使用独立的 log4j 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927903/

相关文章:

java - SmartGWT 时区

java - 防止 Java 重定位对象

java.lang.ClassNotFoundException : org. springframework.web.context.support.AnnotationConfigApplicationContext

java - Maven 类路径 Log4J NoClassDefFoundError

java - 为什么线程在另一个开始执行时停止?

java - spring jdbc中数据源是否需要在原型(prototype)范围内

java - 如何在 Junit 测试期间将日志级别设置为 DEBUG?

java - 将 logback.xml 转换为 log4j.properties

java - 在 Java 中检索命令行 -D 选项

eclipse - 在 Eclipse(Kepler) 中创建 MAVEN 项目时出错