当前位置: 首页 > 知识库问答 >
问题:

如何在Vert.x应用程序中使用独立的log4j实例?

司空思聪
2023-03-14
<?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>

共有1个答案

汝志
2023-03-14

手册还解释了如何在vertx.sh脚本中设置系统属性。因此,对于log4j:

-Dorg.vertx.logger-delegate-factory-class-name=org.vertx.java.core.logging.impl.Log4jLogDelegateFactory

这将确保Vert.x的日志记录通过log4j并获取您的配置。

(类似地,有一个SLF4JLogDelegateFactory实现,如果您正在编写可以在其他上下文中重用的代码,这可能是一个更好的选择。)

 类似资料:
  • 问题内容: 我正在寻找在 独立的(桌面/秋千)* 应用程序中使用 Spring的 示例或教程,我进行了很多搜索,但找不到有用的东西,所有示例和教程均适用于Web应用程序,请告知。 * 问题答案: 使用maven创建独立应用程序,如下所示: 使用Maven创建独立的应用程序 将applicationContext放在类路径中,并按如下所示将其加载到主类中: 在此处查看全文: http://www.d

  • 现在假设我们想要使用 Spark API 写一个独立的应用程序。我们将通过使用 Scala(用 SBT),Java(用 Maven) 和 Python 写一个简单的应用程序来学习。 我们用 Scala 创建一个非常简单的 Spark 应用程序。如此简单,事实上它的名字叫 SimpleApp.scala: /* SimpleApp.scala */ import org.apache.spark.S

  • 最近我学到了很多关于Spring的知识,我想我可能会误解的一件事是@Autowired注释,尤其是在构造函数中使用它时。你看,我正在开发的应用程序是一个服务,所以基本上所有东西都是在构造函数中初始化的。唯一实际发生的用户驱动事件是重启服务某些模块的按钮。这是我的主要方法: 这是我的主类的构造函数,基本上所有事情都发生在这里。我省略了对初始化每个模块的方法的调用,以缩短它: 我的主类为每个服务都有一

  • 问题内容: 我正在考虑开发由两部分组成的桌面应用程序: 用户界面(例如Java应用) 后端Node.js服务器 2个部分通过插座连接。不要问为什么我知道这很奇怪。 我将希望能够为客户提供带有安装程序的应用程序。我不希望用户必须自己安装Node.js。 有没有一种方法可以独立安装Node.js服务器,即无需在系统上全局安装Node.js。 对于任何(Windows,Linux,Mac OS X …)

  • 问题内容: 这是我的代码: 为什么不起作用?我懂了。在独立的应用程序中可以使用自动装配吗? 问题答案: Spring在独立应用程序中工作。您使用错误的方式来创建Spring bean。这样做的正确方法是: 在第一种情况下(问题中的那个),您将自己创建对象,而不是从Spring上下文中获取对象。因此,Spring没有机会获得依赖关系(这会导致)。 在第二种情况(此答案中的一种)中,您是从Spring

  • 问题内容: 如何使用Maven创建桌面(独立/ Swing)应用程序? 我正在使用Eclipse 3.6。 问题答案: 创建一个Maven项目,如下所示: 将以下条目添加到您的pom文件中: 将项目作为Maven项目导入到Eclipse,然后作为Java应用程序运行。