java中Logger.getLogger(Test.class)

log4的使用方法:
log4是具有日志记录功能,主要通过一个配置文件来对程序进行监测
有两种配置方式:一种程序配置,一种文件配置
有三个主要单元要了解,Logger,appender,layout.

logger是进行记录的主要类,appender是记录的方式,layout是记录的格式
logger七种日志级别:debug,info,warn,error,fatal,all,off
最常用的应该是debug()和info();而warn()、error()、fatal()仅在相应事件发生后才使用

appender主要分三类,终端输出,文件输出,流输出
ConsoleAppender
FileAppender
WriterAppender

layout也分三类:简单格式,html格式,匹配格式
SimpleLayout
HTMLLayout
PatternLayout

输出简写:(用在PatternLayout)
%m 输出代码中指定的消息
%p 输出优先级
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。一般使用了它就不需使用%c了

[按照下面步骤来写吧!就可以得到我们所想要的日志文件哦!]

[按照顺序就可以将日志文件读出来了!]
作用实例:
程序配置一般过程:
1.得到特定名称的logger
2.得到其中一个layout
3.根据layout得到appender
4.logger添加appender
5.logger设置级别
6.logger输出有级别的日志信息

程序:
Logger logger = Logger.getLogger(Test.class.getName()) //取得logger
SimpleLayout simpleLayut = new SimpleLayout() //取得layout
FileAppender fa = new FileAppender(simpleLayout,"test.log") //取得ppender
logger.addAppender(fa) //添加appender
logger.set((Level)Level.DEBUG) //设置级别
logger.debug("hihihihih") //记录信息

文件配置过程:
1.得到特定名称的logger
2.加载配置文件 (配置文件做了2-5的工作)
3.logger输出有级别的日志信息

文件配置程序:
1.Logger logger = Logger.getLogger(Test.class.getName()) //取得logger
2.使用下面的配置加载
3.输出信息

文件配置分properties,xml
读取properties:
PropertyConfigurator.configure("logTest.properties");

读取xml:
DOMConfigurator.configure("src/logTest.xml");

告别System.out.print()—J2SDK1.4新增Java日志框架 (一)

作为一名Java 程序员,最熟悉的、使用最多的调用恐怕莫过于System.out.print(“…”)。当你没有调试工具而要跟踪一个变量的值得时候;当你需要显示捕获的Exception、Error的时候;当你想知道程序在运行的时候究竟发生了什么的时候,通常的做法就是调用System.out.print把他们在终端、控制台上打印出来。这种方式对于输出信息的分类、格式化及永久保存带来诸多不便。虽然我们可以把它写入一个文件然后进行分析,但是这要需要编写额外的程序代码,其成本不可忽视!而由此给目标系统本身增加的复杂程度不可避免的使开发、调试陷入一个深深的迷潭。
[要知道一点:如果说能不写的代码最好不要写!]

JDK1.4的推出,使得这一切即将成为历史。让我们向System.out.print()告别吧,使用Java Logging API为自己的程序构建一个完整的日志记录系统!

一、第一个实例
先看一个简单的实例:SimpleLoggingTest.java
1 import java.util.logging.*;
2 public class SimpleLoggingTest {
3 public static void main(String args[]) {
4 //程序的其它处理
5 //使用Logger的静态方法获得一个匿名 //Logger
6 Logger logger1 = Logger.getAnonymousLogger();
7 //记录消息
8 logger1.log(Level.INFO,"第一条日志记录");
9 //程序的其它处理
10 }
11 }

实例1

注意:编译、执行该程序需要JDK1.4及以上版本的支持。
运行该程序,可以在控制台看到程序运行结果:

2003-1-14 15:09:40 SimpleLoggingTest main
信息: 第一条日志记录
首先,程序引用java.util.Logging包(第1行)。接着,在适当的时候获得一个Logger(记录器)类的实例(第6行,获取一个匿名的Logger)。最后,在程序需要记录信息的地方调用Logger类的log方法进行记录(第8行,记录一个INFO级别的消息)。

二、Java Logging API

Java Logging API封装在JDK1.4.0的java.util.Logging 包中。它通过产生便于最终用户、系统管理员、故障维护工程师以及软件开发团队(工程师)进行分析的日志记录为软件的开发调试和维护提供便利的手段。它捕获操作系统平台和执行程序的安全故障、配置错误、执行瓶颈和(或)Bug等数据信息,以纯文本、XML或程序员自定的某种方式将其格式化成日志记录,然后传递给内存、系统输出流、控制台、文件、Sockets等多种系统资源进行缓存和输出。

