`
maimode
  • 浏览: 415726 次
  • 性别: 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。这些组件...

    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系统入门学习的内容。

    日志框架入门

    ### 日志框架入门知识点详解 #### 一、Log4j简介 **Log4j** 是 Apache 软件基金会下的一个开源项目,主要用于 Java 应用程序的日志记录功能。作为一个强大的日志管理工具,Log4j 允许开发者通过配置文件灵活地控制...

Global site tag (gtag.js) - Google Analytics