`
yonlist
  • 浏览: 85724 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nutz中支持SLF4J

阅读更多

 

Nutz是个不错的轻量级框架,小巧易用,不了解到同学可以见http://code.google.com/p/nutz/

 

不过Nutz中的日志默认依赖Log4J,内部的日志信息都会依赖Log4J,对于我这样喜欢用SLF4J来说实在是不爽。

 

好吧自己动手改造一下,好在Nutz的日志设计的不错,改一下不难。

 

先在org.nutz.log.impl包下加一个SLF4JLogAdapter的类:

 

 

public class SLF4JLogAdapter implements LogAdapter, Plugin {

	public Log getLogger(String className) {
		return new SLF4JLogger(className);
	}

	public boolean canWork() {
		try {
			Class.forName("org.slf4j.Logger", false, Thread.currentThread().getContextClassLoader());
			return true;
		}
		catch (Throwable e) {}
		return false;
	}
	
	static class SLF4JLogger extends AbstractLog {

		private Logger logger;

		SLF4JLogger(String className) {
			logger = LoggerFactory.getLogger(className);
			isErrorEnabled = logger.isErrorEnabled();
			isWarnEnabled = logger.isWarnEnabled();
			isInfoEnabled = logger.isInfoEnabled();
			isDebugEnabled = logger.isDebugEnabled();
			isTraceEnabled = logger.isTraceEnabled();
		}

		public void debug(Object message, Throwable t) {
			if (isDebugEnabled())
				logger.debug((String)message, t);
		}

		public void error(Object message, Throwable t) {
			if (isErrorEnabled())
				logger.error((String)message, t);

		}

		public void fatal(Object message, Throwable t) {
			if (isFatalEnabled())
				logger.error((String)message, t);
		}

		public void info(Object message, Throwable t) {
			if (isInfoEnabled())
				logger.info((String)message, t);
		}

		public void trace(Object message, Throwable t) {
			if (isTraceEnabled())
				logger.trace((String)message, t);
		}

		public void warn(Object message, Throwable t) {
			if (isWarnEnabled())
				logger.warn((String)message, t);
		}

		@Override
		protected void log(int level, Object message, Throwable tx) {
			switch (level) {
			case LEVEL_FATAL:
				logger.error((String)message, tx);
				break;
			case LEVEL_ERROR:
				logger.error((String)message, tx);
				break;
			case LEVEL_WARN:
				logger.warn((String)message, tx);
				break;
			case LEVEL_INFO:
				logger.info((String)message, tx);
				break;
			case LEVEL_DEBUG:
				logger.debug((String)message, tx);
				break;
			case LEVEL_TRACE:
				logger.trace((String)message, tx);
				break;
			default:
				break;
			}
		}
	}

}
 

然后改一下org.nutz.log.Logs这个工厂类的init方法:

 

public static void init() {
		try {
			adapter = new SimplePluginManager<LogAdapter>(	"org.nutz.log.impl.SLF4JLogAdapter").get();
		}
		catch (Throwable e) {
			e.printStackTrace();
		}
	}
 

OK完成了~~

注意SLF4J只是个日志接口,还需要特定的实现,推荐使用logback,详细见另一个帖子

 

================================================================

后记:

我在Nutz上已提了issue,但是Nutz作者表示不会内置支持SLF4J,要用的话可以通过log4j-over-slf4j.jar转换来实现。

但是我个人不喜欢这种方式,一是需要多依赖jar包,另外总觉得别扭~~

分享到:
评论

相关推荐

    nutz需要的jar包

    `nutz-log`提供了日志记录功能,可以根据需求选择不同的日志实现,如log4j、slf4j等;`nutz-utils`则是一些通用的工具类,如字符串处理、日期时间操作等。 在实际项目中,根据需求可能还需要引入一些额外的jar包,...

    nutzdemo

    7. **日志和异常处理**:Nutz通常会集成日志库,如Log4j或SLF4J,学习如何配置和使用日志系统,以及如何优雅地处理程序异常。 8. **国际化与本地化**:Nutz支持多语言环境,了解如何在项目中实现国际化和本地化功能...

    java开源包4

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包1

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包11

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包2

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包3

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包6

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包5

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包10

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包8

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包7

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包9

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    java开源包101

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

    Java资源包01

    BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...

Global site tag (gtag.js) - Google Analytics