- 浏览: 97977 次
- 性别:
- 来自: 广州
最新评论
-
penuel:
保护日志发生现场LocationInfo(日志发生时的类、方法 ...
Log4j笔记 第九章 封装Log4j -
imu2008:
good~
如何创建一个org.eclipse.core.resources.IFile对象实例 -
mwhgJava:
bluepenguin2008 写道你好,请问这个封装后怎么用 ...
Log4j笔记 第九章 封装Log4j -
bluepenguin2008:
你好,请问这个封装后怎么用啊。每个类还是要像下面这样声明吗?p ...
Log4j笔记 第九章 封装Log4j
文章列表
熟练配置log4j.xml必须理解log4j.dtd。
在log4j发布的.jar包中的org.apache.log4j.xml包中可以找到log4j.dtd。
细读log4j.dtd记录笔记:
1、在多种情况下都能可以设置日志的记录级别:
configuration 的threshold,可以指定关注的最低日志级别
root 的level,可以指定关注的最低日志级别
logger的level,可以指定关注的最低日志级别
appender的threshold,可以指定关注的最低日志级别
appender的Filter之一org.apache.log4j.varia.LevelRangeFil ...
下面是一个简单的log4j.xml配置文件内容。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!-- threshold: default value is all-->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" thre ...
封装log4j要素:
1、对外不暴露log4j的包名和类名。
2、保护日志发生现场LocationInfo(日志发生时的类、方法、类文件及行数)。
3、方便的格式化日志字符串,MessageFormat.format()。
4、保持效率。
5、方便使用。
下面为部分片段,详情见附件。
更多功能,参考org.apache.log4j.logMF和org.apache.log4j.logSF。
public class Logger {
private final org.apache.log4j.Logger logger;
private Logger(Class<? ...
SimpleLayout,仅包括消息等级和消息。
PatternLayout,使用c的print方法,修饰日志。常用的Layout。
HTMLLayout,将日志包装为HTML的格式。
XMLLayout,将日志包装为XML的格式。
EnhancedPatternLayout,扩展PatternLayout,具体参考 EnhancedPatternLayout.java。
第一节 PatternLayout
具体情况,参考PatternLayout.java源码。
1、转义符
PatternLayout使用%作为转移字符。
%% 表示字面意义上的“%”。
如果%后面的不是合法的转义字符,%还 ...
第一节 NullAppender
org.apache.log4j.varia.NullAppender
啥事不做。如果Logger未关闭(日志等级不是OFF),就必须至少要有一个Appender。又不想记录任何东西,使用NullAppender不错。
第二节 ConsoleAppender
org.apache.log4j. ConsoleAppende
WriterAppender的子类,可以指定System.out或System.err之一为目标。
第三节 WriterAppender
org.apache.log4j.WriterAppender
可以控制编码类型,是否及时刷新等。如 ...
第一节 主要组件
Log4j有三个主要组件: loggers、appenders和layouts。这三个组件协同工作,使开发人员能够根据消息类型和级别来记录消息,并且在程序运行期控制消息的输出格式位置。
1、Logger:负责日志事件的创建和发送
Logger 负责定义消息级别,和将消息封装成事件并发送给Appender。
2、Appender:负责控制日志事件信息的记录
Appender 负责监听Logger发出的事件,将事件记录到特定的目的地。
3、Layout:日志格式化器
Layout 负责格式化事件,辅助Appender记录日志。
一个Logger需要有零个到多个Appender(L ...
日志工具的主要功能,能够关闭一些日志陈述,而不影响其他的日志陈述。
Log4j主要使用消息等级和日志等级来达到目的。
Log4j设想,消息是可以按照重要程度来分类的。
Log4j等级(Level):all < trace < debug < info < warn < error < fatal < off。
第一节 消息等级
消息等级:Logger类用trace、debug、info、warn、error、fatal等方法定义不同等级的消息。
消息等级在程序编码时就已经定下来了。
第二节:日志等级
日志等级:通过Logger.setLevel方法设 ...
第一节 日志名称空间和等级遗传
每一个日志都可以通过配置文件设置日志级别等信息。但给每一个日志都配置这些信息显然太繁琐了。相似的类的日志应该有相似的日志级别信息,如用户可能只关心某一个包下的类的消息。Log4j使用日志名称空间和等级遗传来达到这一目的。
名称空间:Log4j使用java包空间的方式,定义日志名称空间。一般情况下,类定义Logger时,给Logger工厂方法一个参数,该参数是本类的完整类名,这样日志就有了指定的名称空间。
等级遗传:Log4j规定,如果名称空间“A”加上“.”后缀是名称空间“B”的前缀,则称名称空间“A”是名称空间“B”的祖先,“B”是“A”的子空间。所有的名称空 ...
第一节 概述
Log4j诞生,为减轻对成千上万的
System.out.println();
System.err.println();
e.printStackTrace();
(e为Throwable,包括Exception和Error)
语句的维护成本。
Log4j能够做更多的事。
通过仅修改配置文件,而不修改程序代码,控制日志记录语句是否记录日志,控制系统资源消耗。
本手册代码演示在eclipse中编辑。
第二节 简单使用Logger类
选一个新的workspace, 创建一个新的项目。
导入org.apache.log4j,编写一个示例类,用上Logger类的日志记录方法。 ...
前言
本文为log4j_1.2手册的补充。不试图替代log4j_1.2手册,也不是其翻译作品。正确的读者应该看了本文后再看一看log4j_1.2手册http://logging.apache.org/log4j/1.2/manual.html,或先看看它。对于手册中已经讲得很好的内容,本文不再累述。本文基于Log4j.1.2.16版本。
Log4j使用简单(仅限将Log4j嵌入你的代码中);功能强大,扩展性强,伸缩性好(欲了解之必先理解Log4j框架结构)。
了解Log4j的几个层次:
1、在一个项目组中,Log4j的环境已经搭建好了,会用 Logger类的debug, info, warn ...
使用log4j时候,出现这个警告:
log4j:WARN No appenders could be found for logger (***).
log4j:WARN Please initialize the log4j system properly.
问题原因:没有正确配置log4j配置文件。
log4j默认从系统属性中的log4j.configuration获取log4j配置文件的url,找不到就从classpath中找 log4j.xml文件为配置文件,找不到就从classpath中找log4j.properties配置文件。如果找不到,就打印上面的出错信息。详情见log4j源码 ...
JUNIT4 笔记(八) 参数化测试
- 博客分类:
- JUnit4
为了用不同的参数测试同一个逻辑,需要写多个测试用例,出现代码冗余。一种不是很好的解决方案是在一个测试用例中采用循环的方式遍历参数。
@Test public void testAdd(){
int[][] array = new int[][]{
{2,1,1}, //1+1=2,能成功
{6,2,2}, //2+2!=6,不能成功
{7,2,5}, //2+5=7,能成功
};
for(int i=0; i<array.length; i++){
assertEquals(array[i][2], array[i][0] ...
断言:org.junit.Assert 用于测试用例中,如果断言失败,用例即结束。
假设:org.junit.Assume 用于在准备环境时判断环境是否符合要求,包括测试套的@BeforeClass,测试类的@BeforeClass,测试类的实例化,测试类的@Before。
如果假设失败,假设所处初始化代码方法立即结束,更深级别的后续工作也被忽略,相关测试用例被忽略,但与假设同级别的收尾工作还要继续执行。
例如:如果在测试类的@BeforeClass中假设失败,该类的实例化及子级别将被忽略,@AfterClass会继续执行。
测试运行器定义的工作级别:
测试套@BeforeClass ...
有时候,由于方法未实现(测试先于实现),或环境不足(缺数据库),需要忽略执行某个测试用例、测试类或测试套。JUnit4为我们准备了@Ignore注释,使用时,将该注释加在测试用例方法前,测试类类名前,测试套类名前,测试运行器就会忽略有@Ignore注释的测试用例、测试类和测试方法。
@Ignore @interface 类定义了value方法,用来说明忽略的原因. The optional reason why the test is ignored.
在执行测试类或测试用例时,被忽略(被@Ignore修饰)的测试用例、测试类和测试套将不会被执行,且会记录到测试结果中。
这显然比将方法前的@Te ...
测试套包含一个或多个需要被一起执行的测试用例或测试套。
测试套需要在类名前加@RunWith(Suite.class) 表示不使用默认的测试运行器,使用指定的测试运行器,在这里Suite.class就是指定的测试运行器。并用@Suite.SuiteClasses指定该测试套包含的其他测试用例或测试套。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
MyTestCase.class, //测试类
PartSui ...