接触过Java的朋友应该都会知道,java的开源框架百花齐放,实现同样的功能,总能找到几个强大的开源框架来进行选择。在日志方面,Java同样不逊色。除了JDK本身自带的简单的日志工具,java还有如log4j,commons-loggin,slf4j,logback等众多第三方工具框架可供开发者使用,其中,上述几个框架,虽说都实现了日志记录的功能,但相互之间各分伯仲,同时,也存在着一定的联系。比如,log4j,slf4j,logback就是出自同一个人之手。
 
  在了解各个框架之前,首先过过大部分日志框架的使用时会遇到的一些概念。
1、日志工具类(logger):通常,大部分的日志框架都会定义一个主要的日志输出的工具类,开发者只需要声明该类,即可实现大部分的日志输出操作
2、日志输出级别(Level):日志输出的级别,意味着该日志的重要程度,大部分的日志框架的级别会分为:Debug(调试模式),Info,warn,error,fatal,其中,根据级别的大小排序,debug>info>warn>error>fatal。级别的大小,将会影响日志的输出,将级别设置的越高,输出的信息将会越多
3、日志输出格式(format):日志输出的格式,通常可以进行自定义,通过自定义的格式,输出的详细效果将不同
4、日志输出的方式:即将日志输出到哪?常见的输出方式包括如:控制台,文本文件,数据库等
5、日志分割:日志文件若以文件的方式进行输出的话,会存在文件大小问题,所以需要对日志进行分割,分割的方式可以分为按大小,按日期等。
 
  如图,常见的日志框架的工作流程大约都会围绕着几个对象展开。首先,通过日志工厂产生一个日志工具类,通过该类来进行日志的输出和日志输出级别的设置,该类的输出,其实是通过另外的框架中定义的不同类型输出类进行输出,常见的包括文件输出,数据库输出,都有与之相对应的日志输出类。同时,该类接收来自配置文件或者开发者自定义的日志输出格式,会根据该日志格式进行日志的输出。
 
  了解过大部分日志框架的工作方式,接下来了解一下,java的一些日志框架。
 
  首先,java日志框架嫡长子,jdk自带的log工具,该工具自JDK1.4版本开始就包含在java.util.logging包下。该工具由于太过粗糙,所以并没有得到广泛的使用,但是log框架应有的日志处理功能还是能够实现的:
