`
林奇峰
  • 浏览: 41009 次
  • 性别: Icon_minigender_1
  • 来自: 濮阳
社区版块
存档分类
最新评论

JDK自带日志--logger

    博客分类:
  • j2se
 
阅读更多

简单介绍:

Logger 对象用来记录特定系统或应用程序组件的日志消息。一般使用圆点分隔的层次名称空间来命名 Logger。Logger 名称可以是任意的字符串,但是它们一般应该基于被记录组件的包名或类名,如 java.net 或 javax.swing。此外,可以创建“匿名”的 Logger,其名称未存储在 Logger 名称空间中。

可通过调用某个 getLogger 工厂方法来获得 Logger 对象。这些方法要么创建一个新 Logger,要么返回一个合适的现有 Logger。

日志消息被转发到已注册的 Handler 对象,该对象可以将消息转发到各种目的地,包括控制台、文件、OS 日志等等。

每个 Logger 都跟踪一个“父”Logger,也就是 Logger 名称空间中与其最近的现有祖先。

每个 Logger 都有一个与其相关的 "Level"。这反映了此 logger 所关心的最低 Level。如果将 Logger 的级别设置为 null,那么它的有效级别继承自父 Logger,这可以通过其父 Logger 一直沿树向上递归得到。

可以根据日志配置文件的属性来配置日志级别,在 LogManager 类的描述中对此有所说明。但是也可以通过调用 Logger.setLevel 方法动态地改变它。如果日志级别改变了,则此变化也会影响它的子 logger,因为任何级别为 null 的子 logger 的有效级别都继承自它的父 Logger。

对于每次日志记录调用,Logger 最初都依照 logger 的有效日志级别对请求级别(例如 SEVERE 或 FINE)进行简单的检查。如果请求级别低于日志级别,则日志记录调用将立即返回。

通过此初始(简单)测试后,Logger 将分配一个 LogRecord 来描述日志记录消息。接着调用 Filter(如果存在)进行更详细的检查,以确定是否应该发布该记录。如果检查通过,则将 LogRecord 发布到其输出 Handler。在默认情况下,logger 也将 LogRecord 沿树递推发布到其父 Handler。

每个 Logger 都有一个与其关联的 ResourceBundle 名称。该指定的包用于本地化日志消息。如果一个 Logger 没有自己的 ResourceBundle 名称,则它将通过其父 Logger 沿树递归继承到 ResourceBundle 名称。

大多数 logger 输出方法都带有 "msg" 参数。此 msg 参数可以是一个原始值,也可以是一个本地化的键。在格式化期间,如果 logger 具有(或继承)一个本地化 ResourceBundle,并且 ResourceBundle 包含 msg 字符串的映射关系,那么用本地化值替换 msg 字符串。否则使用原来的 msg 字符串。通常,格式器使用 java.text.MessageFormat 形式的格式来格式化参数,例如,格式字符串 "{0} {1}" 将两个参数格式化为字符串。

将 ResourceBundle 名称映射到 ResourceBundle 时,Logger 首先试图使用该线程的 ContextClassLoader。如果 ContextClassLoader 为 null,则 Logger 将尝试 SystemClassLoader。作为初始实现中的临时过渡功能,如果 Logger 无法从 ContextClassLoader 或 SystemClassLoaderis 中找到一个 ResourceBundle,则 Logger 将会向上搜索类堆栈并连续调用 ClassLoader 来试图找到 ResourceBundle(此调用堆栈搜索是为了允许容器过渡到使用 ContextClassLoader,该功能可能在以后版本中取消)。

格式化(包括本地化)是输出 Handler 的责任,它通常会调用格式器。

注意,格式化不必同步发生。它可以延迟,直到 LogRecord 被实际写入到外部接收器。

日志记录方法划分为 5 个主要类别:

  • 一系列的 "log" 方法,这种方法带有日志级别、消息字符串,以及可选的一些消息字符串参数。

  • 一系列的 "logp" 方法(即 "log precise"),其与 "log" 方法相似,但是带有显式的源类名称和方法名称。

  • 一系列的 "logrb" 方法(即 "log with resource bundle"),其与 "logp" 方法相似,但是带有显式的在本地化日志消息中使用的资源包名称。

  • 还有跟踪方法条目("entering" 方法)、方法返回("exiting" 方法)和抛出异常("throwing" 方法)的便捷方法。

  • 最后,还有一系列在非常简单的情况下(如开发人员只想为给定的日志级别记录一条简单的字符串)使用的便捷方法。这些方法按标准级别名称命名("severe"、"warning"、"info" 等等),并带有单个参数,即一个消息字符串。

 

对于不带显式源名和方法名的方法,日志记录框架将尽可能确定日志记录方法中调用了哪个类和方法。但是应认识到,这样自动推断的信息可能只是近似的,甚至可能是完全错误的。这是因为允许虚拟机在 JIT 编译时可以进行广泛的优化,并且可以完全移除栈帧,导致它无法可靠地找到调用的类和方法。

Logger 上执行的所有方法都是多线程安全的。

子类化信息:注意,对于名称空间中的任意点,LogManager 类都可以提供自身的指定 Logger 实现。因此,Logger 的任何子类(它们与新的 LogManager 类一起实现的情况除外)要注意应该从 LogManager 类获得一个 Logger 实例,并应该将诸如 "isLoggable" 和 "log(LogRecord)" 这样的操作委托给该实例。注意,为了截取所有的日志记录输出,子类只需要重写 log(LogRecord) 方法。所有其他日志记录方法作为在此 log(LogRecord) 方法上的调用而实现。

 

基础功能实现:

Logger log = Logger.getLogger("lavasoft");
log.setLevel(Level.ALL);
System.out.println("日志级别是"+log.getLevel());
log.finest("log  finest");
log.finer("log  finer");
log.fine("log  fine");
log.info("log info"); 
log.warning("log  warning");
System.out.println("父日志"+log.getParent().getName());

 复杂功能:

public static void main(String[] args) { 
                //"javasoft"是"javasoft.blog"的父,这是规定,原理是:命名空间问题
                Logger log1 = Logger.getLogger("javasoft");
                log1.setLevel(Level.ALL);
                
                //log1是log的父日志,如果子日志没有设置Level,默认继承父level,如果没有绑定**Handler,默认继承父日志绑定的Handler
                Logger log = Logger.getLogger("javasoft.blog");
                
                ConsoleHandler consoleHandler = new ConsoleHandler();
                FileHandler filehandler = null;
                try {
                	filehandler = new FileHandler("log.xml");
                 } catch (SecurityException e) {
	  e.printStackTrace();
                 } catch (IOException e) {
	  e.printStackTrace();
                 }
                
                log1.addHandler(consoleHandler);
                log1.addHandler(filehandler);
                filehandler.setLevel(Level.WARNING);
                consoleHandler.setLevel(Level.FINE);
                

                System.out.println("日志级别是"+log.getLevel());
                log.finest("log  finest");
                log.finer("log  finer");
                log.fine("log  fine");
                log.info("log info"); 
                log.warning("log  warning");
                System.out.println("父logger:"+log.getParent().getName());
                System.out.println("父logger:"+log.getParent().getParent().getName());
                System.out.println(log.getParent().getParent()==log1);
        }

 

 

 

 

 

分享到:
评论

相关推荐

    bcprov-jdk15on-1.68-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.68.jar; 赠送原API文档:bcprov-jdk15on-1.68-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.68-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.68.pom; 包含翻译后的API文档...

    bcmail-jdk15on-1.58,bcprov-jdk15on-1.58,bcpkix-jdk15on-1.58

    包含 bcmail-jdk15on-1.58,bcprov-jdk15on-1.58,bcpkix-jdk15on-1.58 3个jar

    bcprov-jdk15on-1.54.jar bcprov-ext-jdk15on-1.54.jar下载

    2.将下载的两个JAR文件复制到:JDK安装目录\jre\lib\ext下,例如我的就是D:\Program Files (x86)\java\JDK1.6\jre\lib\ext 3.打开java.security文件:在JDK安装目录\jre\lib\security下的java.security文件。

    bcprov-jdk15on-1.60-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.60.jar; 赠送原API文档:bcprov-jdk15on-1.60-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.60-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.60.pom; 包含翻译后的API文档...

    bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar压缩文件

    bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar压缩文件

    bcpkix-jdk15on-1.56/bcprov-jdk15on-1.56

    bcpkix-jdk15on-1.56 好用

    bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar

    该压缩文件包含bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar,bcprov-jdk15on-154中移除了一些加密算法,bcprov-ext-jdk15on-154中依然保留。可以解决JDK1.6 HttpClient访问https网页报的错

    bcprov-jdk15on-1.68-API文档-中英对照版.zip

    赠送jar包:bcprov-jdk15on-1.68.jar; 赠送原API文档:bcprov-jdk15on-1.68-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.68-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.68.pom; 包含翻译后的API文档...

    bcprov-jdk15on-1.52-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.52.jar; 赠送原API文档:bcprov-jdk15on-1.52-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.52-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.52.pom; 包含翻译后的API文档...

    bcpkix-jdk15on-1.68-API文档-中文版.zip

    赠送jar包:bcpkix-jdk15on-1.68.jar; 赠送原API文档:bcpkix-jdk15on-1.68-javadoc.jar; 赠送源代码:bcpkix-jdk15on-1.68-sources.jar; 赠送Maven依赖信息文件:bcpkix-jdk15on-1.68.pom; 包含翻译后的API文档...

    bcprov-jdk15on-1.59-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.59.jar; 赠送原API文档:bcprov-jdk15on-1.59-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.59-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.59.pom; 包含翻译后的API文档...

    bcprov-jdk15on-1.60.jar中文文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    bcprov-jdk15on-1.56.jar中文文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    bcprov-jdk15on-1.54.jar中文文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    java-jdk1.8-8u361-all-jdk-win-linux

    java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...

    bcprov-jdk15on-1.54.jarr和bcprov-ext-jdk15on-1.54.jar和教程.rar

    bcprov-jdk15on-1.54.jarr和bcprov-ext-jdk15on-1.54.jar和教程 win10 64位 java1.8连接SQL Server2008报错 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    bcprov-jdk15on-1.58-API文档-中文版.zip

    赠送jar包:bcprov-jdk15on-1.58.jar; 赠送原API文档:bcprov-jdk15on-1.58-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.58-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.58.pom; 包含翻译后的API文档...

    bcprov-jdk15on-1.64.jar

    ECC 加密工具jar包 bcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jarbcprov-jdk15on-1.64.jar

    bcprov-jdk15on-1.58.jar中文文档.zip

    (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...

    bcprov-jdk15on-154.jar--bcprov-ext-jdk15on-154.jar.zip

    bcprov-jdk15on-154.jar--bcprov-ext-jdk15on-154.jar.zip

Global site tag (gtag.js) - Google Analytics