java日志——基本日志+高级日志

【0】README

0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java日志——基本日志+高级日志 的相关知识;


【1】记录日志

1.1)出现的问题和解决方法:

  • 1.1.1)出现的问题:在我们调试的时候, 通过喜欢 插入 System.out.println 语句来辅助我们调试, 当出现新的问题,又要插入 该语句进行调试。
  • 1.1.2)解决方法:记录日志API 就是为了解决这个问题而设计的。

1.2)下面是记录日志 API的优点(Priority):

  • P1)可以很容易地取消全部日志记录, 或者仅仅取消某个级别的日志, 而且打开和关闭这个操作也很容易;
  • P2)可以很简单地禁止日志记录的输出, 因此,将这些日志代码留在程序中的开销很小;
  • P3)日志记录可以被定向到不同的处理器, 用于在控制台中显示, 用于存储在文件中等;
  • P4)日志记录器和处理器都可以对记录进行过滤。 过滤器可以根据过滤实现器制定的标准丢弃那些无用的记录项;
  • P5)日志记录可以采用不同的方式格式化,例如, 纯文本或 xml;
  • P6)应用程序可以使用 多个 日志记录器, 他们使用类似包名的这种具有层次结构的名字, 如, com.a.b.c;
  • P7)在默认情况下, 日志系统的配置由配置文件控制。 如果需要的话, 应用程序可以替换这个配置;

【2】基本日志

2.1)看个荔枝:日志系统管理者一个名为 Logger.global 的默认日志记录器, 可以用System.out 替换他, 并通过调用 info 方法记录日志信息:

Logger.getGlobal().info("File->Open menu item seleted");

2.1.1)在默认情况下,这条记录将会显示如下内容:

May 10, 2013 10:12:25 PM LoggingImageView fileOpen
INFO: FIle->Open menu item selected

这里写图片描述
Attention)

  • A1)自动包含了 时间、调用的类名和方法名;
  • A2) 如果在相应的地方调用 Logger.getGlobal().setLevel(Level.OFF);将会取消所有日志;

Warning)在修改bug 7184195 前,还需要调用 Logger.getGlobal().setLevel(Level.INFO)来激活全局日志记录器;


【3】高级日志

3.1)在一个专业的应用程序中, 不要将所有的日志都记录到 一个全局日志记录器中, 而是可以自定义日志记录器;
* 3.1.1)调用 getLogger方法可以创建或 检索记录器

private static final Logger myLogger =  Logger.getLogger("com.mycompany.myapp");

3.2)与包名类似, 日志记录器名也具有层次结构,且层次性更强

  • 3.2.1)对于包来说, 一个包的名字与其父包的名字间没有语义关系, 但是日志记录器的父与子间将共享某些属性;
  • 3.2.2)看个荔枝: 如果对 com.mycompany 日志记录器设置了 日志级别, 它的子记录器也会继承这个级别, 通常有7个日志记录器级别(Level):

    • L1) SEVERE
    • L2) WARNING
    • L3) INFO
    • L4) CONFIG
    • L5) FINE
    • L6) FINER
    • L7) FINEST
  • 3.2.3)默认情况下, 只记录前3个级别, 也可以设置其他级别;

logger.setLevel(Level.FINE);
  • 3.2.4)使用 Level.ALL 开启所有级别的记录, 使用 Level.OFF 关闭所有级别的记录;

3.3)对于所有的基本有下面几种记录方法(Methods):

  • M1) logger.warning(msg);
  • M2) logger.fine(msg);
  • M3)使用log 方法指定级别: logger.log(Lebel.FINE, msg);

Hint)默认的日志配置记录了 INFO 或更高级别的所有记录, 因此,应该使用 CONFIG、FINE, FINER, FINEST 级别来记录那些有助于诊断, 但对于程序员有没有太大意义的调试信息;
Warning)如果将记录设计为INFO 或更低, 则需要修改日志处理器的配置, 默认的日志处理器不会处理低于 INFO 级别的信息;
3.4)默认的日志记录将显示包含日志调用的类名和方法名, 如同堆栈所显示的那样。 但是, 如果虚拟机对执行过程进行了优化, 就得不到准确的调用信息。 此时, 可以调用 logp 方法获得调用类和方法的确切位置, 这个方法的签名为:

