org.slf4j日志组件实现日志功能

news2024/11/25 2:46:59

slf4j 全称是Simple Logging Facade for Java。facade是一种设计模式。
slf4j 是一个抽象程度更高的日志组件,本身并不提供实际的日志功能。实际的日志功能是通过log4j等日志组件实现,而使用者只需要关心 slf4j 给出的API。
slf4j 仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,
所以单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如log4j或者log4j2

slf4j-api提供了slf4j的抽象接口,我们作为使用者,只需要关心它提供的API就行。
slf4j-log4j12是slf4j与log4j的桥接组件。
log4j是我们常见的log4j日志组件。

Maven相关配置,会自动安装依赖 log4j-1.2.17

<!-- 日志相关 https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

需要补充配置文件:执行代码对应resources目录下

配置文件详细说明:

## 1 Level(Singe) file/Console (自动默认Level.DEBUG) =off,fatal,error、warn、info、debug
log4j.rootLogger=debug, stdout, file

Layout:日志输出格式,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

# 2.1 输出到console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# %d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式-->2023-12-17 15:19:11 ,311
# %p   输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL-->DEBUG
# %c   输出所属的类目,通常就是所在类的全名-->com.cacho.s2b.lesson.learn.LearnLog
# %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数-->com.cacho.s2b.lesson.learn.LearnLog.main(LearnLog.java:12)
# %L   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数-->12=代码行数
# %m   输出代码中指定的消息-->真实打印的信息
# %r   输出自应用启动到输出该log信息耗费的毫秒数
# %n   输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss ,SSS} %p %c:%l --> %m%n

# 2.2 输出到文件:
# 2.2.1 FileAppender(文件);
# 2.2.2 RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件);
    # 2.2.2.1 MaxBackupIndex=10-->指定可以产生的滚动文件的最大数10
    # 2.2.2.2 MaxFileSize=1M-->日志文件到达该大小时,将会自动生成新文件test1.log.1
# 2.2.3 DailyRollingFileAppender(每天产生一个日志文件);
    # 2.2.3.1 DatePattern='.'yyyy-MM-dd(默认每天一个文件);'.'yyyy-MM-dd-HH-mm(每分钟)
# 2.2.4 WriterAppender(将日志信息以流格式发送到任意指定的地方)
# 2.2.5 Append=false(默认值是true=将消息增加到指定文件中;false=将消息覆盖指定的文件内容)
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.File=logs/test.log
log4j.appender.file.MaxFileSize=1kb
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file. =org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c:%L --> %m%n

测试代码:

package com.cacho.s2b.lesson.learn;

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

/** @Description: slf4j-api=1.7.30 + slf4j-log4j12=1.7.25 + log4j=1.2.17
 * @Author LingWei
 * @date 2023/12/14
 **/
public class LearnLog {
    public static void main( String[] args ){
        String error = "error日志信息";
        String warn = "error日志信息";

        Logger logger = LoggerFactory.getLogger(LearnLog.class);
        logger.debug("slf4j项目使用了日志系统,这里是项目debug日志信息");
        logger.info("slf4j项目使用了日志系统,这里是项目info日志信息");
        logger.warn("slf4j项目使用了日志系统,这里是项目{}",warn);
        logger.error("slf4j项目使用了日志系统,这里是项目{}{}",error,":可以多个参数"); //{}替换成对应的变量值
    }
}

最终打印结果:

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

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

相关文章

Redis BitMap(位图)

这里是小咸鱼的技术窝&#xff08;CSDN板块&#xff09;&#xff0c;我又开卷了 之前经手的项目运行了10多年&#xff0c;基于重构&#xff0c;里面有要实现一些诸如签到的需求&#xff0c;以及日历图的展示&#xff0c;可以用将签到信息存到传统的关系型数据库&#xff08;MyS…

基于SpringBoot的超市账单管理系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

JS模块化规范之ES6及UMD

JS模块化规范之ES6及总结 前言ES6模块化概念基本使用ES6实现 UMD(Universal Module Definition)总结 前言 ESM在模块之间的依赖关系是高度确定的&#xff0c;与运行状态无关&#xff0c;编译工具只需要对ESM模块做静态分析&#xff0c;就可以从代码字面中推断出哪些模块值未曾被…

快速排序(非递归)以及归并排序的递归与非递归

快速排序的非递归算法&#xff1a; 递归次数太多的缺陷&#xff1a;极端情况下&#xff08;栈帧深度太深&#xff09;会导致栈溢出&#xff0c;即使程序代码正确&#xff08;递归的深度足够深时&#xff0c;空间不足&#xff0c;就会导致栈溢出&#xff09;&#xff0c;因此在…

hbase用shell命令新建表报错ERROR: KeeperErrorCode = NoNode for /hbase/master

或者HMster开启后几秒消失问题解决 报错如图&#xff1a; 首先jps命令查看当前运行的内容有没有HMaster,如果没有&#xff0c;开启一下hbase,稍微等一会儿&#xff0c;再看一下HMaster,如果仍和下图一样没有&#xff0c;就基本找到问题了 本人问题原因&#xff1a;hbase-site…

【深入使用】PHP的PDO 基本使用

前言&#xff1a; PDO&#xff1a;数据库抽象层 简介&#xff1a;PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口&#xff0c;PDO解决了数据库连接不统一的问题。是PHP 5新加入的一个重大功能 【为什么要使用PDO】&#xff1f; PDO是PHP5新加入的一个重大功能&a…

hab_virtio hypervisor 虚拟化

