西维科技做网站怎么样/上海专业的seo公司
依赖
<!--log4j依赖-->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency><!--测试-->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>
入门案例以及日志级别说明
@Test
public void test01() {/*Log4入门案例注意在家初始化信息:BasicConfigurator.configure();日志级别说明:Log4j提供了8个级别的日志输出,分别为ALL 最低等级 用于打开所有几倍的日志记录TRACE 程序推进下的追踪信息,这个追踪信息的日志级别非常低,一般情况下不使用DEBUG 指出细粒度信息时间对调试应用程序是非常有帮助的,主要是配合开发,在开发过程中打印一些重要的运行信息INFO 消息的粗粒度级别运行信息WARN 表示警告,程序在运行过程中会出现的有可能会发生的隐形的错误信息注意:,有些信息不是错误,但是这个级别的输出目的就是为了给程序员以提示ERROR 系统的错误信息,发生的错误不影响系统的运行一般情况下,如果不想输出太多的日志,则使用该级别即可FATAL 表示严重错误,它是哪一种一旦发生系统就不可能继续运行的严重错误如果这种级别的错误出现了,表示程序就可以停止运行了OFF 最高等级的级别,用户关闭所有的日志记录其中 DEBUG 是默认的日志输出级别*/// 加載初始化配置BasicConfigurator.configure();Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");
}
配置文件说明
log4j.rootLogger = trace,console# 配置appender 输出方式 日志输出到哪里,现在是控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender# 表示输出的格式
log4j.appender.console.layout = org.apache.log4j.PatternLayoutlog4j.appender.console.layout.conversionPattern = %r [%t] %p %c %x - %m%n
@Test
public void test02() {/*配置文件的说明1、观察原源码 BasicConfigurator.configure();可以得到两条信息(1)创建根节点对象 Logger root = Logger.getRootLogger();(2)根节点添加了ConsoleAppender对象(表示默认打印到控制台,自定义的格式化输出)2、不使用 BasicConfigurator.configure();加载使用自定义的配置文件来实现功能通过对上边第一点的输出配置文件需要提供Logger、Appender、Layout 3个组件信息(通过配置文件来代替代码)分析Logger logger = Logger.getLogger(Log4jTest.class);进入到getLogger方法,会看到代码LogManager.getLogger(clazz.getName());LogManager:是一个日志管理器LogManager,里边有很多常量,它们代表的就是不同形式(后缀名不同)的配置文件最常使用的就是log4j.properties 这个属性文件(语法简单,使用方便)问题:log4j.properties的加载时机找到LogManager的static代码块在static下遭到下列代码Loader.getResource("log4j.properties");系统会去当前类路径下找到log4j.properties这个文件进行加载对于maven工程resource目录就是当前类路径下的加载完毕后,配置文件是如何读取呢?OptionConverter.selectAndConfigure(url, configuratorClassName,LogManager.getLoggerRepository());进去方法:作为属性文件进行加载: configurator = new PropertyConfigurator();进入到这个PropertyConfigurator这个属性类,看到很多常量,这些常量就是我们在属性配置文件中的配置项如下两项是我们必须配置的static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger";static final String APPENDER_PREFIX = "log4j.appender.";通过这行代码:String prefix = APPENDER_PREFIX + appenderName;我们需要自定义一个appendername 假设蛇我们去的名字是console 就是控制台输出(起名字需要见名之意,console那么我们在配置应该配置控制台输出)log4j.appender.console取值就是log4j中为我们提供的appender类例如log4j.appender.console = org.apache.log4j.ConsoleAppender还可以指定输出格式通过代码:String layoutPrefix = prefix + ".layout";配置:log4j.appender.console.layout = org.apache.log4j.SimpleLayout通过log4j.properties继续在类中搜索找到方法void configureRootCategory在这个方法中找到执行了parseCategory 方法观察这个方法:执行了代码:StringTokenizer st = new StringTokenizer(value, ",");表示要以逗号的方式分割字符串,证明了log4j.rootLogger的取值,其中可以有多个值,但是要以逗号进行分割通过代码:String levelStr = st.nextToken();表示切割后的第一个值是日志的级别通过代码:while(st.hasMoreTokens())表示接下2~n个都是可以通过循环来取得的,具体的内容是:appenderName(日志输出到哪里)证明我们配置方式是:log4j.rootLogger = 日志级别,appenderName1,appenderName2,...,appenderName n表示我们可以同时在根节点上配置多个日志输出的途径通过我们自己的配置文件就可以加载和这个代码了*/// BasicConfigurator.configure();Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");
}
打开日志输出的详细信息
@Test
public void test03(){/*通过Logger中的开关打开日志输出的详细信息查看LogManager类中的方法:getLoggerRepository()找到代码LogLog.debug(msg, ex);Loglog会使用debug级别的输出为我们展现日志输出的详细信息Logger是记录系统的日志,那么Loglog的使用来记录Logger的日志进入到Loglog.debug(msg, ex)方法中通过代码:if(debugEnabled && !quietMode) {观察到if判断中的这两个开关都是必须开启才行!quietMode 是已经启动的状态,不需要我们去管debugEnabled默认是关闭的所以我们只需要设置debugEnabled为true就可以了*/LogLog.setInternalDebugging(true);Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");
}
关于log4j.properties 的 layout 的说明
log4j.appender.console.layout.conversionPattern = %r [%t] %p %c %x - %m%n
-X号: X信息输出时左对齐;
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.Java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java servlets这样的多客户多线程的应用中。
%%: 输出一个"%“字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符,Windows平台为”/r/n",Unix平台为"/n"输出日志信息换行
**可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。**如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。
@Test
public void test04() {/*关于log4j.properties 的 layout 的说明其中PatternLayout 是日常使用最多的方式查看源码setConversionPattern这个方式就是PatterLayout的核心方法conversionPattern在log4j.properties 这个文件中将layout设置为PatterLayout主要配置的属性是conversionPatter[%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式[%p]%r %c %t %d{yyyy:MM:dd HH:mm:ss} %m %n[%-5p] 左对齐5个字符,不足5个空格补齐[%5p] 右对齐5个字符,不足5个空格补齐*/Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");}
将日志输出到文件中
# 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示)
log4j.rootLogger = trace,file
# 配置appender 输出方式 日志输出到哪里,输出到文件
log4j.appender.file = org.apache.log4j.FileAppender
# 表示输出的格式
log4j.appender.file.layout = org.apache.log4j.PatternLayout
# 自定义layout输出的内容
log4j.appender.file.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n
# 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性
log4j.appender.file.file = E://test//log4j.log
# 配置输出的字符编码
log4j.appender.file.encoding = utf-8
@Test
public void test05() {/*将日志输出到文件中console是输出控制台的,将日志输出到文件中,也可以做多方向的输出查看FileAppender的源码查看属性信息protected boolean fileAppend = true; 表示是否追加日志信息,true表示追加protected int bufferSize = 8*1024; 缓冲区的大小 kb继续观察找到 setFile 方法 设置文件的位置通过ognl可以推断出setFile这个方法操作的就是File如果有输出中文的需求怎么办观察FileAppender的父类 WriterAppenderprotected String encoding; 有一个这个属性,就是来设置日志输出的字符编码*/Logger logger = Logger.getLogger(Log4jTest.class);logger.fatal("fatal信息");logger.error("error信息");logger.warn("warn信息");logger.info("info信息");logger.debug("debug信息");logger.trace("trace信息");}
日志太大对其进行分割----按照文件大小
# 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示)
log4j.rootLogger = trace,rollingFile
# 配置RollingFileAppender 输出方式 日志输出到哪里,输出到文件
log4j.appender.rollingFile = org.apache.log4j.RollingFileAppender
# 表示输出的格式
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
# 自定义layout输出的内容
log4j.appender.rollingFile.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n
# 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性
log4j.appender.rollingFile.file = E://test//log4j.log
# 配置输出的字符编码
log4j.appender.rollingFile.encoding = utf-8
# 指定日志文件内容大小 1兆b 超过就进行拆分
log4j.appender.rollingFile.maxFileSize = 1MB
# 指定日志拆分的数量
log4j.appender.rollingFile.maxBackupIndex = 5
@Test
public void test06() {/*将日志输出到文件中日志太多了,不方便管理怎么维护FileAppender为我们提供了好用的子类来进一步对文件输出进行处理RollingFileAppenderDailyRollingFileAppender1、RollingFileAppender这个类表示按照文件的大小来进行拆分的方式进行操作配置文件进行RollingFileAppender的相关配置如何拆分,观察RollingFileAppender的源码protected long maxFileSize = 10*1024*1024;表示拆分文件的大小,默认是10mprotected int maxBackupIndex = 1; 拆分文件的书名# 指定日志文件内容大小 1兆b 超过就进行拆分log4j.appender.rollingFile.maxFileSize = 1MB# 指定日志拆分的数量log4j.appender.rollinFile.maxBackupIndex = 5只要文件超过1MB,那么则会生成另外一个文件,文件的数量最多是5个文件1 记录日志 1MB文件2 记录日志 1MB......文件5 记录日志 1MB如果5个文件不够怎么办,作为日志管理来说,也不可能让日志无休止的继续增长下去所以,覆盖策略,按照时间来进行覆盖,原则就是保留新的,覆盖旧的*/Logger logger = Logger.getLogger(Log4jTest.class);for (int i = 0; i < 10000; i++) {logger.fatal(i + "fatal信息" );logger.error(i + "error信息");logger.warn(i + "warn信息");logger.info(i + "info信息");logger.debug(i + "debug信息");logger.trace(i + "trace信息");}
日志太大对其进行分割----按照时间大小
配置文件
# 第一个是日志输出级别 2-n是appenderName(就是日志在哪里展示)
log4j.rootLogger = trace,dailyRollingFile
# 配置DailyRollingFileAppender 输出方式 日志输出到哪里,输出到文件
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
# 表示输出的格式
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
# 自定义layout输出的内容
log4j.appender.dailyRollingFile.layout.conversionPattern = [%-5p]%r %c %t %d{yyyy:MM:dd-HH:mm:ss} %m %n
# 文件存储的位置 第一个file是我们自己命名的appenderName 第二个file是我们用来指定文件位置的属性
log4j.appender.dailyRollingFile.file = E://test//log4j.log
# 配置输出的字符编码
log4j.appender.dailyRollingFile.encoding = utf-8
# 根据时间来进行拆分
# 设置DatePattern属性为'.'yyyy-ww 这个是按照周来进行拆分日志
log4j.appender.dailyRollingFile.datePattern = '.'yyyy-MM-dd HH-mm-ss
相关文章:

log4j学习
依赖 <!--log4j依赖--> <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency><!--测试--> <dependency><groupId>org.junit.jupiter</g…...

【Vue2+3入门到实战】(4)Vue基础之指令修饰符 、v-bind对样式增强的操作、v-model应用于其他表单元素 详细示例
目录 一、今日学习目标1.指令补充 二、指令修饰符1.什么是指令修饰符?2.按键修饰符3.v-model修饰符4.事件修饰符 三、v-bind对样式控制的增强-操作class1.语法:2.对象语法3.数组语法4.代码练习 四、京东秒杀-tab栏切换导航高亮1.需求:2.准备代…...

【数据结构和算法】找到最高海拔
其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列…...

redis相关问题
1、概述: 1. 非关系型数据库 2. 是分布式缓存数据库 3. 使用 key -value结构存储 2、作用: 用作缓存降低数据库压力,提高性能;可以用作消息队列(削峰、解耦、异步调用) 3、基础语法: 基础命令…...

第41节: Vue3 watch函数
在UniApp中使用Vue3框架时,你可以使用watch函数来观察和响应Vue实例上的数据变化。以下是一个示例,演示了如何在UniApp中使用Vue3框架使用watch函数: <template> <view> <input v-model"message" type"text…...

Centos7:升级gcc、g++到版本5.2.0
背景 Centos7.9版本默认的g版本是4.8.5,在实践golang项目中,用到C14,编译时会报错:gcc: error: unrecognized command line option ‘-stdc14’ 因此,gcc需要升级到更高版本,我这里使用源码编译形式升级到g…...

Pytohn data mode plt
文章目录 文件的读写创建.csv类型的文件,并读取文件创建.xlsx文件 使用Python做图生成数据集切片取值操作修改张量中指定位置的数据 知识点torch.arange(x)torch.tensor(2)Atorch.randn(36).reshape(6,6)shapenumel()reshape(x,y,z)torch.zeros(3,3,4)torch.ones(2,…...

内网离线搭建之----kafka集群
1.系统版本 虚拟机192.168.9.184 虚拟机192.168.9.185 虚拟机192.168.9.186系统 centos7 7.6.1810 2.依赖下载 ps:置顶资源里已经下载好了,直接用!!!!!!!!…...

5.1 显示窗口的内容(一)
一,如何显示窗口的内容? 显示器用于在物理硬件(如计算机显示器或触摸屏显示器)上显示窗口的内容。 屏幕API提供的功能允许我们创建同时写入多个窗口和显示的应用程序。屏幕支持多个显示器,但创建和管理使用多个显示器…...

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…...

关于Python里xlwings库对Excel表格的操作(十八)
这篇小笔记主要记录如何【设置单元格数据的对齐方式】。前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2)如何在Wps下…...

VScode远程连接服务器,Pycharm专业版下载及远程连接(深度学习远程篇)
Visual Code、PyCharm专业版,本地和远程交互。 远程连接需要用到SSH协议的技术,常用的代码编辑器vscode 和 pycharm都有此类功能。社区版的pycharm是免费的,但是社区版不支持ssh连接服务器,只有专业版才可以,需要破解…...

Vue2和Vue3组件间通信方式汇总(3)------$bus
组件间通信方式是前端必不可少的知识点,前端开发经常会遇到组件间通信的情况,而且也是前端开发面试常问的知识点之一。接下来开始组件间通信方式第三弹------$bus,并讲讲分别在Vue2、Vue3中的表现。 Vue2Vue3组件间通信方式汇总(1)…...

PyTorch加载数据以及Tensorboard的使用
一、PyTorch加载数据初认识 Dataset:提供一种方式去获取数据及其label 如何获取每一个数据及其label 总共有多少的数据 Dataloader:为后面的网络提供不同的数据形式 数据集 在编译器中导入Dataset from torch.utils.data import Dataset 可以在jupyter中查看Dataset官方文档&…...

TensorFlow是什么
TensorFlow是什么 Tensorflow是一个Google开发的第二代机器学习系统,克服了第一代系统DistBelief仅能开发神经网络算法、难以配置、依赖Google内部硬件等局限性,应用更加广泛,并且提高了灵活性和可移植性,速度和扩展性也有了大幅…...

docker-compose 安装Sonar并集成gitlab
文章目录 1. 前置条件2. 编写docker-compose-sonar.yml文件3. 集成 gitlab4. Sonar Login with GitLab 1. 前置条件 安装docker-compose 安装docker 创建容器运行的特有网络 创建挂载目录 2. 编写docker-compose-sonar.yml文件 version: "3" services:sonar-postgre…...

支付平台在选择服务器租用时要注意什么?
如果要建设一个支付平台的话要进行服务器租用,一旦涉及到钱的方面就必须要顾虑到多方面,这样才能保证安全性,今天小编就给大家讲一讲要注意什么呢? 1、带宽:带宽是业务稳定性的直接因素,只有带宽充足,这样…...

IDEA2018升级2023,lombok插件不兼容导致get/set方法无法使用
1、问题 最近了解到一款叫CodeGeeX 的智能编程助手,想要试用一下,但是IDEA2018版本太低了,没有CodeGeeX插件,于是打算将IDEA升级到2023.2.5版本,具体升级过程略过,升级完成后,启动项目…...

企业微信服务商代开发模式获取授权企业的客户信息
服务商代开发素材: 服务商可信ip 企业微信认证 测试时不用再次创建一个企业微信,可以用当前的企业微信作为授权企业使用一、创建代开发应用模板 1,代开发模板回调URL配置 参考 注意:保存代开发应用模板时的corpId是服务商的企业…...

库存管理方法有哪些
库存管理是工作中一个离不开的话题,不管是仓管还是业务员都或多或少接触过库存管理方面的工作,例如:进货、销售、库存盘点等等这些都属于库存管理的范筹,那么库存管理方法有哪些?用哪种方法管理库存比较好,…...

数字化车间推动制造业生产创新
一、数字化车间应用场景 1:资源智能化管理 数字化车间通过搭建智能化的设备监测系统,实时采集和监控设备的运行状态和生产数据,对设备进行实时管理和维护,降低故障率和维修成本。同时,通过对生产过程中的数据采集和分…...

Linux的安装及管理程序
一、如何在linux安装卸载软件 1. 编译安装 灵活性较高 难度较大 可以安装较新的版本 2. rpm安装(redhat) linux 包安装 查软件信息:是否安装,文件列表 rpm 软件名 3. yum yum是RPM升级版本,解决rpm的弊端 安装软件 首…...

c语言-表达式求值
目录 前言一、隐式类型转换1.1 整型提升 二、算术转换三、操作符的属性四、问题表达式总结 前言 表达式求值的顺序一部分由操作符的优先级和结合性决定。 有些表达式的操作数在求值的过程中可能需要转换为其他类型 一、隐式类型转换 隐式类型转换是在编译器自动进行的类型转换…...

小型洗衣机哪个牌子质量好?口碑最好的四款小型洗衣机推荐
随着科技的快速发展,现在的人们越来越注重自己的卫生问题,不仅在吃上面会注重卫生问题,在用的上面也会更加严格要求,而衣服做为我们最贴身的东西,我们对它的要求也会更加高,所以最近这几年较火爆的无疑是内…...

springCould中的Ribbon-从小白开始【5】
目录 1.什么是Ribbo❤️❤️❤️ 2.eureka自带Ribbon ❤️❤️❤️ 3. RestTemplate❤️❤️❤️ 4.IRule❤️❤️❤️ 5.负载均衡算法❤️❤️❤️ 1.什么是Ribbo 1.Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端,负载均衡的工具。2.主要功能是提供客户端的软件…...

持续集成交付CICD:Jira 发布流水线
目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira 远程触发 Jenkins 实现合并 GitLab 分支 4.K8S master节点操作 5.Jira 发布流水线 一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins…...

JuiceSSH结合内网穿透实现公网远程访问本地Linux虚拟机
文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...

使用 pytest.ini 文件控制输出 log 日志
一、前置说明 pytest.ini 文件中可以配置参数来控制 pytest 的运行行为,其存放路径要求与 conftest.py 一样。 项目根目录project_root/ ├── pytest.ini ├── tests/ │ └── test_demo.py以test开头的测试子目录project_root/ ├── tests/ │ ├── pytest.in…...

【Spring】SpringBoot 配置文件
文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map…...

Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享
作者:索增增(小红书)、宋泽辉(小红书)、张佐玮(阿里云) 背景介绍 Koordinator 是一个开源项目,基于阿里巴巴在容器调度领域多年累积的经验孵化诞生,目前已经支持了 K8s…...