`
maimode
  • 浏览: 416218 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

日志系统入门

阅读更多
日志是系统开发过程中非常常用的技术之一,平时一直都在使用,但是对其没有系统的学习,因此可能导致使用不当造成效率不高的缺陷。

以下资料摘自网络,通过查阅资料增进对日志系统的熟悉和理解。

常用日志系统简介(摘自:http://blog.csdn.net/mike841211/article/details/2328221片段)
在 Java 世界中,以下三种日志框架比较优秀:
1)        Log4J
最早的 Java 日志框架之一,由 Apache 基金会发起,提供灵活而强大的日志记录机制。但是其复杂的配置过程和内部概念往往令使用者望而却步。
2)        JDK1.4 Logging Framework
继 Log4J 之后, JDK 标准委员会将 Log4J 的基本思想吸收到 JDK 当中,在 JDK1.4 中发布了第一个日志框架接口,并提供了一个简单实现。
3)        Commons Logging Framwork
该框架同样是 Apache 基金会项目,其出现主要是为了使得 Java 项目能够在 Log4J 和 JDK1.4 l Logging Framework 的使用上随意进行切换,因此该框架提供了统一的调用接口和配置方法。

(以下摘自:http://www.blogjava.net/fantasy/archive/2006/03/16/35719.html片段)
为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一?

Commons-loggin的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog?),所以一般不会单独使用它。
Log4j的功能非常全面强大,是目前的首选。我发现几乎所有的Java开源项目都会用到Log4j,但我同时发现,所有用到Log4j的项目一般也同时会用到commons-loggin。我想,大家都不希望自己的项目与Log4j绑定的太紧密吧。另外一个我能想到的“同时使用commons-logging和Log4j”的原因是,简化使用和配置。
       强调一点,“同时使用commons-logging和Log4j”,与“单独使用Log4j”相比,并不会带来更大的学习、配置和维护成本,反而更加简化了我们的工作。我想这也是为什么“所有用到Log4j的项目一般也同时会用到commons-loggin”的原因之一吧。


Commons-logging能帮我们做什么?

l         提供一个统一的日志接口,简单了操作,同时避免项目与某个日志实现系统紧密a耦合
l         很贴心的帮我们自动选择适当的日志实现系统(这一点非常好!)
l         它甚至不需要配置


这里看一下它怎么“‘很贴心的’帮我们‘自动选择’‘适当的’日志实现系统”:
1)        首先在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类;
2)        如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类;
3)        否则,查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类;
4)        否则,使用JDK自身的日志实现类(JDK1.4以后才有日志实现类);
5)        否则,使用commons-logging自己提供的一个简单的日志实现类SimpleLog;
(以上顺序不保证完全准确,请参考官方文档)


可见,commons-logging总是能找到一个日志实现类,并且尽可能找到一个“最合适”的日志实现类。我说它“很贴心”实际上是因为:1、可以不需要配置文件;2、自动判断有没有Log4j包,有则自动使用之;3、最悲观的情况下也总能保证提供一个日志实现(SimpleLog)。
       可以看到,commons-logging对编程者和Log4j都非常友好。
       为了简化配置commons-logging,一般不使用commons-logging的配置文件,也不设置与commons-logging相关的系统环境变量,而只需将Log4j的Jar包放置到classpash中就可以了。这样就很简单地完成了commons-logging与Log4j的融合。如果不想用Log4j了怎么办?只需将classpath中的Log4j的Jar包删除即可。
就这么简单!
代码应该怎么写?

我们在需要输出日志信息的“每一人”类中做如下的三个工作:
1、导入所有需的commongs-logging类:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
如果愿意简化的话,还可以两行合为一行:
import org.apache.commons.logging.*;


2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:
private static Log log = LogFactory.getLog(YouClassName.class);
注意这里定义的是static成员,以避免产生多个实例。
LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。为什么不写作LogFactory.getLog(this.getClass())?因为static类成员访问不到this指针!


3、使用org.apache.commons.logging.Log类的成员方法输出日志信息:
log.debug("111");
log.info("222");
log.warn("333");
log.error("444");
log.fatal("555");
这里的log,就是上面第二步中定义的类成员变量,其类型是org.apache.commons.logging.Log,通过该类的成员方法,我们就可以将不同性质的日志信息输出到目的地(目的地是哪里?视配置可定,可能是stdout,也可能是文件,还可能是发送到邮件,甚至发送短信到手机……详见下文对log4j.properties的介绍):
l         debug()   输出“调试”级别的日志信息;
l         info()      输出“信息”级别的日志信息;
l         warn()    输出“警告”级别的日志信息;
l         error()     输出“错误”级别的日志信息;
l         fatal()      输出“致命错误”级别的日志信息;
根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试(DEBUG)”“信息(INFO)”“警告(WARN)”“错误(ERROR)”“致命错误(FATAL)”。为什么要把日志信息分成不同的级别呢?这实际上是方便我们更好的控制它。比如,通过Log4j的配置文件,我们可以设置“输出‘调试’及以上级别的日志信息”(即“调试”“信息”“警告”“错误”“致命错误”),这对项目开发人员可能是有用的;我们还可以设置“输出“警告”及以上级别的日志信息”(即“警告”“错误”“致命错误”),这对项目最终用户可能是有用的。
       仅从字面上理解,也可以大致得出结论:最常用的应该是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才使用。




从上面三个步骤可以看出,使用commons-logging的日志接口非常的简单,不需要记忆太多东西:仅仅用到了两个类Log, LogFactory,并且两个类的方法都非常少(后者只用到一个方法,前者经常用到的也只是上面第三步中列出的几个),同时参数又非常简单。
上面所介绍的方法是目前被普通应用的,可以说是被标准化了的方法,几乎所有的人都是这么用。如果不信,或想确认一下,就去下载几个知名的Java开源项目源代码看一下吧。


下面给出一个完整的Java类的代码:
package liigo.testlog;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public class TestLog
{
    private static Log log = LogFactory.getLog(TestLog.class);
 
    public void test()
    {
        log.debug("111");
        log.info("222");
        log.warn("333");
        log.error("444");
        log.fatal("555");
    }
 
    public static void main(String[] args)
    {
        TestLog testLog = new TestLog();
        testLog.test();
    }
}

只要保证commons-logging的jar包在classpath中,上述代码肯定可以很顺利的编译通过。那它的执行结果是怎么样的呢?恐怕会有很大的不同,请继续往下看。


Log4j在哪里呢?它发挥作用了吗?

应该注意到,我们上面给出的源代码,完全没有涉及到Log4j——这正是我们所希望的,这也正是commons-logging所要达到的目标之一。
可是,怎么才能让Log4j发挥它的作用呢?答案很简单,只需满足“classpath中有Log4j的jar包”。前面已经说过了,commons-logging会自动发现并应用Log4j。所以只要它存在,它就发挥作用。(它不存在呢?自然就不发挥作用,commons-logging会另行选择其它的日志实现类。)


注意:配置文件log4j.properties对Log4j来说是必须的。如果classpath中没有该配置文件,或者配置不对,将会引发运行时异常。


       这样,要正确地应用Log4j输出日志信息,log4j.properties的作用就很重要了。好在该文件有通用的模板,复制一份(稍加修改)就可以使用。

————————————————————————————————————————
下面我提供一段log4j.properties的代码样例供参考,更多详细介绍可参见http://www.iteye.com/topic/378077
#设置级别和目的地
log4j.rootLogger=debug,appender1

#输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
#自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行符号
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n

#输出到文件(这里默认为追加方式)
log4j.appender.appender2=org.apache.log4j.FileAppender
#设置文件输出路径
#【1】文本文件
log4j.appender.appender2.File=c:/log1.log
#设置文件输出样式
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
分享到:
评论

相关推荐

    日志易V2.0入门手册

    ### 日志易V2.0入门手册知识点解析 #### 数据接入方式 日志易V2.0提供了多种数据接入方式,以满足不同场景的需求。主要包括: 1. **日志易Agent**:这是一种推荐的方式,特别适合部署版用户。通过安装日志易Agent...

    SYSBIOS系统开发入门-11-2-日志 下.rar

    下面将详细讲解SYSBIOS的日志系统开发相关知识点。 1. SYSBIOS基础知识: SYSBIOS是一个可配置的、实时性能强的微内核,它提供任务调度、定时器服务、中断管理等基本功能。开发者可以根据项目需求定制内核服务,如...

    机器人操作系统入门 课程讲义 ROS 柴长坤 中国大学MOOC

    机器人操作系统入门 课程讲义 ROS 柴长坤 中国大学MOOC 目錄 前言 第一章 ROS简介 机器人时代的到来 ROS发展历程 什么是ROS 安装ROS 安装ROS-Academy-for-Beginners教学包 二进制与源码包 安装RoboWare Studio 单元...

    SYSBIOS系统开发入门-11-1-日志 上.rar

    在嵌入式系统开发中,日志系统是必不可少的工具,它能够记录系统运行过程中的事件、状态变化和错误信息,便于开发者理解和分析系统行为。SYSBIOS的日志功能提供了这样的能力,允许开发者在代码中插入日志语句,这些...

    ROS操作系统入门讲义_ROS操作系统入门讲义_

    13. **调试与日志**:了解ROS的日志系统(`roslaunch`、`rosrun`、`roslog`等),以及如何使用`rqt_logger_level`和`rqt_console`进行调试。 14. **实践项目**:可能包含一些简单的实战项目,如创建一个简单的...

    ROS机器人操作系统讲义-机器人操作系统入门-中国大学MOOC.pdf

    目錄 前言 第一章 ROS简介 机器人时代的到来 ROS发展历程 什么是ROS 安装ROS 安装ROS-Academy-for-Beginners教学包 二进制与源码包 安装RoboWare Studio ...3中国大学MOOC---《机器人操作系统入门》 课 程讲义

    Java 日志从入门到实战.docx

    【Java 日志从入门到实战】Java 日志在软件开发中扮演着至关重要的角色,它不仅帮助程序员在项目开发和维护阶段追踪问题,还能提升系统的可维护性和安全性。本文主要针对Java程序员,深入探讨日志的各个方面,以帮助...

    Linux操作系统入门基础知识教程.pdf

    ### Linux操作系统入门基础知识详解 #### 一、硬盘与分区管理 **硬盘介绍:** 硬盘是计算机中最主要的数据存储设备之一,通常被设计成一个方形盒子的外形,内部包含旋转的磁性盘片(即所谓的“盘”),这些盘片...

    UCOS嵌入式操作系统新手入门指南

    本入门指南详细介绍了如何使用µC/OS-II嵌入式操作系统,并提供了一系列范例来帮助新手快速上手。通过这些范例,用户可以直观地了解µC/OS-II的操作原理和编程方法。在学习的过程中,用户还将接触到µC/OS-II源代码...

    Linux 系统管理入门

    【Linux系统管理入门】这篇教程主要面向初学者,旨在介绍Linux系统的文件命令,帮助读者快速掌握基础操作。在Linux环境中,几乎所有事物都被视为文件,包括硬件设备、目录和命令本身,这种设计理念是Linux强大和灵活...

    【MyBatis入门】—— MyBatis日志

    在MyBatis中,日志系统对于跟踪SQL语句和参数,以及检查执行效率至关重要。MyBatis支持两种主要的日志实现:Log4j和SLF4J。以下是对这两个日志框架的简要介绍: 1. **Log4j**:Apache Log4j 是一个广泛使用的日志库...

    EFLK海量日志实时分析检索系统应用实践课件.zip

    EFLK海量日志实时分析检索系统是一种高效的数据处理框架,尤其适用于大数据环境下的日志管理和分析。这个系统由四个主要组件构成:Elasticsearch、 Fluentd、Logstash(有时也被替换为Fluentd)和Kafka。这些组件...

    IPSAN&视频云存储系列 网络存储系统快速入门.pdf

    该平台提供了实时监控、报警、日志记录等功能,帮助管理员更好地管理存储系统。 IPSAN&视频云存储系列网络存储系统快速入门指南旨在帮助用户快速了解和掌握IPSAN&视频云存储系列网络存储系统的安装、配置和使用,为...

    Linux 操作系统入门

    Linux操作系统入门是一个对新手极其友好的主题,它涵盖了学习Linux所需的基础知识,是技术爱好者和未来系统管理员的理想起点。Linux是一套开源的操作系统,它的设计理念强调了自由、开放源码和社区驱动的开发模式。...

    阿里云-日志服务入门指南.pdf

    - **Logtail配置**:涉及操作系统选择、日志目录结构指定、日志解析规则定义以及应用到机器组,确保日志有效收集。 4. **日志消费**: - **控制台预览**:用户可以直接在日志服务控制台预览LogStore中的日志,...

    阿里云-日志服务入门指南-D.docx

    1. **创建项目和日志库**:首次进入控制台时,系统会引导创建项目和日志库,需指定写入吞吐容量和区域。创建日志库时,可设定日志使用策略。 2. **写入日志**:通过Logtail或SDK/API写入日志。Logtail需要配置操作...

    Dialogic从入门到系统工程师(pdf)

    这部分内容将教你如何分析日志,定位问题,以及如何与其他通信设备和系统进行无缝集成。同时,书中可能还会介绍Dialogic的最新技术和趋势,如云通信、WebRTC等,帮助你保持与时俱进。 总之,《Dialogic从入门到系统...

    日志综合审计系统v.ppt

    LogBase 日志综合审计系统的产品选型包括入门型、标准型、高级型等,用户可以根据自己的需求选择合适的产品。 日志综合审计系统可以帮助企业和组织检测、记录、分析和响应安全事件,确保信息系统的安全和可靠性。...

    西门子SS7-1200 PLC数据日志功能的应用.pdf

    因此,西门子S7-1200 PLC的数据日志功能被提出作为解决问题的新方法,旨在为小型控制系统提供更为可靠、易用且成本效益高的数据记录解决方案。 单片机记录尽管成本较低,但由于其运算速度慢,硬件抗干扰能力弱,...

    Linux系统怎么分析Nginx日志

    也许在目前许多学者都不知道如何分析Nginx日志,Linux系统日志下的Nginx 日志可以查看系统运行记录和出错说明,对Nginx 日志的分析可以了解系统运行的状态。...下面小编为你详解一下Linux系统入门学习的内容。

Global site tag (gtag.js) - Google Analytics