Log4j 发布2.0首个Alpha 版本

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

Log4j 2是Log4j的升级版本,该版本相比之前的版本来说有着显著的改进,包含很多在Logback中的改进以及Logback架构中存在的问题。

这是 Log4j 2的首次发行的版本,值得关注的改进包括:

  • API分离(API Separation) – Log4j 的 API 和其实现进行分类(本来一个jar包搞定的,现在要变成好几个,跟 slf4j有点类似)
  • 为日志审计而设计 - 与 Log4j 1.x 和 Logback 不同的是 Log4j 2 将不会在重新配置期间丢失事件,支持消息可方便进行审计
  • 性能方面的提升(Improved Performance) - 在关键领域比 Log4j 1.x 的性能提升不少,大部分情况下性能跟 Logback 差不多
  • 支持多 APIs(Support for multiple APIs) - 支持 SLF4J 和 Commons Logging API
  • 自动配置重载(Automatic Reloading of Configurations)- 支持 XML 和 JSON 格式的配置
  • 插件体系架构(Plugin Architecture)- 所有可配置的组件都是通过 Log4j 插件进行定义,包括 Appender, Layout, Pattern Converter, 等等
  • 配置属性支持(Property Support)

注意:Apache log4j 2.0要求至少需要 JDK 5 支持。

 

Logback


Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:

  • logback-core:logback-core是其它两个模块的基础模块。
  • logback- classic:logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
  • logback-access:logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

 

更多关于Log4j 2的内容请看 http://logging.apache.org/log4j/2.x/index.html


配置文件的读取方式

  1. BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
  2. PropertyConfigurator.configure ( String configFilename):读取使用Java的特性文件编写的配置文件。
  3. DOMConfigurator.configure ( String filename ):读取XML形式的配置文件。

 

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下

  1. %m 输出代码中指定的消息
  2. %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  3. %r 输出自应用启动到输出该log信息耗费的毫秒数
  4. %c 输出所属的类目,通常就是所在类的全名
  5. %t 输出产生该日志事件的线程名
  6. %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
  7. %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
  8. %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) 
  9. %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
  10. %%: 输出一个“%”字符
  11. %F: 输出日志消息产生时所在的文件名称

 

Log4j 配置文件(log4j.properties)的所在路径问题

一般我们直接将log4j.properties放置在src目录下,这样系统自动会找到的,其实就是放在WEB-INF/classes文件下。这个路径在classpath下,所以直接就能找到。我们写Logger的时候如下:

public class HelloLog4j {

public static Logger logger = Logger.getLogger(HelloLog4j.class);

public static void main(String[] args) {
  logger.debug("This is debug message.");
  logger.info("This is info message.");
  logger.error("This is error message.");
  xxx();
}

public static void xxx(){
  logger.debug("main method has invoked xxx method.");
}
}

如果现在我们想把log4j.properties文件放置在其它目录下,例如:WEB-INF下和web.xml放在一起。这时候就需要我们手动指定log4j配置文件的路径,否则系统是找不到的。

一、首先我们在web.xml中配置好log4j.properties路径:

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

二、然后写个servlet,部分代码如下:

public void init() {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4jConfigLocation");
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}

三、在web.xml中配置servlet,并将log4jConfigLocation加入到Servlet中,让其Server启动即运行:

<servlet>
<servlet-name>your servlet</servlet-name>
<servlet-class>your servelt class</servlet-class>
<init-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

 

参考文献

 

posted @ 2012-10-17 09:08  bluepoint2009  阅读(680)  评论(0)    收藏  举报