Java日志—logback+slf4j基础教程


前言

本人太菜,只学会了slf4j+logback,而且只学会了皮毛

一、日志简介

  1. 日志实现:JUL,logback,Log4j,Log4j2
  2. 日志门面(接口):JCL,slf4j
  3. 为了解决不同日志实现之间的没有关联才出现的日志门面
  4. 目前最流行(可能是几年前了)的搭配是slf4j+logback

二、日志

1.maven

  1. Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
  2. maven可以用来解决依赖的问题(不用自己手动的导入jar包,而且还能管理jar包)
  3. idea里自带maven,当然也可以用自己的maven

2.jar包

  1. jar 是 Java ARchive 的缩写。jar包是别人已经写好的一些类,然后将这些类打包,如果想用,直接把包引入项目,就可以直接用了

3.slf4j

  1. 五个级别:error、warn、info、debug、trace
  2. 获取日志记录器public static final Logger LOGGER= LoggerFactory.getLogger(slf4j_test.class);
  3. 导入的一定是这两个包
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
		try {
            int i=1/0;
        }catch (Exception e){
           LOGGER.error("...",e);//不要e.print...
        }
  1. 添加slf4j-api的依赖
  2. slf4j有且仅有一个日志实现框架的绑定(也就是logback.classic和slf4j-log4j2、slf4j-simple不能同时出现)

4.logback

  1. logback分为三个模块
    • logback-core 其他两个模块的基础模块
    • logback-classic 是log4j的一个改良版本,同时完整的实现了slf4j API
    • logback-access 访问模块与。。。。。
  2. 添加依赖
		<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>
  1. 在resources下面创建logback.xml文件,在里面可以配置

    • 日志输出配置
    • 日志级别
    • Appender类型
    • 文件输出路径
  2. 同步日志和异步日志

  3. 自定义logger实现输出的灵活控制

  4. 所有logger都是root logger(debug)的后代(继承)

  5. 打印日志用占位符,避免字符串拼接,避免level判断。log.debug("Current count is {}" , count);占位符{}允许接收任何object,并且调用其toString方法来记录日志。

  6. 模板

    import lombok.extern.slf4j.Slf4j;
    @Slf4j
    public class test {
        public static void main(String[] args) {
            //方法1:构造LOGGER
            Logger LOGGER = LoggerFactory.getLogger(test.class);
            LOGGER.info("done");
            //方法2:lombok
            log.info("done");
        }
    }
    

三、各种配置以及常见问题

1.设置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>

2.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>
        <!--日志消息格式   也就是自定义Layout-->
        <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包会出现一个奇奇怪怪的错误
但是百度上的方法都解决不了,而且并没有解释清楚是因为什么出错

  1. 打开项目结构,按照一下步骤点开
    在这里插入图片描述
  2. 添加主类点确定
    在这里插入图片描述
  3. 最后成这样子
    在这里插入图片描述
  4. 项目-构建工件
    在这里插入图片描述
  5. 最后在这个目录下就出来了jar包了
    在这里插入图片描述
  6. 打开cmd,到jar包所在目录,然后java -jar xxx.jar就可以运行了

五:细节问题

1.如何把txt也打入jar包

  1. 在resources里加入xxx.txt
    在这里插入图片描述
  2. 用一下方法读取文件就可以了
		InputStream is=this.getClass().getResourceAsStream("/wujiang.txt");
        BufferedReader br=new BufferedReader(new InputStreamReader(is));

2.lombok@Test爆红

  1. 添加依赖
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
  1. 导入的一定是这个import org.junit.Test;

3.常见打印日志错误

  1. 不要使用 System.out.print…,这东西只会打印到控制台
  2. 不要使用 e.printStackTrace(),同上
  3. 不要抛出异常后又输出日志
    如捕获异常后又抛出了自定义业务异常,此时无需记录错误日志,由最终捕获方进行异常处理。不能又抛出异常,又打印错误日志,不然会造成重复输出日志。
try {
    // ...
} catch (Exception e) {
    // 错误
    LOG.error("xxx", e);
    throw new RuntimeException();
}
  1. 没有输出全部错误信息
try {
    // ...
} catch (Exception e) {
    // 错误
    LOG.error('XX 发生异常', e.getMessage());
 
    // 正确
    LOG.error('XX 发生异常', e);
}
  1. 不要使用错误的日志级别
try {
    // ...
} catch (Exception e) {
    // 错误
    LOG.info("XX 发生异常...", e);
}

总结

  • 持续更新中…
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值