`
liyixing1
  • 浏览: 957256 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

logger

阅读更多
loggers

additivity属性,决定是否从root继承

如果一个logger的名字后面跟着一个点号,它就是点号后面的那个logger的前辈(ancestor),是这个晚辈(descendant) 的前缀。如果在它自己和这个晚辈之间没有其它的前辈,它和这个晚辈之间就是父子关系。
例如,叫做"com.foo"的logger是叫做 "com.foo.Bar"的logger的父辈 。同样地,"java"是"java.util" 的父辈,是"java.util.Vector"的前辈。这和java中package的概念是一样的。

根(root)logger 位于logger阶层的最上层。它在三个方面很特别:
1.它总是存在的。
2.不能给它的level设置为null
3.不能通过name获取到它。

根logger是通过Logger.getRootLogger获取的。而非根logger是通过Logger.getLogger获取的。

logger拥有如下方法
package org.apache.log4j;

public class Logger {
// Logger creation & retrieval methods:
public static Logger getRootLogger();
public static Logger getLogger(String name);

// printing methods:
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);

// printing methods for exceptions:
public void debug(Object message, Throwable t);
public void info(Object message, Throwable t);
public void warn(Object message, Throwable t);
public void error(Object message, Throwable t);
public void fatal(Object message, Throwable t);
// generic printing method:
public void log(Level p, Object message);
}

logger的创建和检索
记录器创建时,会以如上说的结构创建。通过getLogger方法,我们可以得到一个logger。这个方法如果发现这个logger不存在,就回创建它。而getLogger方法传入的name相同,它们得到的引用是同一个。
如:
Logger x = Logger.getLogger("wombat");
Logger y = Logger.getLogger("wombat");
得到的是两个相同实例。
对于祖先logger,在创建后代logger的时候,如果祖先没有创建,那么祖先的logger会先被创建。

对于日志级别,这和UNIX的日志是一样的。而windows则叫做日志时间类型。

常用的级别

1.FATAL致命级别。这个级别表示应用出现了致命的错误。这样的错误难以恢复的。而对于java的Exception,则不应该属于这个级别。

2.ERROR错误级别。一般在发生了Exception使用

3.WARN警告级别。对系统的警告。如当发现数据不正确的时候。

4.INFO信息级别。比DEBUG级别略高。它一般用于记录系统信息,或者记录系统运行中的重要标志。

5.DEBUG调试级别。这个级别使用比较多。一般用来再开发阶段使用。来输出调试信息,方便调试。

级别包含
ALL, DEBUG, INFO, WARN, ERROR, FATAL and OFF等。
级别等级关系
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF

实现org.apache.log4j.Level接口,我们还可以定义自己的级别。

一个logger的有效级别如果没有指定(level 为null),那么它将从它的父类继承,直到root logger,找到一个level不为null的祖先为止。

logger name指定级别有效级别
root(根级别)DEBUGDEBUG
xnoneDEBUG
x.ynoneDEBUG
x.y.znoneDEBUG

如表格,只有root logger被指派了级别。这个级别的值,DEBUG,被其它的loggers X, X.Y 和 X.Y.Z继承了。

logger name指定级别有效级别
root(根级别)DEBUGDEBUG
xERRORERROR
x.yINFOINFO
x.y.zDEBUGDEBUG

如表格,所有的logger都指定了级别,无需继承。

logger name指定级别有效级别
root(根级别)INFOINFO
xDEBUGDEBUG
x.ynoneDEBUG
x.y.zWARNWARN

如表只有x.y没设置级别,它将从它的上级logger(x)继承级别DEBUG

logger name指定级别有效级别
root(根级别)DEBUGDEBUG
xERRORERROR
x.ynoneERROR
x.y.znoneERROR

如表root和x指定了级别。x.y和x.y.z未设置级别,他们将从x继承而来。

日志过滤器。
日志是通过调用对应级别的方法来完成的。如果当前的logger开启的级别高于调用的方法级别,那么过滤器就会不允许打印。


例子
package com.cgodo.log4j.test;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
private static final Logger LOGGER = Logger.getLogger("test");

/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger logger = Logger.getLogger("com.foo");
// 设置等级为info
logger.setLevel(Level.INFO);
// 它未设置级别,从com.foo继承
Logger barLogger = Logger.getLogger("com.foo.Bar");
// because WARN >= INFO.
logger.warn("warn.");
// This request is disabled, because DEBUG < INFO.
logger.debug("debug.");
// INFO >= INFO.
barLogger.info("Located nearest gas station.");
// This request is disabled, because DEBUG < INFO.
barLogger.debug("debug2");
}
}
结果只有两句级别是输出的
0 [main] WARN com.foo  - warn.
0 [main] INFO com.foo.Bar  - Located nearest gas station.

层次性的级别过滤 Threshold
它设置的是全局的过滤级别。而logger的级别只是针对当前logger的

package com.cgodo.log4j.test;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerRepository;

/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger x = Logger.getLogger("foo.bar");
x.setLevel(Level.INFO);
LoggerRepository repository = x.getLoggerRepository();
//设置了全局的为WARN
repository.setThreshold(Level.WARN);
//info < warn
x.info("Dropped message.");
//设置全局的为off
repository.setThreshold(Level.OFF);
//fatal < off
x.fatal("This is a serious message but it will also be dropped.");
repository.setThreshold(Level.ALL);
x.info("Hello world.");
//debug >= all
x.debug("Remember: DEBUG < INFO.");
}
}

输出内容为
0 [main] INFO foo.bar  - Hello world.

打印异常
package com.cgodo.log4j.test;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger x = Logger.getLogger("foo.bar");

x.setLevel(Level.ALL);
x.error("exception测试", new RuntimeException("测试"));
}
}

输出内容
0 [main] ERROR foo.bar  - exception测试
java.lang.RuntimeException: 测试
at com.cgodo.log4j.test.Test.main(Test.java:24)
分享到:
评论

相关推荐

    C# Logger C# 的日志工具

    例如,`Logger.Debug("调试信息")`、`Logger.Info("信息")`、`Logger.Warn("警告")` 和 `Logger.Error("错误")` 分别用于记录不同级别的日志信息。对于更复杂的用例,还可以使用`Logger.Log()`方法,通过传入自定义...

    java.util.logging.Logger使用详解

    ### Java.util.logging.Logger 使用详解 #### 一、创建Logger对象 在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging...

    Burpsuite插件之logger++使用方法1

    **Burpsuite插件之logger++使用方法** Logger++是一款为Burpsuite设计的增强型日志记录插件,由裁决目录开发。它与Burpsuite内置的HTTP历史记录功能相似,但提供了更全面的记录和分析能力,增加了额外的字段以帮助...

    JSLogger日志记录组件

    **JSLogger日志记录组件** JSLogger是一款轻量级的日志记录工具,它主要用于JavaScript环境中的日志收集和分析。在Web开发中,日志记录是调试和优化代码的重要手段,能够帮助开发者追踪代码执行过程,定位错误和...

    Java Logger Logging 封装

    `Logger`是Java标准库`java.util.logging`包提供的日志工具,它提供了多种级别的日志记录,如`SEVERE`、`WARNING`、`INFO`、`CONFIG`、`FINE`、`FINER`和`FINEST`。本篇文章将深入探讨Java中的`Logger`封装,以及...

    Logger日志文件查看

    "Logger日志文件查看"这一主题主要涉及如何有效查看和分析.log文件,以及可能用到的工具和技术。 1. **日志文件的格式与内容** 日志文件通常包含时间戳、事件级别(如调试、信息、警告、错误和致命错误)、源...

    fastify框架的logger日志工具

    在Fastify中,日志管理是系统监控、调试和错误追踪的关键部分,而`fastify-logger`正是Fastify官方推荐的日志插件。这个插件允许开发者以结构化的方式记录和处理应用程序的日志,提升开发效率并确保问题排查时有充足...

    Go-go-logger一个简单的Go日志管理器

    《Go-go-logger:构建高效日志管理系统》 在软件开发中,日志记录是不可或缺的一部分,它能够帮助开发者追踪程序运行状态、定位错误、优化性能。Go语言,以其简洁的语法和高效的特性,已经成为现代后端开发的热门...

    Notepad++ 插件,AndroidLogger.V1.2.7. 可以让安卓日志自动显示颜色

    AndroidLogger.V1.2.7 是专为Notepad++设计的一个插件,它针对Android开发人员优化了日志查看体验。 Android应用程序在开发过程中会产生大量的日志信息,通常这些日志是以纯文本格式存储,以.log为扩展名。默认情况...

    简单的logger类

    本文将详细介绍一个名为“简单的logger类”的实现,它支持自动创建文件来存储日志信息。 首先,我们需要理解日志记录的基本概念。日志记录允许程序员在程序执行过程中记录事件和信息,这有助于调试、性能分析和故障...

    带Androidlogger插件的notepad++

    【标题】"带Androidlogger插件的notepad++"是一个专为Android开发者设计的文本编辑器增强版本,它集成了Androidlogger插件,使得在使用Notepad++进行Android代码编辑时,可以方便地查看和分析日志信息。Notepad++...

    重写 Django REST framework drf-api-logger 应用

    在Django REST Framework(DRF)中,`drf-api-logger`是一个非常有用的库,它可以帮助开发者记录API请求的日志,以便于监控、调试和分析应用的行为。然而,原始的`drf-api-logger`可能并不完全满足所有需求,比如在...

    logger2js-1.0.6

    关于logger2js Version:v1 0 6 创意无限 简单实用 javascript logger&amp;debug toolbox logger2js logger2js是用原生态javascript语言编写的web页面js日志&amp;调试工具箱 主要用于客户端脚本的分析和查错 工具...

    开源日志库Logger使用Demo

    开源日志库Logger提供了一种更为高效、灵活且功能丰富的日志记录解决方案,相比于Android自带的`Log`类,它具有更多的定制化选项和更好的可读性。下面我们将详细探讨Logger库的使用及其优势。 Logger库通常通过...

    Geo++ RINEX Logger

    Geo++ RINEX Logger使用最新的Android API服务来记录您的设备的原始GNSS测量数据到一个RINEX文件中,包括伪距,载波相位,多普勒频率和噪声值。到目前为止,它支持GPS、GLONASS伽利略,BDS, QZSS和已经成功地测试了...

    Alarm_DB_Logger_Manager连接数据库设置

    ### Alarm_DB_Logger_Manager连接数据库设置详解 #### 一、Win7系统下安装SQL Server 2005及以上版本的数据库软件 为了确保`Alarm_DB_Logger_Manager`能够正确地与数据库建立连接,首先需要在运行该软件的计算机上...

    android studio,日志框架Logger的使用

    日志框架Logger的使用

    深信服日志分析管理系统SIP-Logger白皮书

    深信服日志分析管理系统SIP-Logger白皮书 深信服日志分析管理系统SIP-Logger白皮书是深信服科技股份有限公司发布的一份白皮书,旨在介绍深信服SSLVPN产品的功能和技术优势。本文档详细介绍了深信服SSLVPN三合一网关...

    Galbanum.Logger源程序

    《Galbanum.Logger源程序深度解析》 在IT行业中,日志记录是系统开发不可或缺的一部分,它对于问题排查、性能优化以及系统监控至关重要。本文将深入探讨名为Galbanum.Logger的源程序,这是一种专为.NET环境设计的...

    qt-logger.rar

    Logger *logger = Logger::rootLogger(); // 设置logger级别 logger-&gt;setLevel(Level::DEBUG); // 创建并添加Appender ConsoleAppender *consoleAppender = new ConsoleAppender(LayoutPtr(new ...

Global site tag (gtag.js) - Google Analytics