(一)、该软件包中的关键类。

n Logger: 应用程序进行日志记录调用的主要实体。 Logger对象用于记录特定系统或应用程序的消息。
n LogRecord: 用于在日志框架和单个记录处理程序之间传递记录请求。
n Handler: 日志数据的最终输出处理器。它将LogRecord对象导出到各种目标,包括内存、输出流、控制台、文件和套接字。多种Handler子类可供用于这种用途。

图一

n Level: 定义一组标准的记录级别,可用于控制记录的输出。可以把程序配置为只输出某些级别的记录,而忽略其他级别的输出。
n Filter: 精细过滤、控制记录的内容,比记录级别所提供的控制准确得多。记录API支持通用的过滤器机制,这种机制允许应用程序代码添加任意过滤器以便控制记录的输出。
n Formatter: 为LogRecord对象的格式化提供支持。

图二

n LogManager: Java Logging框架中唯一的、全局的对象,用于维护与Logger记录器及日志服务的一系列共享的数据结构及状态。它负责整个日志框架的初始化、维护一组全局性的Handle对象、维护一个树形结构的Logger的名字空间、诊测日志框架配置文件的改变从而重新读入并应用相关的参数以及负责程序停止运行时整个日志框架的清理工作。

(二)Logger

1、Logger的命名空间

在SimpleLoggingTest.java实例中,我们使用了一个匿名的(没有命名的)Logger对象。在Java Logging 框架中,Logger是可以命名的。Logger的名字空间与java类的名字空间相同的结构相同:使用“.”间隔的字符串。Logger的名字空间体现了Logger的层次结构。例如:命名为“a.b”的Logger是命名为“a.b.c”的“父”(上一级)Logger记录器。Logger的命名可以是任意的字符串,一般情况下,使用包或类的名字为Logger 进行命名。

Logger的名字空间由全局单列类LogManager的实例进行创建、维护。
[貌似在处理数据库的时候的DriverManage来管理数据库驱动一样了!]

匿名Logger不被存储在命名空间中。

2、创建Logger实例

Logger对象可以通过调用工厂方法getLogger或getAnonymousLogger获取。

//获取一个名为“A”的Logger对象

Logger loggerA= Logger.getLogger(“A”);

// 获取一个名

为“A.B”的Logger对象,其上级记录器为loggerA。

Logger loggerAB= Logger.getLogger(“A.B”);

//获取一个匿名Logger对象

Logger loggerTmp = Logger.getAnonymousLogger();

对非匿名Logger,getLogger先在命名空间中查找同名的Logger对象,如果有,则返回该Logger对象;如果不存在,则在命名空间中创建注册一个新的Logger对象,并与其上级Logger对象相关联。

匿名Logger对象属于创建它的对象的私有对象,只能由创建它的对象使用,记录一些临时性的日志信息。而命名Logger对象使全局性的,在日志框架的生存期内,除了创建它的对象外还,可由其它对象用于记录日志信息。

匿名的Logger对象由一个全局的的root Logger “” 对象(root Logger的名字为空)。这意味着所有匿名Logger对象将从root Logger “”中继承行为。

匿名Logger对象通常用于java Applet应用中。它去掉了在运行过程中的一班性的安全检查,允许其创建类对象对Logger的控制、状态信息进行修改,如:setLevel设置Logger的日志消息记录级别;addHandle增加Logger的Handle(处理器)对象等。

一个Logger对象可以拥有有零个到多个Handler实例。当没有Handler时,如不禁止日志记录沿名字空间向上传递,那该Logger对象的日志消息记录将有其拥有Handler实例的上级Logger进行处理。当一个Logger对象拥有多个 Handler实例对象时,其记录的日志数据将被所有的Handler逐一进行处理。

转载于:https://www.cnblogs.com/zhao1949/p/5949211.html

