提交 d03b128f 编写于 作者: W william.liangf

DUBBO-344 Logger自动搜索slf4j和jcl

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@1570 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 e263f6bc
......@@ -30,6 +30,14 @@
<skip_maven_deploy>true</skip_maven_deploy>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
......
......@@ -15,14 +15,17 @@
*/
package com.alibaba.dubbo.common.logger;
import java.io.File;
import java.io.File;
import com.alibaba.dubbo.common.extension.SPI;
/**
* 日志输出器供给器
*
* @author william.liangf
*/
public interface LoggerFactorySupport {
*/
@SPI
public interface LoggerAdapter {
/**
* 获取日志输出器
......
......@@ -15,11 +15,13 @@
*/
package com.alibaba.dubbo.common.logger;
import java.io.File;
import com.alibaba.dubbo.common.logger.support.FailsafeLogger;
import com.alibaba.dubbo.common.logger.support.JdkLoggerFactory;
import com.alibaba.dubbo.common.logger.support.Log4jLoggerFactory;
import java.io.File;
import com.alibaba.dubbo.common.logger.jcl.JclLoggerAdapter;
import com.alibaba.dubbo.common.logger.jdk.JdkLoggerAdapter;
import com.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter;
import com.alibaba.dubbo.common.logger.slf4j.Slf4jLoggerAdapter;
import com.alibaba.dubbo.common.logger.support.FailsafeLogger;
/**
* 日志输出器工厂
......@@ -31,28 +33,36 @@ public class LoggerFactory {
private LoggerFactory() {
}
private static volatile LoggerFactorySupport LOGGER_FACTORY;
private static volatile LoggerAdapter LOGGER_ADAPTER;
// 查找常用的日志框架
static {
try {
setLoggerFactory(new Log4jLoggerFactory());
setLoggerAdapter(new Slf4jLoggerAdapter());
} catch (Throwable e1) {
setLoggerFactory(new JdkLoggerFactory());
try {
setLoggerAdapter(new JclLoggerAdapter());
} catch (Throwable e2) {
try {
setLoggerAdapter(new Log4jLoggerAdapter());
} catch (Throwable e3) {
setLoggerAdapter(new JdkLoggerAdapter());
}
}
}
}
/**
* 设置日志输出器供给器
*
* @param loggerFactory
* @param loggerAdapter
* 日志输出器供给器
*/
public static void setLoggerFactory(LoggerFactorySupport loggerFactory) {
if (loggerFactory != null) {
Logger logger = loggerFactory.getLogger(LoggerFactory.class.getName());
logger.info("using logger: " + loggerFactory.getClass().getName());
LoggerFactory.LOGGER_FACTORY = loggerFactory;
public static void setLoggerAdapter(LoggerAdapter loggerAdapter) {
if (loggerAdapter != null) {
Logger logger = loggerAdapter.getLogger(LoggerFactory.class.getName());
logger.info("using logger: " + loggerAdapter.getClass().getName());
LoggerFactory.LOGGER_ADAPTER = loggerAdapter;
}
}
......@@ -64,7 +74,7 @@ public class LoggerFactory {
* @return 日志输出器, 后验条件: 不返回null.
*/
public static Logger getLogger(Class<?> key) {
return new FailsafeLogger(LOGGER_FACTORY.getLogger(key));
return new FailsafeLogger(LOGGER_ADAPTER.getLogger(key));
}
/**
......@@ -75,7 +85,7 @@ public class LoggerFactory {
* @return 日志输出器, 后验条件: 不返回null.
*/
public static Logger getLogger(String key) {
return new FailsafeLogger(LOGGER_FACTORY.getLogger(key));
return new FailsafeLogger(LOGGER_ADAPTER.getLogger(key));
}
/**
......@@ -84,7 +94,7 @@ public class LoggerFactory {
* @param level 日志级别
*/
public static void setLevel(Level level) {
LOGGER_FACTORY.setLevel(level);
LOGGER_ADAPTER.setLevel(level);
}
/**
......@@ -93,7 +103,7 @@ public class LoggerFactory {
* @return 日志级别
*/
public static Level getLevel() {
return LOGGER_FACTORY.getLevel();
return LOGGER_ADAPTER.getLevel();
}
/**
......@@ -102,7 +112,7 @@ public class LoggerFactory {
* @return 日志文件
*/
public static File getFile() {
return LOGGER_FACTORY.getFile();
return LOGGER_ADAPTER.getFile();
}
}
\ No newline at end of file
......@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.dubbo.common.logger.support;
package com.alibaba.dubbo.common.logger.jdk;
import java.util.logging.Level;
......
......@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.dubbo.common.logger.support;
package com.alibaba.dubbo.common.logger.jdk;
import java.io.File;
import java.io.InputStream;
......@@ -24,15 +24,15 @@ import java.util.logging.LogManager;
import com.alibaba.dubbo.common.logger.Level;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactorySupport;
import com.alibaba.dubbo.common.logger.LoggerAdapter;
public class JdkLoggerFactory implements LoggerFactorySupport {
public class JdkLoggerAdapter implements LoggerAdapter {
private static final String GLOBAL_LOGGER_NAME = "global";
private File file;
public JdkLoggerFactory() {
public JdkLoggerAdapter() {
try {
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("logging.properties");
if (in != null) {
......
......@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.dubbo.common.logger.support;
package com.alibaba.dubbo.common.logger.log4j;
import org.apache.log4j.Level;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.support.FailsafeLogger;
public class Log4jLogger implements Logger {
......
......@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.dubbo.common.logger.support;
package com.alibaba.dubbo.common.logger.log4j;
import java.io.File;
import java.util.Enumeration;
......@@ -24,14 +24,14 @@ import org.apache.log4j.LogManager;
import com.alibaba.dubbo.common.logger.Level;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactorySupport;
import com.alibaba.dubbo.common.logger.LoggerAdapter;
public class Log4jLoggerFactory implements LoggerFactorySupport {
public class Log4jLoggerAdapter implements LoggerAdapter {
private File file;
@SuppressWarnings("unchecked")
public Log4jLoggerFactory() {
public Log4jLoggerAdapter() {
try {
org.apache.log4j.Logger logger = LogManager.getRootLogger();
if (logger != null) {
......
......@@ -64,8 +64,9 @@
<sca_version>2.0-M5.1</sca_version>
<guice_version>3.0</guice_version>
<!-- Log libs -->
<log4j_version>1.2.16</log4j_version>
<slf4j_version>1.6.2</slf4j_version>
<jcl_version>1.1</jcl_version>
<log4j_version>1.2.16</log4j_version>
<!-- Test libs -->
<junit_version>4.10</junit_version>
<easymock_version>3.0</easymock_version>
......@@ -230,16 +231,21 @@
<version>${guice_version}</version>
</dependency>
<!-- Log libs -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j_version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j_version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>${jcl_version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j_version}</version>
</dependency>
<!-- Test libs -->
<dependency>
<groupId>junit</groupId>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册