java基础:日志框架

2023-11-18

一. 日志技术的概述

程序中的日志可以用来记录程序运行过程中的信息,并可以进行永久的存储

采用输出语句到控制台的弊端

1.信息只能显示在控制台
2.不能将其记录到其他位置(文件,数据库)
3.想取消记录的信息需要修改代码才可以完成

日志技术具备的优势

1.可以将系统执行的信息选择性的记录到指定的位置(控制台,文件,数据库)
2.可以随时以开关的形式控制是否记录日志,无需修改代码

二. 日志技术体系

日志规范:一些接口,提供给日志的实现框架设计的标准。

日志框架:牛人或第三方公司已经做好的日志记录实现代码,后来者可以直接拿去使用。

日志规范接口

Commons Logging(JCL)
Simple Logging Facade for Java(slf4j)

日志实现对象

Log4
JUL(java.uil.logging)
Logback
其他实现

三. Logback日志框架

logback是基于slf4j的日志规范实现的框架。

Logback 的架构非常通用,可以在不同的情况下应用。目前,logback 分为三个模块,logback-core、logback-classic 和 logback-access

logback-core 模块为其他两个模块奠定了基础logback-classic 模块可以同化为 log4j 1.x 的显着改进版本。此外,logback-classic 原生实现了SLF4J API,因此您可以轻松地在 logback 和其他日志框架(例如 log4j 1.x 或 java.util.logging (JUL))之间来回切换。

logback-access 模块与 Tomcat 和 Jetty 等 Servlet 容器集成,以提供 HTTP 访问日志功能。请注意,您可以轻松地在 logback-core 之上构建自己的模块。
LOGBack官网
logback-core,logback-classic,SLF4J API的jar包提取码:jjc3

四. Logback快速入门

需求:导入logback日志技术到项目中,用于记录系统的日志信息。
分析:

  1. 在项目下新建文件夹lib,导入logback的相关jar包到该文件夹,并添加到项目依赖库中去。
    1.1创建一个新的模块
    创建一个新的模块
    1.2在模块中创建一个新的文件夹,名称为lib

    1.3把jar包直接拷贝进去

    1.4 将jar包添加到项目依赖库中去
    选中Jar包右键,点击add as library
    在这里插入图片描述
    确定

    出现小箭头即可
    在这里插入图片描述
  2. 将logback的核心配置文件logback.xml直接拷贝到src目录下(必须是src下)
    logback.xml 提取码:e6f2
    在这里插入图片描述
  3. 在代码中获取日志对象
public static final Logger LOGGER = LoggerFactory.getLogger("类对象");

新建一个Test的测试类


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

public class Test {
    //创建Logback的日志对象,代表了日志技术。
    //静态常量对象
    public static final Logger LOGGER = LoggerFactory.getLogger("Test.class");
    public static void main(String[] args) {
        //快捷键ctrl+alt+T
        try {

            LOGGER.debug("Mian函数开始执行了");
            LOGGER.info("我要开始记录第二行日志,开始做除法");
            int a = 4;
            int b  =0;
            int num = a/b;
            LOGGER.trace("a="+a);
            LOGGER.trace("b="+b);
            System.out.println("num="+num);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("出现问题"+e);
        }

    }
}

注意:日志文件输出的地址由logback.xml文件决定,可自行更改

4. 使用日志对象LOGGER调用其方法输出不能的日志信息

五. Logback 配置详解

5.1 输出位置,格式设置

Logback日志系统的特性都是通过核心配置文件Logback.xml控制的。

通过logback.xml中的标签可以设置输出位置和日志信息的详细格式。
通常可以设置两个日志输出位置:控制台,系统文件

输出到控制台的配置标志

<!-- CONSOLE :表示当前的日志信息是可以输出到控制台的。 -->
 <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

输出到系统文件的配置标志

 <!-- File是输出的方向通向文件的 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

输出日志的格式

<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<!--  打印所有日志
如果不包含console则控制台只打印错误日志
-->
 <root level="ALL">
       <appender-ref ref="CONSOLE"/>
       <appender-ref ref="FILE" />
   </root>

5.2 对日志不同内容是否输出的控制

可以通过设置日志的出输出级别来控制哪些日志信息输出或不输出

日志级别:
TRACE<DEBUG<INFO<WARN<ERROR;默认级别是debug(忽略大小写),对应其方法
作用:用于控制系统中哪些日志级别是可以输出的,只输出级别不低于设定级别的日志信息。
ALL和OF分别是打开全部日志信息及关闭全部日志信息。
具体在

<root level="Error"/>
          <appender-ref ref="CONSOLE">
          <appender-ref ref = "FILE"/>
