log4j日志记录及单元测试

日志记录工具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!


猜你喜欢

转载自blog.csdn.net/chianz632/article/details/80399209