You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by yu...@apache.org on 2017/08/01 12:13:02 UTC
incubator-rocketmq git commit: Author: lindzh Author: 鲁般
Repository: incubator-rocketmq
Updated Branches:
refs/heads/master 9bb6eae4b -> 98bd03245
Author: lindzh <li...@163.com>
Author: 鲁般 <de...@alibaba-inc.com>
Closes #120 from lindzh/fix_client_logger.
Project: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/commit/98bd0324
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/tree/98bd0324
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/diff/98bd0324
Branch: refs/heads/master
Commit: 98bd032454c9dd01bcaea0f4c92abfa0b1847bac
Parents: 9bb6eae
Author: lindzh <li...@163.com>
Authored: Tue Aug 1 20:12:46 2017 +0800
Committer: yukon <yu...@apache.org>
Committed: Tue Aug 1 20:12:46 2017 +0800
----------------------------------------------------------------------
client/pom.xml | 10 +++
.../rocketmq/client/log/ClientLogger.java | 27 ++++++--
.../main/resources/log4j2_rocketmq_client.xml | 48 +++++++++++++
.../rocketmq/client/log/ClientLogTest.java | 72 ++++++++++++++++++++
example/pom.xml | 4 --
pom.xml | 7 +-
6 files changed, 158 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/98bd0324/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 7b73f3f..c7ab885 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -45,5 +45,15 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/98bd0324/client/src/main/java/org/apache/rocketmq/client/log/ClientLogger.java
----------------------------------------------------------------------
diff --git a/client/src/main/java/org/apache/rocketmq/client/log/ClientLogger.java b/client/src/main/java/org/apache/rocketmq/client/log/ClientLogger.java
index 2da2124..05d72b4 100644
--- a/client/src/main/java/org/apache/rocketmq/client/log/ClientLogger.java
+++ b/client/src/main/java/org/apache/rocketmq/client/log/ClientLogger.java
@@ -18,6 +18,7 @@ package org.apache.rocketmq.client.log;
import java.lang.reflect.Method;
import java.net.URL;
+
import org.apache.rocketmq.common.constant.LoggerName;
import org.slf4j.ILoggerFactory;
import org.slf4j.Logger;
@@ -27,16 +28,15 @@ public class ClientLogger {
public static final String CLIENT_LOG_ROOT = "rocketmq.client.logRoot";
public static final String CLIENT_LOG_MAXINDEX = "rocketmq.client.logFileMaxIndex";
public static final String CLIENT_LOG_LEVEL = "rocketmq.client.logLevel";
+
private static Logger log;
- static {
- log = createLogger(LoggerName.CLIENT_LOGGER_NAME);
- }
+ private static Class logClass = null;
private static Logger createLogger(final String loggerName) {
String logConfigFilePath =
System.getProperty("rocketmq.client.log.configFile",
- System.getenv("ROCKETMQ_CLIENT_LOG_CONFIGFILE"));
+ System.getenv("ROCKETMQ_CLIENT_LOG_CONFIGFILE"));
Boolean isloadconfig =
Boolean.parseBoolean(System.getProperty("rocketmq.client.log.loadconfig", "true"));
@@ -46,6 +46,9 @@ public class ClientLogger {
final String logbackResourceFile =
System.getProperty("rocketmq.client.logback.resource.fileName", "logback_rocketmq_client.xml");
+ final String log4J2ResourceFile =
+ System.getProperty("rocketmq.client.log4j2.resource.fileName", "log4j2_rocketmq_client.xml");
+
String clientLogRoot = System.getProperty(CLIENT_LOG_ROOT, "${user.home}/logs/rocketmqlogs");
System.setProperty("client.logRoot", clientLogRoot);
String clientLogLevel = System.getProperty(CLIENT_LOG_LEVEL, "INFO");
@@ -90,7 +93,16 @@ public class ClientLogger {
doConfigure.invoke(joranConfiguratoroObj, logConfigFilePath);
}
+ } else if (classType.getName().equals("org.apache.logging.slf4j.Log4jLoggerFactory")) {
+ Class<?> joranConfigurator = Class.forName("org.apache.logging.log4j.core.config.Configurator");
+ Method initialize = joranConfigurator.getDeclaredMethod("initialize", String.class, String.class);
+ if (null == logConfigFilePath) {
+ initialize.invoke(joranConfigurator, "log4j2", log4J2ResourceFile);
+ } else {
+ initialize.invoke(joranConfigurator, "log4j2", logConfigFilePath);
+ }
}
+ logClass = classType;
} catch (Exception e) {
System.err.println(e);
}
@@ -99,7 +111,12 @@ public class ClientLogger {
}
public static Logger getLog() {
- return log;
+ if (log == null) {
+ log = createLogger(LoggerName.CLIENT_LOGGER_NAME);
+ return log;
+ } else {
+ return log;
+ }
}
public static void setLog(Logger log) {
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/98bd0324/client/src/main/resources/log4j2_rocketmq_client.xml
----------------------------------------------------------------------
diff --git a/client/src/main/resources/log4j2_rocketmq_client.xml b/client/src/main/resources/log4j2_rocketmq_client.xml
new file mode 100644
index 0000000..651553e
--- /dev/null
+++ b/client/src/main/resources/log4j2_rocketmq_client.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!DOCTYPE xml>
+<Configuration status="warn" name="RocketmqClient">
+ <Appenders>
+ <Console name="STDOUT-APPENDER">
+ <PatternLayout pattern="%-5p %c{2} , %m%n"/>
+ </Console>
+ <RollingFile name="RocketmqClientAppender" fileName="${sys:client.logRoot}/rocketmq_client.log"
+ filePattern="${sys:client.logRoot}/rocketmq_client-%d{yyyy-MM-dd}-%i.log">
+ <PatternLayout pattern="%d{yyy-MM-dd HH\:mm\:ss,SSS} %p %c{1}(%L) - %m%n"/>
+ <Policies>
+ <TimeBasedTriggeringPolicy/>
+ <SizeBasedTriggeringPolicy size="1 GB"/>
+ </Policies>
+ <DefaultRolloverStrategy max="${sys:client.logFileMaxIndex}"/>
+ </RollingFile>
+ </Appenders>
+ <Loggers>
+ <logger name="RocketmqClient" level="${sys:client.logLevel}" additivity="false">
+ <appender-ref ref="RocketmqClientAppender"/>
+ </logger>
+
+ <logger name="RocketmqCommon" level="${sys:client.logLevel}" additivity="false">
+ <appender-ref ref="RocketmqClientAppender"/>
+ </logger>
+
+ <logger name="RocketmqRemoting" level="${sys:client.logLevel}" additivity="false">
+ <appender-ref ref="RocketmqClientAppender"/>
+ </logger>
+ </Loggers>
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/98bd0324/client/src/test/java/org/apache/rocketmq/client/log/ClientLogTest.java
----------------------------------------------------------------------
diff --git a/client/src/test/java/org/apache/rocketmq/client/log/ClientLogTest.java b/client/src/test/java/org/apache/rocketmq/client/log/ClientLogTest.java
new file mode 100644
index 0000000..d7b619f
--- /dev/null
+++ b/client/src/test/java/org/apache/rocketmq/client/log/ClientLogTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.rocketmq.client.log;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.*;
+import java.lang.reflect.Field;
+import java.util.Date;
+
+public class ClientLogTest {
+
+ public static final String CLIENT_LOG_ROOT = "rocketmq.client.logRoot";
+ public static final String LOG_DIR;
+
+ static {
+ LOG_DIR = System.getProperty(CLIENT_LOG_ROOT, "${user.home}/logs/rocketmqlogs");
+ }
+
+ // FIXME: Workarond for concret implementation for slf4j, is there any better solution for all slf4j implementations in one class ? 2017/8/1
+ @Test
+ public void testLog4j2() throws IOException, NoSuchFieldException, IllegalAccessException {
+ ClientLogger.getLog();
+ long seek = 0;
+ boolean result = false;
+ File file = new File(LOG_DIR + File.separator + "rocketmq_client.log");
+ if (file.exists()) {
+ seek = file.length();
+ }
+ Field logClassField = ClientLogger.class.getDeclaredField("logClass");
+ logClassField.setAccessible(true);
+ Class logClass = (Class) logClassField.get(ClientLogger.class);
+ Assert.assertEquals("org.apache.logging.slf4j.Log4jLoggerFactory", logClass.getName());
+ for (int i = 0; i < 10; i++) {
+ ClientLogger.getLog().info("testcase testLog4j2 " + new Date());
+ }
+
+ RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
+ randomAccessFile.seek(seek);
+ String line = randomAccessFile.readLine();
+ int idx = 1;
+ while (line != null) {
+ if (line.contains("testLog4j2")) {
+ result = true;
+ break;
+ }
+ line = randomAccessFile.readLine();
+ idx++;
+ if (idx > 20) {
+ break;
+ }
+ }
+ randomAccessFile.close();
+ Assert.assertTrue(result);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/98bd0324/example/pom.xml
----------------------------------------------------------------------
diff --git a/example/pom.xml b/example/pom.xml
index 947e5f2..ccebc46 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -41,10 +41,6 @@
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- </dependency>
- <dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/incubator-rocketmq/blob/98bd0324/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e5ef5e4..1a03f92 100644
--- a/pom.xml
+++ b/pom.xml
@@ -530,7 +530,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
+ <version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
@@ -592,6 +592,11 @@
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ <version>2.7</version>
+ </dependency>
</dependencies>
</dependencyManagement>
</project>