24-日志文件

news2024/11/25 2:31:51

日志技术

把程序运行的信息,记录到文件中,方便程序员定位 bug、并了解程序的执行情况等

  1. 希望系统能记住某些数据是被谁操作的,比如被谁删除了?
  2. 想分析用户浏览系统的具体情况,以便挖掘用户的具体喜好?
  3. 当系统在开发中或者上线后出现了 bug,崩溃了,该通过什么去分析、定位 bug?
    好比生活中的日记,可以记录你生活中的点点滴滴。
    程序中的日志,通常就是一个
    文件,里面记录的是程序运行过程中的各种信息。

输出语句的弊端

输出会展示在控制台终端里
不能更方便的将日志记录到其他的位置(文件,数据库)
想取消输出语句,需要修改源代码才可以完成

日志技术优点

可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中)。
可以随时以开关的形式控制日志的启停,无需到源代码中去进行修改。

日志技术的体系结构

image-20230809122842552

日志框架:牛人或者第三方公司已经做好的实现代码,后来者直接可以拿去使用。
日志接口:设计日志框架的一套标准,日志框架需要实现这些接口。
注意 1:因为对Commons Logging接口不满意,有人就搞了SLF 4 J;因为对 Log 4 j 的性能不满意,有人就搞了 Logback。
注意 2:Logback 是基于SLF4 j 的日志规范实现的框架。现在最常使用

Logback

image-20230809123315372

我们对于这种日志框架一般是通过 maven 工具进行下载管理的
对于这个我们首先要导入三个包
核心配置文件的 logback. Xml 导入到 src 中, 导入后并不是不管了, 还是要修改这个 xml 文件中的部分内容呢
输出
创建一个日志对象, 公开的, 静态, 恒定, public static final
Logger xx = LoggerFactory.getLogger("文件名") 文件名是用来指明是哪一个文件的日志
然后我们通过 xx. Info 写入重点信息, xx. Error 写入这个错误信息

核心配置文件 logback. Xml

对 Logback 日志框架进行控制的。
日志的输出位置、输出格式的设置
通常可以设置 2 个输出日志的位置:一个是控制台、一个是系统文件中
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
开启日志(ALL),取消日志 (OFF)

<root level=“ALL">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE" />
</root>

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err-->
        <target>System.out</target>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名从哪一个方法开始执行,%-5level:级别从左显示5个字符宽度
                %msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File是输出的方向通向文件的 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>  <!--指定编码格式-->
        </encoder>
        <!--日志输出路径,自己设置-->
        <file>D:/log/itheima-data.log</file>
        <!--指定日志文件拆分和压缩规则,因为日志会越来越大,所以我们要尽量避免日志文件过大-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>D:/log/itheima-data-%i-%d{yyyy-MM-dd}-.log.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--
        1、控制日志的输出情况:如,开启日志,取消日志 off是关闭日志,all是开启日志
    -->
    <root level="debug">  
        <appender-ref ref="CONSOLE"/>  <!--这个控制输出到控制台-->
        <appender-ref ref="FILE" />  <!--这个控制输出到文件-->
    </root>
</configuration>
测试
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class dayRoutine {
    public static void main(String[] args) {
        Logger logger = LoggerFactory
                .getLogger(
                        "D:\\code\\vscode-java\\LearnJavaSE\\Learn\\src\\Metamorphosis\\day4\\SpecialFile\\RoutineInput.log");

        int a = 10;
        int b = 0;
        try {
            if (a / b != 0) {
                System.out.println("ok");
            }
        } catch (Exception e) {
            System.out.println("有异常");
            logger.error("有异常");
            logger.error("ceshi");
        }
    }
}

日志级别

就是我们核心配置文件中的最后一段代码

    <root level="all">
        <appender-ref ref="FILE" />
    </root>

日志级别是指的是日志信息的类型,日志都会分级别,常见的日志级别如下 (优先级依次升高)
日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下(优先级依次升高):

日志级别说明
trace追踪,指明程序运行轨迹
debug调试,实际应用中一般将其作为最低级别,而 trace 则很少使用
info输出重要的运行信息,数据连接、网络连接、IO 操作等等,使用较多
warn警告信息,可能会发生问题,使用较多
error错误信息, 使用较多

只有日志的级别是大于或等于核心配置文件配置的日志级别,才会被记录,否则不记录。

package com.itheima.d3_log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 目标:掌握LogBack日志框架的使用。
 */
public class LogBackTest {
    // 创建一个Logger日志对象
    public static final Logger LOGGER = LoggerFactory.getLogger("LogBackTest");

    public static void main(String[] args) {
        //while (true) {
            try {
                LOGGER.info("chu法方法开始执行~~~");
                chu(10, 0);
                LOGGER.info("chu法方法执行成功~~~");
            } catch (Exception e) {
                LOGGER.error("chu法方法执行失败了,出现了bug~~~");
            }
        //}
    }

    public static void chu(int a, int b){
        LOGGER.debug("参数a:" + a);
        LOGGER.debug("参数b:" + b);
        int c = a / b;
        LOGGER.info("结果是:" + c);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1056865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nodejs开发环境搭建

Nodejs是一个开源的、跨平台JavaScript运行时环境&#xff0c;其使用V8引擎对JavaScript脚本执行解释&#xff0c;在前后端分离的应用架构设计中&#xff0c;其既能支持web页面服务应用的开发、也能支持后端接口服务应用的开发&#xff0c;类似于Java语言的J2EE运行时环境&…

win10系统任务栏图标变成白色的解决办法

我平时都是用滴答清单进行管理这个自己的日程代办的&#xff0c;但是今天打开的时候发现这个快捷方式突然变成纯白色的了&#xff0c;重启电脑之后&#xff0c;这个图标的样式仍然没有变化。上网查找解决办法之后&#xff0c;终于搞好了&#xff0c;于是就有了下面的教程。 为什…

2023.10.02 win7x64sp1下Navicat_Premium15_x86连接Oracle_10g(安装在win2003x86)

Oracle_10g安装在这个版本的系统里: Microsoft Windows [版本 5.2.3790] 这个win2003_x86(分配内存1G)安装在vmware虚拟机里. 安装包文件名为:oracle 10g_win32.zip 大小约624 MB (655,025,354 字节) 安装完毕后,tcp1521端口应该开放: Microsoft Windows [版本 5.2.3790]…

【初始Linux】上

初始Linux上 一、Linux背景1.1 UNIX发展的历史1.2 UNIX发展的历史 二、开源三、官网Linux官网 四、企业应用现状五、发行版本六、 os概念&#xff0c;定位 本博客简介 初始Linux操作系统初识shell命令 ,了解若干背景知识。使用常用Linux命令了解Linux权限概念与思想,能深度理解…

【Java 进阶篇】JDBC ResultSet 类详解

在Java应用程序中&#xff0c;与数据库交互通常涉及执行SQL查询以检索数据。一旦执行查询&#xff0c;您将获得一个ResultSet对象&#xff0c;该对象包含查询结果的数据。本文将深入介绍ResultSet类&#xff0c;它是Java JDBC编程中的一个核心类&#xff0c;用于处理查询结果。…

25-多线程

多线程 线程(Thread)是一个程序内部的一条执行流程。 程序中如果有一条执行流程&#xff0c;那这个程序就是单线程的程序 多线程是指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行&#xff09;。 再例如&#xff1a;消息通信、淘宝、京东系统都离…

1.4 计算机网络在我国的发展

思维导图&#xff1a; 笔记&#xff1a; #### 一、初期发展 1. **1980年代初**&#xff1a;铁道部开始进行计算机联网实验&#xff0c;为我国计算机网络的起点。 2. **1989年11月**&#xff1a;我国第一个公用分组交换网CNPAC建成运行。 #### 二、专用计算机广域网 1. **20世…

27-动态代理和反射

参考视频链接 反射黑马教程 反射 反射初识 反射允许对封装类的字段&#xff0c;方法和构造函数的信息进行编程访问 它可以将一个类里面的方法和成员变量获取出来 反射是通过 class 文件中获取这字段&#xff0c;构造方法和成员方法&#xff0c;然后在从这三个当中进行解剖&…

【LeetCode热题100】--148.排序链表

148.排序链表 对链表进行排序最适合的算法就是归并排序&#xff1a; 对链表自顶向下归并排序的过程&#xff1a; 找到链表的中点&#xff0c;以中点为分界&#xff0c;将链表拆分成两个子链表&#xff0c;寻找链表的中点可以使用快慢指针的做法&#xff0c;快指针每次移动 2步…

c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

目 录 一、重载 **&#xff08;1&#xff09;概念&#xff1a;**在同一个作用域内&#xff1b;函数名相同&#xff0c;参数列表不同&#xff08;参数个数不同&#xff0c;或者参数类型不同&#xff0c;或者参数个数和参数类型都不同&#xff09;&#xff0c;返回值类型可相同也…

leetCode 122.买卖股票的最佳时机 II 贪心算法

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&…

【mysql】—— 复合查询

前言&#xff1a; 在前面我已经讲解的mysql表的查询都是对一张表进行查询&#xff0c;在实际开发中这远远不够。因此&#xff0c;本期我将带大家学习的是关于 “ 复合查询” 的相关知识&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;基本查询回顾 &a…

解决mac pro 连接4k显示器严重发烫、卡顿问题

介绍个不用花钱的方法。其实mac自带的风扇散热能力还可以的&#xff0c;但是默认比较懒散&#xff0c;可以用一个软件来控制下&#xff0c;激发下它的潜能。 可以下个stats软件 打开传感器开关&#xff0c;以及同步控制风扇开关 以及cpu显示温度 点击控制台上的温度图标&…

MySQL 面试题——数据库理论基础

目录 1.什么是数据库、数据库管理系统、数据库系统、数据库管理员&#xff1f;2.什么是元组、码、候选码、主码、外码、主属性、非主属性&#xff1f;3.什么是 ER 图&#xff1f;它有哪几个要素组成&#xff1f;4.主键与外键有什么区别&#xff1f;5.✨为什么不推荐使用外键与级…

简单走近ChatGPT

目录 一、ChatGPT整体背景认知 &#xff08;一&#xff09;ChatGPT引起关注的原因 &#xff08;二&#xff09;与其他公司的竞争情况 二、NLP学习范式的发展 &#xff08;一&#xff09;规则和机器学习时期 &#xff08;二&#xff09;基于神经网络的监督学习时期 &…

深入浅出剖析 LoRA 源码及实践

在上一篇中&#xff0c;我们详细阐述了LoRA的原理。在本篇中&#xff0c;我们将一起学习LoRA源码&#xff08;微软原版&#xff09;。 许多朋友在使用LoRA的过程中&#xff0c;都会用到HuggingFace Peft库封装好的LoRA接口&#xff0c;这个接口是对微软版LoRA代码的改写和封装…

全国核辐射检测数据月度表

特别说明 吸收剂量是单位质量受照物质所吸收的平均电离辐射能量&#xff0c;单位是J/kg。 专门名词是戈瑞&#xff08;Gray&#xff09;&#xff0c;符号“Gy”&#xff0c;1Gy 1J/kg。 这是个很大的单位。 因此在实际应用时&#xff0c;往往用其千分之一或百万分之一作单位&a…

【Java 进阶篇】使用 JDBC 更新数据详解

在关系型数据库中&#xff0c;更新数据是一项常见的任务。通过Java JDBC&#xff08;Java Database Connectivity&#xff09;&#xff0c;我们可以使用Java编程语言来执行更新操作&#xff0c;例如修改、删除或插入数据。本文将详细介绍如何使用JDBC来进行数据更新操作&#x…

《XSS-Labs》01. Level 1~10

XSS-Labs 索引Level-1题解 Level-2题解 Level-3题解总结 Level-4题解 Level-5题解总结 Level-6题解 Level-7题解 Level-8题解 Level-9题解 Level-10题解 靶场部署在 VMware - Win7。 靶场地址&#xff1a;https://github.com/do0dl3/xss-labs 只要手动注入恶意 JavaScript 脚本…

多目标平衡优化器黏菌算法(MOEOSMA)求解CEC2020多模式多目标优化

多目标平衡优化器黏菌算法&#xff08;MOEOSMA&#xff09;比现有的多目标黏菌算法具有更好的优化性能。在MOEOSMA中&#xff0c;动态系数用于调整勘探和开采趋势。采用精英存档机制来促进算法的收敛性。使用拥挤距离法来保持Pareto前沿的分布。采用平衡池策略模拟黏菌的协同觅…