Linux的 I / O 虚拟化 Virtio 框架 简而言之&#xff0c;virtio是半虚拟化管理程序中设备上的抽象层。virtio由Rusty Russell开发以支持他自己的虚拟化解决方案lguest。本文从准虚拟化和仿真设备的介绍开始&#xff0c;然后探讨的细节virtio。重点是virtio2.6.30内核发行版中的…

提前预判和确认再做 现货白银投资的两种思路

在现货白银投资中&#xff0c;对于交易的步骤长期有两种看法。一种是提前预判行情并提前布局。另外一种是等待行情启动再做布局。这种两种方法要怎么选呢&#xff1f;笔者将从自己的角度出发&#xff0c;对这个问题进行讨论。 我们来看一下前一种的投资者&#xff0c;他们喜欢提…

vulnhub-Tre(cms渗透)

靶机和kali都使用net网络&#xff0c;方便探测主机获取ip1.靶机探测 使用fping扫描net网段 靶机ip&#xff1a;192.168.66.130 2.端口扫描 扫描发现该靶机三个端口&#xff0c;ssh&#xff0c;还有两个web&#xff0c;使用的中间件也是不一样的&#xff0c;一个是apache&…

TortoiseGit通过SSH连接配置,生成SSH密钥方法

生成SSH密钥&#xff1a; Win环境下命令(git ssh key是可以自定义命名的)&#xff1a; ssh-keygen -t ed25519 -C "git ssh key" && start "" "C:\Windows\notepad.exe" "C:\Users\%username%\.ssh\id_ed25519.pub" 打开cm…

指针---你真的会使用指针吗?

指针作为C语言中的一个部分&#xff0c;可以说指针是C语言的核心&#xff0c;那么它的难度肯定是不言而喻的&#xff0c;总是能把人给绕得找不到方向。 今天我就好好的说一说指针这个东西。 1、何为指针&#xff1f; 指针是C语言中用来存放地址的一个变量类型。我们可以将指针看…

图像增强2023最新经典顶会论文和代码合集,附开源数据集下载

图像增强是图像处理领域长期的、不可回避的研究课题&#xff0c;也是活跃在各大顶会中的热门研究方向。其应用范围广泛涉及医学影像分析、安全监控、智能交通、目标检测与识别、遥感影像处理等领域&#xff0c;具有很高的实用性&#xff0c;因此每年的相关论文数量也比较多。 …

2023/12/20 work

1. 使用select完成TCP客户端程序 服务端&#xff1a;#include <stdio.h> #include <string.h> #include <stdlib.h> #include <myhead.h>#define PORT 9999 //端口号 #define IP "192.168.125.12" //IP地址int ma…

C++实现位图

目录 一、什么是位图 二、位图类 1.参数及构造函数 2.set函数设置为1&#xff08;代表存在&#xff09; 3.reset函数设置为0&#xff08;代表不存在&#xff09; 4.test函数查看状态&#xff08;0还是1&#xff09; 三、位图的变形 一、什么是位图 位图这个词汇比较少见…

一行代码修复100vh bug

你知道奇怪的移动视口错误&#xff08;也称为100vh bug&#xff09;吗&#xff1f;或者如何以正确的方式创建全屏块&#xff1f; 一、100vh bug 什么是移动视口错误&#xff1f; 你是否曾经在网页上创建过全屏元素&#xff1f;只需添加一行 CSS 并不难&#xff1a; .my-page {h…

PAT 乙级 1023 组个最小数

1023 组个最小数 分数 20 作者 CAO, Peng 单位 Google 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字&#xff0c;但必须全部使用。目标是使得最后得到的数尽可能小&#xff08;注意 0 不能做首位&#xff09;。例如&#xff1a;给定两个 0&#xff0c;两个 1&#xff…

【教程】cocos2dx资源加密混淆方案详解

1,加密,采用blowfish或其他 2,自定是32个字符的混淆code 3,对文件做blowfish加密,入口文件加密前将混淆code按约定格式(自定义的文件头或文件尾部)写入到文件 4,遍历资源目录,对每个文件做md5混淆,混淆原始串“相对路径”“文件名”混淆code, 文件改名并且移动到资源目录根…

Python开发GUI常用库PyQt6和PySide6介绍之二:设计师(Designer)

Python开发GUI常用库PyQt6和PySide6介绍之二&#xff1a;设计师&#xff08;Designer&#xff09; PySide6和PyQt6都有自己的设计师&#xff08;Designer&#xff09;&#xff0c;用于可视化地设计和布局GUI应用程序的界面。这些设计师提供了丰富的工具和功能&#xff0c;使开…

acwing-蓝桥杯C++ AB组辅导课Day2-递归习题+递推+二分

感谢梦翔老哥的蓝桥杯C AB组辅导课~ 递归习题&#xff1a; 1.递归实现组合型枚举 题意&#xff1a; 题目要求输出组合枚举&#xff0c;与排列不同&#xff0c;排列具有顺序之分&#xff0c;对于组合来说&#xff0c;是没有顺序之分的&#xff0c;所以[1,2,3]和[3,2,1]被看成同…

灰盒测试简要学习指南!

在本文中&#xff0c;我们将了解什么是灰盒测试、以及为什么要使用它&#xff0c;以及它的优缺点。 在软件测试中&#xff0c;灰盒测试是一种有用的技术&#xff0c;可以确保发布的软件是高性能的、安全的并满足预期用户的需求。这是一种从外部测试应用程序同时跟踪其内部操作…