20145204 《Java程序设计》第8周学习总结
教材学习内容总结
- java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可以在java平台中使用。使用日志的起点是logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,要使用logger实例,必须使用Logger的静态方法。
Logger logger = Logger.getLogger("ch08.Main");
-
调用getLogger()时,必须指定Logger实例所属名称空间(Name space),名称空间以"."作为层级区分,名称空间层级相同的Logger,其父Logger组态相同。
-
Logger与Handler预设都会先依Level过滤信息,如果没有做任何修改,取得的Logger实例之父Logger组态,就是Logger.GLOBAL_LOGGER_NAME名称空间Logger实例的组态,这个实例的Level设定为INFO,可通过Logger实例的getParent()取得父Logger实例,可通过getLevel()取得设定的Level实例。在没有任何组态设定的情况下,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL-LOGGER-NAME名称空间logger实例设定的Level.INFO,才可能输出信息。
-
在经过Logger过滤之后,还得再经过Handler的过滤,一个Logger可以拥有多个Handler,可通过Logger的addHandler()新增Handler实例。
-
handler是负责输出,Formatter负责格式化,而信息过滤是由Filter。handler有默认的isloggable()操作,会先依据Level过滤信息,在使用指定的filter过滤信息。
-
用程序根据不同地区使用者,呈现不同语言、日期格式等称为本地化(Localization),如果应用程序设计时,可在不修改应用程序情况下,根据不同使用者直接采用不同语言、日期格式等,这样的设计考虑称为国际化(internationalization),简称i18n。国际化的三个重要概念是地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)。
-
使用ResourceBunde时,根据基础名称取得相应的信息文档:
- 使用指定的Locale对象取得信息文档;
- 使用Locale.getDefault()取得的对象取得信息文档;
- 使用基础名称取得信息文档。
- 可以使用Date来取得完整日期时间,可单纯使用toString()取得文字描述,或使用DateFormat格式化日期。
教材学习中的问题和解决过程
- 取得实例后,使用log方法输出信息,输出信息是可以用level的静态成员指定层级。代码截图:
- 若要显示INFO一下的信息,不仅要将logger的层级设定为Level.INFO,也得将handler的层级设定为level.INFO。
- 如果要定义Formatter,可以继承Formatter后操作抽象方法format()。
本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 30篇 | 400小时 | |
第一周 | 100/100 | 1/1 | 20/20 | |
第二周 | 200/300 | 1/2 | 30/50 | |
第三周 | 300/600 | 1/3 | 28/78 | |
第四周 | 400/1000 | 1/4 | 20/98 | |
第五周 | 350/1350 | 1/5 | 30/128 | |
第六周 | 450/1800 | 2/6 | 32/ 160 | |
第七周 | 350/2150 | 2/8 | 20/ 180 | |
第八周 | 250/2400 | 2/10 | 22/202 |