mybatis日志体系


title: “java日志体系”
createTime: 2021-12-08T12:19:57+08:00
updateTime: 2021-12-08T12:19:57+08:00
draft: false
author: “ggball”
tags: [“mybatis”]
categories: [“java”]
description: “java日志体系”

java日志体系

常用日志框架

  • Log4j:Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。
  • Log4j 2:Apache Log4j 2是Apache开发的一款Log4j的升级产品。
  • Commons Logging:Apache基金会所属的项目,是一套Java日志接口,之前叫Jakarta Commons Logging,后更名为Commons Logging。Apache推出了JCL(Jakarta Commons Logging),它只是定义了一套日志接口(其内部也提供一个Simple Log的简单实现),JCL也是一套接口规范,支持运行时动态加载日志组件的实现。也就是说,在应用程序代码中,只需调用Commons Logging的接口,底层实现可以是Log4j,也可以是JUL
  • SLF4J:全称为Simple Logging Facade for Java,类似于Commons Logging,是一套简易Java日志门面,本身并无日志的实现。
  • Logback:是一套日志组件的实现,属于SLF4J阵营。
  • JUL:全称是Java Util Logging,是JDK1.4以后提供的日志实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

mybatis日志体系

日志接口

定义了打印日志的级别

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

日志实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置日志框架的三种方式

1. 手动指定日志框架

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.先确定日志的Constructor对象

2.再利用Constructor对象和类名创建日志对象

3.打印日志的功能交给其他对象

2. 自动配置日志框架

如果不指定日志框架,mybatis也会尝试去找日志的实现

image-20211122223519531

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LogFactory中有静态代码块,会率先执行里面的代码,顺序执行(MyBatis查找日志框架的顺序为SLF4J→JCL→Log4j2→Log4j→JUL→No Logging),注意这里的run不是线程的run的概念,单纯只是匿名函数,传入Runnable对象,会执行它的run方法而已

比如会先执行第一个useSlf4jLogging 方法,如果找不到Slf4j对应的jar包,会抛出异常,但是不做任何处理,则继续执行下一个useCommonsLogging方法,如果找到了对应的jar包,会创建

Constructor对象在LogFactory对象里,然后继续执行tryImplementation、useLog4JLogging方法,每次都会判断Constructor对象为空,如果不为空则不会执行Runnable对象的run方法,从而实现自动确定日志框架。

3. 配置文件指定日志框架

image-20211122223624876

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

image-20211122223641660

项目启动时,会去读取mybatis配置文件,将logImpl的值set到configuration对象,如果有配置日志实现,configuration对象会在调用setLogImpl,来创建指定日志的Constructor对象

总结

三种配置日志框架的方法,了解怎么把日志实现交给mybatis,mybatis如何设置日志框架的, 日志框架设计的很巧妙,接口和实现完全分开来,用户可以随意搭配实现。

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

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

相关文章

74、SpringBoot 整合 Spring Data JDBC

总结:用起来跟 Spring Data JPA 差不多 什么是 JdbcTemplate?(Template译为模板) Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 ★ Spring Data JDBC 既不需要JPA、Hibernate这种ORM框架&a…

离线部署 python 3.x 版本

文章目录 离线部署 python 3.x 版本1. 下载版本2. 上传到服务器3. 解压并安装4. 新建软连信息5. 注意事项 离线部署 python 3.x 版本 1. 下载版本 python 各版本下载地址 本次使用版本 Python-3.7.0a2.tgz # linux 可使用 wget 下载之后上传到所需服务器 wget https://www.py…

gma 2 成书计划

随着 gma 2 整体构建完成。下一步计划针对库内所有功能完成一个用户指南(非网站)。 封皮 主要章节 章节完成度相关链接第 1 章 GMA 概述已完成第 2 章 地理空间数据操作已完成第 3 章 坐标参考系统已完成第 4 章 地理空间制图已完成第 5 章 数学运算模…

3288S Android11 适配红外遥控功能(超详细)

目录 一、rk3288平台红外遥控介绍二、原理图分析三、配置设备树并使能红外遥控功能四、打开红外打印功能,查看红外遥控的用户码和键值五、将查看到的红外遥控用户码和键值添加到设备树和.kl文件六、Android红外遥控.kl文件映射知识和使用添加新的.kl文件七、补充&am…

Unity中关于多线程的一些事

一.线程中不允许调用unity组件api 解决方法:可以使用bool值变化并且在update中监测bool值变化来调用关于unity组件的API. 二.打印并且将信息输出到list列表中 多线程可能同时输出多条信息。输出字符串可以放入Queue队列中。队列可以被多线程插入。 三.启用socke…

Python 网络爬取的时候使用那种框架

尽管现代的网站多采取前后端分离的方式进行开发了,但是对直接 API 的调用我们通常会有 token 的限制和可以调用频率的限制。 因此,在一些特定的网站上,我们可能还是需要使用网络爬虫的方式获得已经返回的 JSON 数据结构,甚至是处理…

