日志记录工具log4j
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
1.配置log4j.properties文件,将配置文件导入项目的src目录下。
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug, stdout,logfile
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n
2.导入log4j.jar包,创建Logger对象。
1.JUnit是一种测试代码的框架,测试的目的是:保证代码没错,而不是保证代码正确。
2.测试类一般不要和目标类放在一起,但编译成的class文件是放在一起的。
3.单元测试主要是来测试程序的结果和自己期望的值是否相等
PS:Logger对象导的包位于org.apache.log4j.Logger下
Logger logger=Logger.getLogger(当前类名.class);
3.指定输出级别
logger对象输出级别,以下是从高到底
1.error 输出错误信息
2.warn 输出警告信息
3.info
4.debug 控制台输出
如果高级别的先输出,后面的低级别就不会输出。比如说使用了info输出,后面的debug内容将不会被输出。
单元测试
当我们在开发过程中,可能设计到很多类,类中又有很多方法。而且在团队开发中,你写的方法是否存在bug,我要我们逐一测试,才能供其他小伙伴使用。不可能把一个个方法都写在main方法中进行测试吧,这样效率比较低。因此,我们引入单元测试这一概念。顾名思义,单元测试就是对某一个单元(方法)进行测试。
1.引入JUnit包,才能使用相关的工具
1.JUnit是一种测试代码的框架,测试的目的是:保证代码没错,而不是保证代码正确。
2.测试类一般不要和目标类放在一起,但编译成的class文件是放在一起的。
3.单元测试主要是来测试程序的结果和自己期望的值是否相等
2.单元测试用到的一些方法标记
@Test(timeout=1000) :设置超时时间,如果测试时间超过了你定义的timeout,测试失败
@Test(expected) : 申明出会发生的异常,比如@Test(expected = Exception.class)
@Before : 跟junit3.8 上的setUp() 方法同样的效果,方法名最好和setUp()一样,但不强求,在每一个测试方法之前被执行
@After : 跟junit3.8 上的tearDown() 方法同样的效果,方法名最好和tearDown()一样,但不强求,在每一个测试方法之后被执行
@BeforeClass : 被该注解申明的方法,功能是:在所有的测试方法之前执行,只执行一次
@AfterClass : 被该注解申明的方法,功能是:在所有的测试方法之后执行,只执行一次
@Ignore :让 测试方法 或 测试类 不被执行,让其失去测试的功能
log4j和单元测试的一个简单使用
需求:定义一个方法,用单元测试去执行它,并且记录该方法所执行的时间。用log4j写入执行时间,以及相关信息。
package Demo;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class TestLogger {
private Logger logger = Logger.getLogger(TestLogger.class);//创建Logger对象
private long time;//记录时间
//测试方法
@Test
public void show(){
for(int i=0;i<100;i++)
System.out.println(i+1);
logger.info("循环一百遍");//写入到日志中
}
@Test
public void print(){
int num=0;
for(int i=1;i<=1000;++i)
num=num+i;
System.out.println("1000以内的整数和:"+num);
logger.info("一百以内的整数和:"+num);
}
//在每个方法执行前获得一次时间
@Before
public void before(){
time=System.currentTimeMillis();//获得方法执行前的时间
}
//在每个方法执行后 获得一次时间,并作差 就得到了 方法运行的时间差
@After
public void after(){
time=System.currentTimeMillis()-time;
System.out.println("时间:"+time);
logger.info("时间:"+time);
}
}
运行结果:
控制台
jbit.log文件
总结:log4j日志记录,可以记录跟踪捕捉项目中出现的一些问题,方便我们后期的维护与修改。单元测试则可以在没有main方法的前期下,对指定的方法进行测试,提高了测试的效率。
每日鸡汤:世界上一切不公平都是当事人能力不足造成的!
Over!