I'm developing a vert.x application. Specifically, I'm using Java + Eclipse + Maven + Vert.x. I read that JUL is the preferred logging framework and that vertx.log is saved under /tmp (I'm a linux user). Actually, I'd like to use log4j and generate different logging files under a custom logs folder. How can I do that? The vert.x documentation says (http://vertx.io/manual.html#logging):
我开发一个绿色。x应用程序。具体来说,我使用的是Java + Eclipse + Maven + Vert.x。我了解到JUL是首选的日志框架和vertx。日志是在/tmp下保存的(我是linux用户)。实际上,我希望使用log4j并在一个自定义日志文件夹下生成不同的日志文件。我该怎么做呢?绿色。x文档表示(http://vertx.io/manual.html日志记录):
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.
如果你不想使用这个绿色。x提供了良好的记录设备。您可以使用您的首选日志框架作为常规,并在模块中包含日志jar和配置。
So I've tried to include the log4j dependency into my pom.xml, copy the log4j.xml file in src/main/resources and define a logger variable in my Verticle class, but the console does not print anything... Where I'm doing wrong?
因此,我尝试将log4j依赖项包括到pom中。xml,复制log4j。在src/main/resources中的xml文件并在我的Verticle类中定义一个logger变量,但是控制台不打印任何东西…我做错了吗?
Thank you, Francesco
谢谢你,弗朗西斯科
EDIT1: my pom.xml
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://*.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: my log4j.xml
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>
2 个解决方案
#1
2
Here the official topic: https://groups.google.com/forum/#!topic/vertx/xhA9Gze1LM4
这里的官方主题是:https://groups.google.com/forum/#!
The author is investigating why it doesn't work. In the meantime he suggests to use:
作者正在调查为什么它不起作用。与此同时,他建议使用:
-Dlog4j.configuration=file:./your_path/log4j.xml
#2
1
The manual also explains how you need to set a system property in the vertx.sh
script. So, for log4j:
手册还解释了如何在vertx中设置系统属性。sh脚本。因此,对于log4j:
-Dorg.vertx.logger-delegate-factory-class-name=org.vertx.java.core.logging.impl.Log4jLogDelegateFactory
That should ensure that Vert.x's logging goes through log4j and picks up your configuration.
这应该能保证这个人的性格。x的日志记录通过log4j并获取您的配置。
(Similarly, there's an SLF4JLogDelegateFactory
implementation, which may be a better choice if you're writing code you may reuse in other contexts.)
(类似地,有一个slf4jlogdelegate工厂实现,如果您编写的代码可以在其他上下文中重用,这可能是更好的选择。)
#1
2
Here the official topic: https://groups.google.com/forum/#!topic/vertx/xhA9Gze1LM4
这里的官方主题是:https://groups.google.com/forum/#!
The author is investigating why it doesn't work. In the meantime he suggests to use:
作者正在调查为什么它不起作用。与此同时,他建议使用:
-Dlog4j.configuration=file:./your_path/log4j.xml
#2
1
The manual also explains how you need to set a system property in the vertx.sh
script. So, for log4j:
手册还解释了如何在vertx中设置系统属性。sh脚本。因此,对于log4j:
-Dorg.vertx.logger-delegate-factory-class-name=org.vertx.java.core.logging.impl.Log4jLogDelegateFactory
That should ensure that Vert.x's logging goes through log4j and picks up your configuration.
这应该能保证这个人的性格。x的日志记录通过log4j并获取您的配置。
(Similarly, there's an SLF4JLogDelegateFactory
implementation, which may be a better choice if you're writing code you may reuse in other contexts.)
(类似地,有一个slf4jlogdelegate工厂实现,如果您编写的代码可以在其他上下文中重用,这可能是更好的选择。)