【计算机毕业设计】基于SpringBoot+Vue记帐理财系统的设计与实现

博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计(Java项目、小程序、安卓等)、简历模板、学习资料、…

C语言 coding style

头文件 The #define Guard #define的保护文件的唯一性&#xff0c;防止被多重包含 格式 : <PROJECT>_< FILE>_H_ PROJECT : XS FILE : MV_CTR 头文件的包含顺序 C System FilesOther LibrariesUser LibraryConditional include 作用域 局部变量 -变量定义时需要…

go语言unsafe.Pointer与uintptr

以下内容来源go语言圣经 1、unsafe.Pointer&#xff0c;相当于c语言中的void *类型的指针&#xff0c;如果需要运算需要转成uintptr类型的指针 2. uintptr uintptr是一个无符号的整型&#xff0c;它可以保存一个指针地址。 它可以进行指针运算。 uintptr无法持有对象, GC不把…

Redis之Lua脚本

Redis之Lua脚本— Redission不仅提供了一套丰富的Redis客户端功能&#xff0c;还增加了很多高级功能&#xff0c;其中就包括分布式锁、发布和订阅、支持Lua脚本。Redission在底层利用Redis的SETNX命令实现分布式锁&#xff0c;并且处理了锁的续期问题&#xff0c;使用起来非常方…

【QandA C++】面向过程、面向对象、多态的原理、虚函数表、虚表指针、虚析构、虚构造、虚函数、纯虚函数等重点知识汇总

目录 面向过程和面向对象 面向对象的三大特性 多态的条件和原理 虚表存放位置、虚表指针初始化时间 析构函数为什么要为虚函数 构造函数为什么不能为虚函数 虚函数和纯虚函数的实现原理 虚函数和纯虚函数的区别 面向过程和面向对象 面向过程的&#xff0c;关注的是过程…

Kubernetes的容器批量调度引擎 Volcano

一个用于高性能工作负载场景下基于Kubernetes的容器批量调度引擎 Volcano是在Kubernetes上运行高性能工作负载的容器批量计算引擎。 它提供了Kubernetes目前缺少的一套机制&#xff0c;这些机制通常是许多高性能 工作负载所必需的&#xff0c;包括&#xff1a; - 机器学习/深度…

flurl监听报错返回的信息

前言 开发过程中使用flurl.http发送http请求&#xff0c;但是服务器有时候会返回400、404这样的错误&#xff0c;有时候会携带信息&#xff0c;比如json提示或者xml或者html的提示&#xff0c;一开始不知道怎么捕捉&#xff0c;需要结合apipost调试&#xff0c;经过百度查找&a…

关于遍历,递归,Divide and Conque,回溯,Memorization和DP的一个小结

个人的一个小结&#xff0c;参考了一些网上的思路&#xff1a; 遍历和Divide and Conquer分别代表至上而下和至下而上的两种处理问题的思路 遍历: 至上而下&#xff0c;对应回溯算法。函数签名一般是没有返回值的&#xff0c;例如void backtrack(…) Divide and Conquer: 至下…

三.vue2路由知识全总结

Vue Devtools&#xff1a;插件安装&#xff0c;展示模块中的数据 vue-router 应用场景&#xff1a;Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;让用 Vue.js 构建单页应用变得轻而易举。 嵌套的路由/视图表模块化的、基于组件的路由配置路由参数、…

一拖三快充线(USB-C转三充)的解决方案--LDR6020P

DR6020P 是带有 3 组 6 路 DRP USB-C 及 PD 通信协议处理模块和 USB2.0 Device 功能的 16 位 RISC MCU&#xff0c;内置 8K16 位 MTP 程序存储器&#xff08;可烧录 1000 次&#xff09;&#xff0c;512 字节的数据存储器&#xff08;SRAM&#xff09;。内置 LDO 5V 输出&#…

通讯网关软件011——利用CommGate X2ODBC实现DDE数据转入ODBC

本文介绍利用CommGate X2ODBC实将DDE数据源中的数据转入到ODBC数据源。CommGate X2ODBC是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;将DDE数据源&#xff08;如Excel&#xff09;的数据写…

postgresql-触发器

postgresql-触发器 触发器概述创建触发器管理触发器删除触发器事件触发器创建事件触发器修改触发器删除事件触发器 触发器概述 PostgreSQL 触发器&#xff08;trigger&#xff09;是一种特殊的函数&#xff0c;当某个数据变更事件&#xff08;INSERT、UPDATE、 DELETE 或者 TR…

uniapp获取openid

要获取用户的openid&#xff0c;需要使用微信小程序的登录API。以下是一个简单的示例代码&#xff1a; // 在page中引入wx-login组件 import wxLogin from /components/wx-loginexport default {components: { wxLogin },data() {return {openid: }},methods: {// wxLogin组件…

【3dmax】怎么将点删除而面保留

在编辑多边形模式下&#xff0c;选择点模式&#xff0c;选择要删除的点&#xff0c;在下拉面板中找到【移除】