</root>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java基础:日志框架 的相关文章

  • Java:获取当前正在执行的Method对应的对象

    将当前正在执行的方法作为 Method 对象获取的最优雅的方法是什么 我的第一个明显的方法是在辅助类中使用静态方法 该方法将加载当前线程堆栈 获取正确的堆栈跟踪元素 并根据其信息构造 Method 元素 有没有更优雅的方法来实现这一目标 这
  • 读取文件并获取 key=value 而不使用 java.util.Properties

    我正在构建一个 RMI 游戏 客户端将加载一个包含一些键和值的文件 这些键和值将用于多个不同的对象 它是一个保存游戏文件 但我不能为此使用 java util Properties 它符合规范 我必须读取整个文件并忽略注释行和与某些类不相关
  • 在 Android 中绘制一条带有弯曲边缘的线

    I am using canvas drawLine to draw some line in android but the lines are too sharp but i need a curved edges 这里的 1 是我所拥
  • 空 EntityManager/EJB 注入 MDB

    我有一个消息驱动 bean MDB 部署到 WebLogic 12 1 3 我尝试使用 PersistenceContext 注释将实体管理器注入 MDB 但实体管理器为空 我还尝试注入一个简单的无状态会话 bean 它也是空的 但是 Me
  • 为什么一个线程会中断另一个线程[重复]

    这个问题在这里已经有答案了 在Java多线程应用程序中 我们处理InterruptedThreadException 如果另一个线程中断当前线程 则会抛出此异常 现在 当另一个线程知道它将导致异常时 它可能想要中断当前线程的原因是什么 很多
  • Hystrix是否可以订阅CircuitBreaker开启事件?

    对于单元测试 我希望能够订阅 Hystrix 事件 特别是在断路器打开或关闭时发生事件 我四处寻找示例 似乎解决方法是利用指标流并监视断路器标志 由于 Hystrix 是基于 RxJava 构建的 我认为应该在某个地方有一个事件订阅接口 在
  • JavaFx 中装饰且不可移动的舞台

    我想在 JavaFx 中创建一个装饰舞台 它也将不可移动 我正在从另一个控制器类创建这个阶段 我能够创造和展示舞台 但它是自由移动的 我怎样才能创建这个 非常感谢帮助和建议 我把打开新关卡的方法贴出来 private void addRec
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • 如何将txt文件添加到你的android项目中? [复制]

    这个问题在这里已经有答案了 我的Android studio版本是1 5 1 显然这个 never 版本没有 txt 文件的 asset 文件夹 您打算如何将这些文件包含到您的项目中 以及如何进一步使用您内部的应用程序 谢谢你的建议 Pro
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • Kerberos 缓存票证

    我使用的是 Windows 7 64 位 我创建了一个简单的应用程序来对实现 PrivilegedAction 的类的 run 方法中的文件进行计数 以下是我的 jaas conf 文件 CountFiles com sun securit
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • 更改 RowLayout SWT Java 中元素的顺序

    有没有办法更改在行布局中创建的元素的顺序 我想将其显示在元素中 首先显示 例如 如果我创建 element1 则 element2 element3 element4 我想看到的布局为 元素4 元素3 元素2 元素1 这意味着最后创建的元素
  • NoSuchMethodError:将 Firebase 与应用程序引擎应用程序集成时

    我试图将 firebase 实时数据库与谷歌应用程序引擎应用程序集成 我在调用时收到此错误 gt DatabaseReference ref FirebaseDatabase gt getInstance gt getReference t
  • setKeyListener 将覆盖 setInputType 并更改键盘

    大家好 我在两个设备之间遇到问题 在实践中使用InputType和KeyListener我正在操纵一个EditText让它从数字键盘接收逗号和数字 有关更多背景信息 请检查我之前的question https stackoverflow c
  • 在方法内声明类 - Final 关键字 [重复]

    这个问题在这里已经有答案了 给定方法中的以下内部类 IsSomething public class InnerMethod private int x public class Something private int y public
  • 如何使用maven创建基于spring的可执行jar?

    我有一个基于 Maven 的 Spring WS 客户端项目 我想将其打包为单个 jar 在eclipse中 一切运行正常 当我尝试将其打包为可执行 jar 时 我收到 ClassNotFound 异常 因为 Spring jar 未包含在
  • 条件查询:按计数排序

    我正在尝试执行一个标准查询 该查询返回 stackoverflow 中回答最多的问题 例如常见问题解答 一个问题包含多个答案 我正在尝试使用标准查询返回按每个问题的答案数排序的回答最多的问题 任何人都知道我应该在 hibernate cri
  • Java:基于 Web 的应用程序中的单例类实例

    我在 Web Application 中有这个 Singleton 类 public class MyDAO private static MyDAO instance private MyDAO public static MyDAO g
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa

随机推荐

  • 业务实战中如何利用MySQL函数来解决

    随着我们业务越来越复杂的情况下 完全基于java后台来解决首先是很麻烦 而且性能带来降低 代码的可读性下降 这个时候就需要一些MySQL的函数来解决了 这篇文章对于常见的MySQL函数不予介绍 concat函数 使用方法 CONCAT st
  • Flink设置Source数据源使用kafka获取数据

    流处理说明 有边界的流bounded stream 批数据 无边界的流unbounded stream 真正的流数据 Source 基于集合 package com pzb source import org apache flink ap
  • I Hate It

    很多学校流行一种比较的习惯 老师们很喜欢询问 从某某到某某当中 分数最高的是多少 这让很多学生很反感 不管你喜不喜欢 现在需要你做的是 就是按照老师的要求 写一个程序 模拟老师的询问 当然 老师有时候需要更新某位同学的成绩 Input 本题
  • volatile和synchronized的区别

    共性 volatile与synchronized都用于保证多线程中数据的安全 区别 1 volatile修饰的变量 jvm每次都从主存 主内存 中读取 而不会从寄存器 工作内存 中读取 而synchronized则是锁住当前变量 同一时刻只
  • 第一次 openwrt源码下载编译

    openwrt 学习记录 第一次 openwrt源码下载编译 MT7620开发板 安装虚拟机VMware 安装Ubnutu 先进入root账户 topeet ubuntu su 输入密码 1 搭建编译环境 参考 https blog csd
  • maven的使用

    目录 一 maven基本参数 二 maven基础结构 三 mvn的打包和运行 一 maven基本参数 groupId 是指项目里面的标识 一般写法是com mycom myapp 其中mycom是指你公司的域名 例如com google m
  • YOLOv5+PaddleOCR手写签名识别

    YOLOv5 PaddleOCR手写签名识别 介绍 参加了一个中国移动的比赛 比赛的数据集是一个工单 上面有多个人的签名还有手写的时间 因为主办方不允许数据公开 所以在这一系列博客中 我主要讲一下实现的思路 在YOLO演示的时候我会用其他的
  • 查看linux服务器内存信息

    查看服务器内存信息 dmidecode grep P A5 Memory s Device grep Size root localhost home dmidecode grep P A5 Memory s Device grep Siz
  • 【leetcode刷题】--- 21.合并两个有序链表(C++递归)

    21 合并两个有序链表 原题链接 https leetcode cn com problems merge two sorted lists 题目 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成
  • 关于ApplicationContext的getBean()方法发现

    假定 Son类实现father接口 在Son类定义声明式事务后 通过ApplicationContext接口的getBean Class arg0 方法获取注入好的bean会报异常 方法参数Son class Son已声明bean org
  • 18. 线性代数 - 线性变换

    文章目录 线性空间 线性变换 线性变换的几何意义 特征值与特征向量 NumPy的矩阵操作 Hi 你好 我是茶桁 经历了几节线性代数课程之后 终于咱们到了最后一节课了 本节课的内容说多不多 说少也不少 我们先是要理解一下线性空间和线性变换 并
  • uml之Robustness Diagram

    Robustness Diagram 从需求分析到架构设计 转载自 http www dotblogs com tw jed archive 2010 11 21 robustness diagram aspx 什么是Robustness
  • Java IO流

    目录 一 认识Java的流 二 使用字节流读写文本文件 三 使用字符流读写文本文件 四 读写二进制文件 五 序列化和反序列化 六 总结 一 认识Java的流 1 读文件是指把文件中的数据读取到内存中 2 写文件是把内存中的数据写到文件中 3
  • 2023高教社杯 国赛数学建模E题思路 - 黄河水沙监测数据分析

    1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河 研究黄河水沙通量的变化规律对沿黄流域的环境治理 气候变 化和人民生活的影响 以及对优化黄河流域水资源分配 协调人地关系 调水调沙 防洪减灾 等方面都具有重要的理论指导意义 附件
  • spring boot 之 kotlin语言开发,用一次就想放弃Java,爽歪歪~~~

    废话少说 上视频 spring boot 之 kotlin用一次就想放弃java 爽歪歪 1 启动入口 SpringBootApplication EnableDiscoveryClient class TawuziAuthServerDb
  • LVGL V8学习之键盘按键样式重绘(二)

    这一篇继续研究一下基于btnmatrix的键盘按键重绘 是对上一篇LVGL V8学习之键盘按键样式重绘 一 的代码的优化 还是通过codeblock来模拟代码的运行 代码如下 按键矩阵的事件回调函数 static void btnmatri
  • vue后台管理系统—— 模糊查询和列表分页展示

    1 效果显示 通过输入作品名称或者开始时间或者结束时间来显示数据列表 这里的三项选择可以输入其一 也可以都输入 2 分页代码 用的是element组件 包括表格 上面的搜索 div class personalident top div
  • pycharm scrapy 爬取“文章”(文章阅读网)

    import scrapy import re from urllib import parse from scrapy http import Request from Article spider Article spider item
  • nvm使用大全nvm如何动态切换node版本

    注意 nvm use node版本时 要使用管理员权限打开cmd输入命令 否则报错 常用命令 nvm ls 列出所有已安装的 node 版本 nvm list 列出所有已安装的 node 版本 nvm list available 显示所有
  • java基础:日志框架

    文章目录 一 日志技术的概述 二 日志技术体系 三 Logback日志框架 四 Logback快速入门 五 Logback 配置详解 5 1 输出位置 格式设置 5 2 对日志不同内容是否输出的控制 一 日志技术的概述 程序中的日志可以用来