以下是通过JDK自带的日志工具实现输出的实例代码:
 public class SimpleLog {

     public static void main(String[] args) throws SecurityException, IOException {
Logger log=Logger.getLogger("Test");
//添加log处理,默认是console
ConsoleHandler console=new ConsoleHandler();
console.setLevel(Level.ALL);
log.addHandler(console);
FileHandler file=new FileHandler("log.log");
file.setLevel(Level.WARNING);
log.addHandler(file);
//设置日志输出格式
file.setFormatter(new Formatter() { @Override
public String format(LogRecord record) {
// TODO Auto-generated method stub
return new SimpleDateFormat("yyyy-MM-dd hh-mm-ss").format(new Date(record.getMillis())) +"------"+record.getLevel()+"-------"+record.getClass()+"-------"+record.getLoggerName()+"----"+record.getMessage()+"\t\n";
}
});
console.setFormatter(new Formatter() { @Override
public String format(LogRecord record) {
return new SimpleDateFormat("yyyy-MM-dd hh-mm-ss").format(new Date(record.getMillis())) +"------"+record.getLevel()+"-------"+record.getClass()+"---"+record.getSourceMethodName()+"-------"+record.getLoggerName()+"----"+record.getMessage()+"\t\n";
}
});
//日志控制
log.log(Level.SEVERE, "测试日志");
log.log(Level.INFO, "测试日志");
log.log(Level.WARNING, "测试日志");
log.log(Level.OFF, "测试日志"); }
  接下来,看一下常见的日志框架,common-loggin,log4j,slf4j,logback。其实,个人认为,真正其中真正算是日志框架的只有log4j和logback而已。因为common-logging和slf4j都是进行日志框架整合的工具,本身并没有独特的日志处理功能。commons-logging其实是一个日志集合api,它通过检测classpath环境下存在怎么样的log工具,然后通过调用该工具来进行日志输出操作 。默认情况下,common-logging是通过jdk自带的log工具来实现日志输出的,当检测到项目中存在log4j此类的日志框架及其配置文件的时候,common-logging就会去调用该框架来进行日志的输出。
 
  接着,看下log4j,一个强大的日志框架。它支持文件俺输出,复杂的自定义格式输出,支持输出成html,数据库等,一系列的强大功能让它成为了许多开源框架首选的日志工具。具体的关于log4j的配置,后续继续更新。
 
  再说说slf4j,其实它和common-logging有相似的功能,只不过,它并不是通过自己实现日志的整合,而是通过定义接口的,定义标准的方式进行的。Common-logging是通过自身来实现日志框架的调用,而slf4j并不同,它自身其实并没有实现功能,它定义了接口,使用它进行日志输出,通常需要导入slf4j的标准包,日志框架的包,还有就是继承了slf4j定义的接口的操作对应日志框架的实现类包。表面上,我们是在使用slf4j进行日志输出,其实,我们使用的是对应的实现类包中的方法进行日志输出。
 
  最后一个说到的日志框架,是logback,他和slf4j,log4j是同一个作者。后期,log4j停止了更新后,他又开源了一个新的日志框架就是logback,目前,国外的许多框架也已经开始使用logback了。因为是同出一人,所以logback的一些api其实与log4j有些相似之处,同时,logback也符合slf4j定义的标准,所以如果在项目中使用了slf4j和log4j,后期要改成logback,需要做的调整会比较少。

循序渐进看Java web日志跟踪(2)-Java日志API认识的更多相关文章

  1. Java Web项目中缺少Java EE 6 Libraries怎么添加

    Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...

  2. 《Java Web开发实战》——Java工程师必备干货教材

    一年一度毕业季,又到了简历.offer漫天飞,失望与希望并存的时节.在IT行业,高校毕业生求职时,面临的第一道门槛就是技能与经验的考验,但学校往往更注重学生的理论知识,忽略了对学生实践能力的培养,因而 ...

  3. java web 学习 --第六天(Java三级考试)

    第五天学习在这:http://www.cnblogs.com/tobecrazy/p/3458592.html session对象 当某个用户首次访问web应用系统时,jsp会自动创建出一个sessi ...

  4. Java Web项目报错java.lang.NullPointerException at org.apache.jsp.front.index_jsp._jspInit(index_jsp.java:30)

    环境:myeclipse+tomcat6+jdk6 今天搭建了一个Java Web项目,访问index.jsp时报如下错误: 严重: Servlet.service() for servlet jsp ...

  5. 【java web】Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

    javaweb报错如下:22:49:22.155 [http-nio-8081-exec-9] ERROR org.apache.struts2.dispatcher.DefaultDispatche ...

  6. 我的第7个java程序--把java web项目改为java project项目--mybatis

    连接数据库需要 程序,连接字符串,查询语句 主程序->读取连接字符串->读取查询语句->把查询到的值赋值给映射对象->打印对象属性 java project的好处,不用做那么多 ...

  7. Java Web接入支付宝扫码付款API(使用SDK证书配置properties )

    一.支付宝当面付功能Demo 官方文档https://docs.open.alipay.com/194/106078/ ps:因为沙箱环境一经配置了证书公钥则无法重置 第一步下载项目SKD&D ...

  8. Java Web表达式注入

    原文:http://netsecurity.51cto.com/art/201407/444548.htm 0×00 引言 在2014年6月18日@终极修炼师曾发布这样一条微博: 链接的内容是一个名为 ...

  9. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  10. ref:一种新的攻击方法——Java Web表达式注入

    ref:https://blog.csdn.net/kk_gods/article/details/51840683 一种新的攻击方法——Java Web表达式注入 2016年07月06日 17:01 ...

随机推荐

  1. WXPP QuickFramework V2.0

    微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github   用了一个多星期的时间,把微信快速开发框架进行了改进,之前1.0版本针对的是普通订阅号,V2. ...

  2. Python网络爬虫

    http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...

  3. WPF界面按钮美化

    在App.xaml里加入全局按钮样式 <Application x:Class="WpfButton.App" xmlns="http://schemas.micr ...

  4. IT团队管理

    如果在IT项目实施中选出最难解决的几个问题,那么管理问题一定名列前茅.在管理问题中,团队管理又是其中的难点.一个项目管理的 好坏,很大程度就体现在团队的建设和管理上.团队管理涉及到管理学.心理学和哲学 ...

  5. JavaScript模板引擎原理

    JavaScript模板引擎原理,几行代码的事儿 2013-12-03 16:35 by BarretLee, 650 阅读, 6 评论, 收藏, 编辑 一.前言 什么是模板引擎,说的简单点,就是一个 ...

  6. 2013.7.19 STL库的学习

    STL提供了一组表示容器,迭代器,函数对象和算法的模板. 容器是一个与数组类似的单元,可以存储若干个值.容器是同质的,即存储的值的类型一样. 算法是完成特定任务的处方. 迭代器能够用来遍历容器的对象, ...

  7. JQuery的插件式开发

    如果你只会JQuery的插件式开发, 那么你可以进来看看? 对于JQuery的学习,已经有3年多的时间了,直到去年与我的组长一起做项目,看到他写的JS,确实特别漂亮,有时甚至还看不太懂, 我才发现其实 ...

  8. windows下使用git时生成sshkey和配置

    在windows下如何安装git就不介绍了,我这里主要使用的TortoiseGit,主要记录下在windows上如何通过sshkey链接git 在开始菜单中找到git bash,git bash是gi ...

  9. 项目结构的设计(iOS篇)

    项目结构的设计(iOS篇) 本文附带源码:YoungHeart-Chapter-02.zip 在设计任何一个框架之前,都应规划好项目结构. 假定Git作为我们的项目管理工具.我们要建立两个仓库,一个用 ...

  10. linux下使用kpartx挂载虚拟文件系统

    在linux中,如果映像文件(.img)含有分区表的话,那么用losetup这个程序来加载文件系统就有点力不从心了.因为losetup只能加载无分区的文件系统映像文件.不过有一个好东西配合losetu ...