【日志】
【日志与输出语句区别】
输出语句 | 日志技术 | |
取消日志 | 需要修改代码,灵活性比较差 | 不需要修改代码,灵活性比较好 |
输出位置 | 只能是控制台 | 可以将日志信息写入到文件或者数据库中 |
多线程 | 和业务代码处于一个线程中 | 多线程方式记录日志,不影响业务代码的性能 |
【特点】:
- 通过使用日志技术,我们可以控制日志信息输送的目的地是控制台、文件等位置
- 我们也可以控制每一条日志的输出格式
- 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程
- 以上操作可以通过一个配置文件来灵活地进行配置,而不需要修改应用代码
【日志框架——Logback】
【概述】:
Logback是基于slf4j的日志规范实现的框架
【Logback主要分为三个技术模块】
logback-core:该模块为其他两个模块提供基础代码,必须有
logback-classic:完整实现了slf4jAPI的模块
logback-access:与Tomcat和Jetty等Servlet容器集成,以提供Http访问日志功能
【步骤】:
- 导入Logback的相关jar包
- 编写Logback配置文件
- 在代码中获取日志的对象
- 按照级别设置记录日志信息
例:
public class LogDemo {
//获取日志对象
private static final Logger LOGGER= LoggerFactory.getLogger(LogDemo.class);
public static void main(String[] args) {
//打印日志
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
LOGGER.info("用户输出录入姓名为:"+name);
System.out.println("请输入你的年龄:");
String age=sc.nextLine();
try {
int ageInt = Integer.parseInt(age);
LOGGER.info("用户输入的年龄格式正确:"+age);
} catch (NumberFormatException e) {
LOGGER.info("用户输入的年龄格式错误:"+age);
}
}
}
【日志输出级别】
级别程度依次是:TRACE<DEBUG<INFO<WARN<ERROR<FATAL
【作用】:
将开发中不同的日志信息进行分类,只输出大于等于该级别的日志信息
【注意】:
默认级别是debug(忽略大小写)
ALL和OFF分别是打开全部日志信息,及关闭全部日志信息
例:LOGGER.error("error级别的日志信息");
【枚举】
【概述】:
为了间接的表示一些固定的值
【格式】:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。
public enum s {
枚举项1,枚举项2,枚举项3;
}
【注意】:
定义枚举类要用关键字enum
【特点】:
- 所有枚举类都是Enum的子类
- 我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项
- 每一个枚举项其实就是该枚举的一个对象
- 枚举也是一个类,也可以去定义成员变量
- 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
- 枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(""){ };
- 枚举类也可以有抽象方法,但是枚举项必须重写该方法
例:
public enum Season {
SPRING("春"){
@Override
public void show() {
System.out.println(this.name);
}
},
SUMMER("夏"){
@Override
public void show() {
System.out.println(this.name);
}
},
AUTUMN("秋"){
@Override
public void show() {
System.out.println(this.name);
}
},
WINTER("冬"){
@Override
public void show() {
System.out.println(this.name);
}
};
public String name;
//有参构造
Season(String name) {
this.name = name;
}
//抽象方法
public abstract void show();
}
【成员方法】
String name():获取枚举项的名称
int ordinal():返回枚举项在枚举类中的索引值
int compareTo(E o):比较两个枚举项,返回的是索引值的差值
String toString():返回枚举常量的名称
static <T> T valueOf(Class<T> type,String name):获取指定枚举类中的指定名称的枚举值
values():获得所有的枚举项
例:
//枚举类
public enum Season {
SPRING,SUMMER,AUTUMN,WINTER;
}
public static void main(String[] args) {
//获取枚举名称
String name = Season.SPRING.name();
System.out.println(name);
System.out.println("------------------------");
//返回枚举在类中的索引值
int index1 = Season.SPRING.ordinal();
int index2 = Season.SUMMER.ordinal();
int index3 = Season.AUTUMN.ordinal();
int index4 = Season.WINTER.ordinal();
System.out.println(index1);
System.out.println(index2);
System.out.println(index3);
System.out.println(index4);
//比较枚举项,返回索引差值
int result = Season.SPRING.compareTo(Season.WINTER);
System.out.println(result);
//返回枚举常量的名称
String s = Season.SPRING.toString();
System.out.println(s);
//获取指定枚举类中的指定名称的枚举类
Season spring = Enum.valueOf(Season.class, "SPRING");
System.out.println(spring);
System.out.println(Season.SPRING == spring);
//获取所有的枚举项
Season[] values = Season.values();
for (Season value : values) {
System.out.println(value);
}
}