void logp(level l , String className, String methodName, String msg)
  • 3.4.1)下面有一些跟踪执行流的方法:
void entering(String className, String methodName)
void entering(String className, String methodName, Object param)
void entering(String className, String methodName, Object[] params)
void entering(String className, String methodName)
void entering(String className, String methodName, Object result)
  • 3.4.2)看个荔枝:
int read(Strinf file, String pattern)
{logger.entering("com.mycompany.mylib.Reader", "read", new Object[] {file, pattern});......logger.exiting("com.mycompany.mylib.Reader", "read", count);return count;
}
  • 这些调用将生成FINER 级别和以 字符串“ENTRY” 和 “RETURN”开始的日志记录;

3.5)记录日志的常见用途是记录那些不可预料的异常。 可以使用下面两个方法提供日志记录中包含的异常描述内容(Methods):

  • 日志记录 API 如下:
void throwing(String className, String methodName, Throwable t)
void log(Level l , String msg, Throwable t)
  • M1)典型用法是:
if(...)
{IOException exception = new IOException("");logger.throwing("com.mycompany.mylib.Reader", "read", exception);throw exception;
}
  • M2)还有一种:
try
{...
}
catch(Exception e)
{Logger.getLogger("com.mycompany.myapp").log(Level.WARNING, "Reading image", e);
}
  • 调用throwing 可以记录一条 FINER 级别的记录和一条以 THROW 开始的信息;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java模式匹配_用Java匹配模式

java模式匹配如果您使用的是Java,那么您很有可能以前已经看过它的模式匹配。 String#matches(String)方法在内部使用Pattern类型,该类型包含更复杂的功能: 通过编译正则表达式来创建Pattern 。 该模式与任何输入字符串匹配,并且可…

java在frame怎么计时_java – 退出jframe时的Swing stop计时器

我有一个特定的任务,我按计划的时间间隔运行.基本上我在JFrame中的Label上显示相机.但是,当我退出JFrame时,应用程序似乎运行.我怎么能阻止它?我已经删除了代码的细节,只是将相关部分留在了public class TaskCLass extends JFrame {JPanel p;JLabel l;Timer timer;p…

java日志——修改日志管理器配置+日志本地化

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java日志——修改日志管理器配置日志本地化 的相关知识; 【1】修改日志管理器配置 1.1)可以通过编辑配置文件来修改日志系统的各种属性。 在默认情况下&a…

jpa embedded_JPA @Embeddable和@Embedded

jpa embedded介绍: 作为一个面向对象的开发人员,我们希望避免使用带有大量不相关字段的大型类。 因此,我们可能经常感到有必要使用多个对象来表示JPA实体。 在本快速教程中,我们将学习如何使用JPA或Hibernate中的Embedded和Embed…

jdk内置线程实例_EA问题的JDK14实例

jdk内置线程实例Tagir Valeev最近发布了一条有关即将发布的Java JDK14版本的预览功能的推文: #Java14模式匹配将名称隐藏带入了更高的疯狂程度。 在这里,我为FLAG字段添加或删除了final修饰符,该修饰符仅在不可达的if分支中访问。…

intro to Apache Log4j 2

【0】README 0.1)本文作为 原文(http://logging.apache.org/log4j/2.x/)的译文,仅作参考, 旨在了解 Log4j 2 的相关知识 ; 0.2) Apache Log4j 2 是Log4j的升级版,并对其前任Log4j …

php注册页面模板,选项卡式WordPress登陆注册模板

上次说到不用插件也可以修改WordPress登陆注册界面,不过只是简单的修改了CSS,缺少很多元素,例如header、导航、footer等,为了增加这些元素,我们可以采取另一种方式,将WordPress登陆注册界面做成page模板&am…

内核堆栈 用户堆栈_弹性堆栈介绍

内核堆栈 用户堆栈当您运行对公司至关重要的软件时,您将无法拥有仅用于分析一段时间前发生的事情的日志,让客户端告诉您您的应用程序已损坏,而您甚至不知道发生了什么是真实的问题。 解决该问题的方法之一是使用监视和日志记录。 大多数应用…

php 字符串 中文,php 中文字符串截取乱码

PHP截取字符串如果是英文直接用substr就可以了,但对于中文字符,用substring可能会导致乱码,那么将如何解决呢?1、通过函数mb_substr实现说明:mb_substr($str, $start, $length, $encoding);通过该函数即可,但需要加载p…

java 调试技巧

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 java 调试技巧 的相关知识; 【1】调试技巧相关 1.1)可以用下面的方法打印或记录任意变量的值: System.out.println("x " x); 或 …

jdk 版本和内部版本对应_JDK 14 Rampdown:内部版本27

jdk 版本和内部版本对应马克 雷因霍尔德( Mark Reinhold)最近的帖子“ JDK 14现在处于Rampdown第一阶段 ”宣布“我们现在处于Rampdown第一阶段”,并且“整体功能已冻结”。 JDK 14 Early Access Build #27(2019/12/12…

对一个java源文件进行正确编译,给定如下一个Java源文件Child.java,编译并运行Child.java,以下结果正确的是()...

总成化无本优部问决企题业内法解,给定流配特别题是物送问。而他再告真的不是己这却一诉自,个源文译并运行下某人重病的家得了假如人忽然间,的应对策略有他使用到。结果感是个人自我指一效能对:。哲学的规揭示律一般,管…

异常java.lang.Thread.dumpStack(Unknown Source)

转自: http://www.blogjava.net/landon/archive/2011/02/27/345265.html 昨天在公司写了一段代码,很简单,就是测试Thread的dumpStack方法的使用。 因为Thread的dumpStack方法不是很常用,但它对于如果想看看谁在运行时调用方法还是…

java集合框架——接口图+类图+遗留类图

【0】README 0.1)绝对的干货,理清 java集合框架中类和接口的层次关系;

构建maven项目插件_如何构建一个Maven插件

构建maven项目插件使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。 由于其插件生态系统的普及,Apache Maven仍然是Java领域最受欢迎的构建工具。 很容易找到…

shu函数php,【函数分享】每日PHP函数分享(2021-3-3)

array_intersect_assoc — 带索引检查计算数组的交集说明array_intersect_assoc ( array $array1 , array $array2 , array $... ? ) : arrayarray_intersect_assoc() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意和 arra…

spring 注释_Spring@主要注释

spring 注释介绍: 当存在多个相同类型的bean时,使用Spring Primary批注为标记的bean提供更高的优先级。 默认情况下,Spring按类型自动连线。 因此,当Spring尝试自动装配并且有多个相同类型的bean时,我们将得到一个NoU…

java集合——集合接口+迭代器接口

【0】README 0.1) 本文描述转自 core java volume 1, 源代码 diy 的, 旨在理解 java集合框架——集合接口迭代器接口 的相关知识; 0.2) for full source code , please visit https://github.com/pacosonTang/core-j…

snmp在php中的使用,在php中转换python代码以计算snmpvlan掩码的最佳方法

我有一些python代码,我想在一个100%的php代码中使用。你知道我怎么转换代码吗???我在转换代码时遇到问题,尤其是部分get bit和set bit。在位掩码通过snmp从交换机中读取,掩码表示交换机端口位于定义的vlan中…

java ssl发送邮件_通过SSL发送的Java邮件

java ssl发送邮件抽象 本博客的目的是演示如何使用Java Mail通过具有SSL连接的SMTP服务器发送电子邮件。 免责声明 这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但最终自己做出决定,风险自负。 要求 我使用以…