Zollty-Log使用手册
2014年07月12日

zollty-log

The ZolltyLog is a simple, generic and flexible logging library for Java, which can work with other logging frameworks, like log4j.


一、简单用法示例
  public static final Logger LOG = LogFactory.getLogger(); // Concise
  LOG.error("Hello {}, welcome to {}", "GUYS", "ZolltyLog Demo"); // use placeholder
  
  if( LOG.isDebugEnabled() ) { // Local log level control
    LOG.error(e, "Some additional tips....");
  }

 

二、基本用法说明

 

1、基本使用

    直接引入zollty-log的jar包即可用。zollty-log的日志有Trace、Debug、Info、Warm、Error等级别。如果不配置,它默认使用TRACE级别,使用Java的System.out标准输出流,在控制台来输出日志。


2、简单配置

    如果想自定义日志输出级别,或者日志输出的方式,可以在zollty-log.properties文件中配置。

    在classpath中新建一个名为zollty-log.properties的文件,例如maven项目在如下地址 

src/main/resources/zollty-log.properties

内容如下:
rootLogger=TRACE,STDOUT
appender.STDOUT.layout.className=simple
logger.org.zollty.dbk=INFO
第一行是主要配置,指出日志阀门的级别和日志的实现方式。
1)第一个参数,TRACE代表日志的阀门值为“TRACE级别”。低于TRACE级别的日志,将不会打印。这个是全局性的日志级别。

2)第二个参数,是日志的实现方式。可以指定用何种日志程序来输出日志。比如STDOUT,它是Zollty-Log日志库自带的STDOUT标准输出,换句话说,就是用Java的System.out来输出。还有LOG4J,表示使用Log4j来输出日志(需要引入Log4j的jar包)。除了zollty-log中自带的STDOUT和LOG4J外,还支持自定义的日志实现类,比如

com.zollty.report.log.TreLog4jLogger,任何继承于org.zollty.log.LoggerSupport的日志实现类都可以(在第三节“高级用法”中会详细说明)。



第二行是日志实现方式的具体配置。
1)当实现方式为STDOUT时,支持的配置如下
appender.STDOUT.layout.className=simple

表示输出日志时,前缀的类名称的形式,1)类的全名(比如org.zollty.log.ConsoleAppender),2)短名称(比如ConsoleAppender)。当配置为simple时,日志输出时用类的短名称,如果不配置或者配置其他值,则用类全名。

 
第三行是设置特定包的日志级别。
1)格式为logger.包路径。例如,上面设置的是logger.org.zollty.dbk=INFO,则表示对于org.zollty.dbk包,设置的日志级别为INFO级别
这个级别比全局级别高时,才会其作用,比如说全局级别为ERROR,这个地方你设置成INFO就没任何作用,道理很简单,全局级别的优先级更高。
2)可以设置多个特定的包日志级别。

 

三、高级用法


1、自定义Logger实现类

 

一个简单的例子如下:

public class TreLog4jLogger implements org.zollty.log.Logger, LoggerSupport {

private static final String FQCN = LoggerWrapper.class.getName();
private transient org.apache.log4j.Logger logger;
public TreLog4jLogger(){

}
public TreLog4jLogger(String name) {
     this.logger = org.apache.log4j.Logger.getLogger(name);
}
@Override
public org.zollty.log.Logger newInstance(String name) {
       return new TreLog4jLogger(name);
}
@Override
public void info(Object message) {
     logger.log(FQCN, Level.INFO, message, null);
}

@Override
public void info(Throwable e) {
    logger.log(FQCN, Level.INFO, Utils.ExceptionUtil.getStackTraceStr(e), null);
}

...省略其他debug、warn方法,它们都和info方法类似。
}

 

2、动态刷新日志工厂的阀门级别。
示例如下:动态刷新日志开关
public void refreshMlf4jConfig(String configStr) {
    InputStream in = MvcUtils.IOUtil.getInputStreamFromString(configStr, "UTF-8");
    Properties props = new Properties();
    try {
        props.load(in);
    } catch (IOException e) {
        throw new NestedRuntimeException(e);
    }
    Map<String, String> pmap = LogUtils.covertProperties2Map(props);
    LogManager.refreshZolltyLogConfig(pmap);
}

 可以引入Log-monitor插件,在线查看和配置日志。