日志

日志定义:

计算机用于记录所有操作程序或者工具(错误,记录等等)

日志的作用:

就好像一个日记,记录程序操作的信息,出现警告的位置,或者记录什么时候出现错误,从而追踪到具体的数据 也可以方便记录到具体的位置,比如:控制台或者文件中

常见的日志框架:

日期框架: 基于Slf4j的logback实现

日志级别: 不同的级别显示不同的信息,(不同框架支持的日志基本可能不同)

日志级别优先级:(由低到高)(A

ALL: 显示所有日志信息

TRACE: 追踪, 指明程序运行轨迹(一般不用), 能够显示trace和trace以上的日志

DEBUG: 调试 ,应用程序中(自己开发的软件)最低日志级别, 用于程序调试, 暴露运行细节,能显示debug和debug以上的日志

INFO: 信息, 程序正常运行时, 记录信息, 能够显示info和info以上的日志

WARN: 警告, 程序可以运行,但是可能会出错, 能够显示warn和warn以上的日志

ERROR: 错误, 程序报错, 无法自动解决, 能够显示error和error以上的日志

FATAL: 致命, 无法挽回的错, 能够显示fatal和fatal以上的日志

OFF:关闭所有日志信息

(注:黄色的内容最常用)

logback入门代码实现:

logback日志框架为例:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class TestLog {

//每个类,都需要有一个之日记录器

private static Logger logger = LoggerFactory.getLogger("TestLog");

public static void main(String[] args) {

//默认debug

//不同日志阶级别的信息显示

logger.trace("追踪");

logger.debug("调试");

logger.info("信息");

logger.warn("警告");

logger.error("错误");

}

}

修改配置文件

Logback提供了一个核心配置文件logback.xml (一定要在src目录下使用)

日志框架在记录日志时会读取配置文件中的配置信息,从而记录日志的形式。具体可以做哪些配置呢?

1. 可以配置日志输出的位置是文件、还是控制台 2. 可以配置日志输出的格式 3. 还可以配置日志关闭和开启、以及哪些日志输出哪些日志不输出。

如下图所示,控制日志往文件中输出,还是往控制台输出

如下图所示,控制日志的输出的格式 日志格式是由一些特殊的符号组成,可以根据需要删减不想看到的部分。比如不想看到线程名那就不要[%thread]。但是不建议同学们更改这些格式,因为这些都是日志很基本的信息。

logback.xml源文件代码:

System.out

%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

utf-8

D:/log/itheima-data.log

class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

D:/log/itheima-data-%i-%d{yyyy-MM-dd}-.log.gz

1MB

线程

进程:计算机中一个软件运行起来,就需要一个进程

线程:一个程序(进程)内部,独立运行的单元就是一个线程

总结: 一个进程,可以拥有多个线程,称为多线程开发

创建线程:

三种方式:

Thread子类

Runnable接口实现类

Callable接口实现类

匿名内部类

具体代码如下:

Thread子类

Runnable接口实现类

Callable接口实现类

匿名内部类

创建线程的三种方式对比总结:

请看:  主页-> java面试题汇总 -> 创建线程有几种方式(必会)

单元测试

所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。

比如说我们写了一个学生管理系统,有添加学生、修改学生、删除学生、查询学生等这些功能。要对这些功能这几个功能进行测试,我们是在main方法中编写代码来测试的。

为了测试更加方便,有一些第三方的公司或者组织提供了很好用的测试框架,给开发者使用。这里给同学们介绍一种Junit测试框架。

Junit是第三方公司开源出来的,用于对代码进行单元测试的工具(IDEA已经集成了junit框架)

Junit

1.实现导包

package Junit;

import org.junit.Test;

public class TestJunit {

/**

* 单元测试方法要求:

* 1.不能私有,必须 public

* 2.非静态,不能使用 static关键字修饰

* 3.没有返回值 void

* 4.方法名任意

* 5.无参

*/

@Test

public void info(){

System.out.println("info");

}

@Test

public void show(){

System.out.println("show");

}

}

Junit框架的常用注解

同学们,刚才我们以及学习了@Test注解,可以用来标记一个方法为测试方法,测试才能启动执行。

除了@Test注解,还有一些其他的注解,我们要知道其他注解标记的方法什么时候执行,以及其他注解在什么场景下可以使用。

单元测试断言

接下来,我们学习一个单元测试的断言机制。所谓断言:意思是程序员可以预测程序的运行结果,检查程序的运行结果是否与预期一致。

我们在StringUtil类中新增一个测试方法

public static int getMaxIndex(String data){

if(data == null){

return -1;

}

return data.length();

}

接下来,我们在StringUtilTest类中写一个测试方法

public class StringUtilTest{

@Test

public void testGetMaxIndex(){

int index1 = StringUtil.getMaxIndex(null);

System.out.println(index1);

int index2 = StringUtil.getMaxIndex("admin");

System.out.println(index2);

//断言机制:预测index2的结果

Assert.assertEquals("方法内部有Bug",4,index2);

}

}

运行结果:

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: