java日志
前言
本人太菜,只学会了slf4j+logback,而且只学会了皮毛
一、日志简介
- 日志实现:JUL,logback,Log4j,Log4j2
- 日志门面(接口):JCL,slf4j
- 为了解决不同日志实现之间的没有关联才出现的日志门面
- 目前最流行(可能是几年前了)的搭配是slf4j+logback
二、前置知识
1.maven
- Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
- maven可以用来解决依赖的问题(不用自己手动的导入jar包,而且还能管理jar包)
- idea里自带maven,当然也可以用自己的maven
2.jar包
- jar 是 Java ARchive 的缩写。jar包是别人已经写好的一些类,然后将这些类打包,如果想用,直接把包引入项目,就可以直接用了
3.slf4j
- 五个级别:error、warn、info、debug、trace
- 获取日志记录器
public static final Logger LOGGER= LoggerFactory.getLogger(slf4j_test.class); - 导入的一定是这两个包
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
try {
int i=1/0;
}catch (Exception e){
LOGGER.error("...",e);
}
- 添加slf4j-api的依赖
- slf4j有且仅有一个日志实现框架的绑定(也就是logback.classic和slf4j-log4j2、slf4j-simple不能同时出现)
4.logback
- logback分为三个模块
- logback-core 其他两个模块的基础模块
- logback-classic 是log4j的一个改良版本,同时完整的实现了slf4j API
- logback-access 访问模块与。。。。。
- 添加依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
-
在resources下面创建logback.xml文件,在里面可以配置
- 日志输出配置
- 日志级别
- Appender类型
- 文件输出路径
-
同步日志和异步日志 -
自定义logger实现输出的灵活控制 -
在类前面@Slf4j可以定义出一个Logger(lombok) -
所有logger都是root logger(debug)的后代(继承) -
打印日志用占位符,避免字符串拼接,避免level判断。log.debug("Current count is {}" , count); 占位符{}允许接收任何object,并且调用其toString方法来记录日志。
三、各种配置已经常见问题
1.@Test爆红
- 添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
- 导入的一定是这个
import org.junit.Test;
2.设置jdk
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>16</source>
<target>16</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
3.logback.xml里的常用配置
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c %M %L [%thread] %m%n"></property>
<property name="log_dir" value="SGS"></property>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<target>System.err</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${log_dir}/SGS.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<root level="ALL">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
四、打jar包
这不是唯一打jar包的方法,其他方法我还不会操作, 引入第三方jar包 的问题困扰了我很久
- 打开项目结构,按照一下步骤点开
 - 添加主类点确定
 - 最后成这样子
 - 项目-构建工件
 - 最后在这个目录下就出来了jar包了
 - 打开cmd,到jar包所在目录,然后java -jar xxx.jar就可以运行了
五:细节问题
1.如何把txt也打入jar包
- 在resources里加入xxx.txt
 - 用一下方法读取文件就可以了
InputStream is=this.getClass().getResourceAsStream("/wujiang.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(is));
总结
|