java中Logger.getLogger(Test.class)相关推荐

  1. java中logger关闭log_Log4J如何关闭Logger对象的IO流资源

    之前,在做一个项目时,客户要求在接口中对各个交易每天在monitor.trans.service三个目录下生成日志文件,monitor按日期生成文件碎片,trans每天按照日期生成一个目录,在该目录下 ...

  2. Java中的记录器 - Java日志示例

    Java中的记录器 - Java日志示例 今天我们将研究Java中的Logger.Java Logger提供了java编程的日志记录. 目录[ 隐藏 ] 1 Java中的记录器 1.1 Java Lo ...

  3. java中logger_Java日志系统---Logger之简单入门

    Java 中自带的日志系统,今天抽空了解了一点,算是入了门,所以将自己的一些心得记录下来,以备日后查看,有兴趣的朋友,看到此文章,觉得有错误或需要添加的地方,请在下方评论留言,大家可以共同进步,谢谢: ...

  4. java中e.printStackTrace()不要使用,请使用logger记录

    转https://my.oschina.net/sxgkwei/blog/825700 e.printStackTrace() 会导致锁死?这仅仅是打印啊,怎么可能?! 先别惊呼不可能,且听我细细道来 ...

  5. 关于JAVA中log4j与logslf4j打印日志用法

    为什么80%的码农都做不了架构师?>>>    关于log4j与logslf4j之间的关系,暂不提. 说说最近遇到的一件事:拿到一份源代码但里面没有任何依赖包提供(源代码本身是需要依 ...

  6. java中Log4j的使用

          当我们的代码存在有疑问的地方且不想去处理时,我们就需要把程序的日志信息输出,这时我们会用到一个类--Log4j,想用这个类,我们需要下载Log4j的引用包,下载地址如下: http://l ...

  7. Java中如何锁文件

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | liululee 来源 | 公众号「锅外的大佬 ...

  8. 关于java中敏感词检测的一些总结

    之前项目里客户提出一个需求,需要对系统中使用文本转化成语音发送的功能进行敏感词检测,禁止用户提交有敏感词的语音.通过查询各方面资料,整理了大概几种方案: 项目启动时对载入敏感词库作为缓存(一个大map ...

  9. Java中JMX管理器的作用,项目中有什么具体使用?

    作者:wuxinliulei 链接:https://www.zhihu.com/question/36688387/answer/68667704 来源:知乎 著作权归作者所有.商业转载请联系作者获得 ...

最新文章

  1. matlab-代数方程
  2. textureview 缩放_用MediaPlayer+TextureView封装一个完美实现全屏、小窗口的视频播放器...
  3. 为你的程序添加监听器
  4. 15个Java多线程面试题
  5. CXF开发及与Spring整合开发
  6. python的取负运算_python 负数取模运算实例
  7. mysql压测宕机_MySQL压测时Linux中断异常飚高,原来是因为...
  8. 方法二 NTC热敏电阻转换温度的计算方式
  9. bootstrap-datetimepicker.js与IE8的兼容问题
  10. TextCNN(文本分类)
  11. 设计模式在项目中的应用案例_三菱PLC实际项目应用案例讲解
  12. 《仿人机器人原理与实战》一第2章
  13. 案例1-合并2个不同文件夹中的csv文件到另外一个目录,相同的文件名进行数据合并,不同的文件名直接移到新文件夹...
  14. 谭浩翔c语言,严谨细致的科技尖兵丨广州市公安局黄埔区分局民警谭浩翔
  15. cpu和内存占用过高,但是任务管理器中的进程占用的内存和cpu看不出来
  16. bsoj 1512 金明的预算方案(树型DP)
  17. linux脚本乘法运算符,shell算术运算
  18. OpenCV求(图像)矩阵中最大值,最小值函数minMaxLoc() vs minMaxIdx()
  19. 如何避免“Windows Defender SmartScreen阻止无法识别的应用程序启动警告”
  20. mysql收货地址表_收货地址表结构 以及创建修改流程

热门文章

  1. k8s基础概念:pause容器和pod控制器类型
  2. MySQL怎么选择合适的存储引擎
  3. IDEA中添加tomcat服务器和创建一个新的web项目
  4. win7笔记本电脑如何分割和重命名磁盘
  5. 8086逻辑运算和移位
  6. pycharm中导入包失败,如何设置外部模块的路径
  7. MySQL三大范式详解(小白也能懂哦)
  8. 浅谈三个星期零基础入门学习Thinkphp5开发restful-api接口的心得和总结
  9. vue中页面跳转传值_vue跳转方式(打开新页面)及传参操作示例
  10. SPC5Studio 入门