go语言的成神之路-标准库篇-fmt标准库
目录
一、三种类型的输出
print:
println:
printf:
总结:
代码展示:
二、格式化占位符
%s:用于格式化字符串。
%d:用于格式化整数。
%f:用于格式化浮点数。
%v:用于格式化任何值,返回其默认格式。
%T:用于输出变量的类型。
进制及其字符?
宽度标识符?
代码展示:?
三、Fprint
输出到标准输出
写入文件中
输出到浏览器
代码展示:
四、Sprint
基本用法:
?多个参数格式化:
格式化复杂数据类型:
五、四种类型的输入
fmt.Scan():
fmt.Scanf():
fmt.Scanln():
bufio.Reader:
一、三种类型的输出
在 Go 语言中,print
、printf
和println
是用于输出内容到控制台的函数,但是它们的用法和功能有所不同:
print:
print
是一个内置函数,用于输出没有格式的字符串。它不添加换行符,也不支持格式化。
println:
println
也是一个内置函数,类似于print
,但它会在输出后自动添加一个换行符。
printf:
-
printf
是fmt
包中的一个函数,支持格式化输出。可以使用格式化动词插入变量或指定输出格式。package mainimport "fmt"func main() {// Print()函数用于打印字符串到标准输出,不带换行符fmt.Print("Hello, ")fmt.Print("World!")// printf()函数用于格式化输出字符串fmt.Printf("Hello, %s! ", "World")// Println()函数用于打印字符串到标准输出,带换行符fmt.Println("Hello, World!")fmt.Println("Hello,", "World!") }
总结:
- 使用
print
和println
进行简单输出。 - 使用
fmt.Printf
进行格式化输出。
代码展示:
package mainimport "fmt"func main() {// Print()函数用于打印字符串到标准输出,不带换行符fmt.Print("Hello, ")fmt.Print("World!")// printf()函数用于格式化输出字符串fmt.Printf("Hello, %s!
", "World")// Println()函数用于打印字符串到标准输出,带换行符fmt.Println("Hello, World!")fmt.Println("Hello,", "World!")
}
二、格式化占位符
在 Go 语言中,fmt.Printf
函数使用格式化占位符来格式化输出。以下是一些常见的格式化占位符及其用法:
%s:用于格式化字符串。
%d:用于格式化整数。
%f:用于格式化浮点数。
%v:用于格式化任何值,返回其默认格式。
%T:用于输出变量的类型。
进制及其字符
宽度标识符
代码展示:
package main
import ("fmt")
func main() {name := "小明"fmt.Printf("Hello, %s!
", name) // 输出 Hello, 小明!age:=18fmt.Printf("小明今年%d岁了
",age) // 输出 小明今年18岁了price:=100.5fmt.Printf("价格是%.2f元
",price) // 输出 价格是100.50元//%vfmt.Printf("name=%v,age=%v,price=%v
",name,age,price) // 输出 naem=小明, age=18,price=100.5data := []int{1, 2, 3}fmt.Printf("Data: %v
", data) // 输出: Data: [1 2 3]fmt.Printf("Type of age: %T
", age) // 输出: Type of age: intfmt.Printf("Type of price: %T
", price) // 输出: Type of price: float64fmt.Printf("Type of data: %T
", data) // 输出: Type of data: []int//%tfmt.Printf("Is age true? %t
", age == 18) // 输出: Is age true? truefmt.Printf("Is price true? %t
", price == 100.5) // 输出: Is price true? truefmt.Printf("Is data true? %t
", data == nil) // 输出: Is data true? false//%bnum := 10fmt.Printf("二进制表示: %d is %b
", num, num) // 输出: 二进制表示: 10 is 1010//%cfmt.Printf("字符表示: %d is %c
", 65, 65) // 输出: 字符表示: 65 is A//%dfmt.Printf("十进制表示: %d is %d
", num, num) // 输出: 十进制表示: 10 is 10//%ofmt.Printf("八进制表示: %d is %o
", num, num) // 输出: 八进制表示: 10 is 12//%xfmt.Printf("十六进制表示: %d is %x
", num, num) // 输出: 十六进制表示: 10 is a
}
三、Fprint
在 Go 语言中,Fprint
函数属于fmt
包,用于将格式化的输出写入到指定的io.Writer
接口,而不是直接输出到标准输出。常见的用途包括将输出写入文件、网络连接等。Fprint
与Print
和Println
类似,但它允许你指定输出的目的地。
输出到标准输出
写入文件中
写入文件的时候可以参考下表,详细的罗列出了每一个数字代表的含义。
输出到浏览器
浏览器效果如下:
代码展示:
package main
import ("fmt""os""net/http"
)
func main() {// 输出到标准输出fmt.Fprint(os.Stdout, "Hello, world!")// 写入文件中f, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)if err!= nil {fmt.Println(err)return}defer f.Close()fmt.Fprint(f, "Hello, world!")// 启动一个 HTTP 服务器,监听 8080 端口,并使用自定义的处理器 MyHandlerhttp.ListenAndServe(":8080", &MyHandler{})
}
// 定义一个 MyHandler 结构体,用于处理 HTTP 请求
type MyHandler struct {
}// 实现 http.Handler 接口的 ServeHTTP 方法
// 当有 HTTP 请求到达时,该方法将被调用
func (*MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {// 使用 fmt.Fprint 将 "Hello, world!" 写入到浏览器的响应体中fmt.Fprint(w, "Hello, world!")
}
四、Sprint
在 Go 语言中,Sprint
函数属于fmt
包,用于将多个值格式化为字符串,而不是直接输出到控制台。与Print
或Println
不同,Sprint
会返回一个字符串,可以将其用于其他操作,例如赋值给变量或用于进一步处理。
基本用法:
package mainimport ("fmt"
)func main() {// 使用 Sprint 将字符串和数字组合生成一个字符串result := fmt.Sprint("Hello, ", "World!", 123)fmt.Println(result) // 输出: Hello, World!123
}
多个参数格式化:
package mainimport ("fmt"
)func main() {name := "Alice"age := 30// 使用 Sprint 组合多个变量为字符串output := fmt.Sprintf("Name: %s, Age: %d", name, age)fmt.Println(output) // 输出: Name: Alice, Age: 30
}
格式化复杂数据类型:
package mainimport ("fmt"
)func main() {data := []int{1, 2, 3}// 格式化切片成字符串str := fmt.Sprint(data)fmt.Println("Data:", str) // 输出: Data: [1 2 3]
}
Sprint
用于将格式化的值转化为字符串并返回。Sprintf
是更为常用的函数,允许使用格式占位符来进行复杂的格式化。Sprint
和Sprintf
都不会直接输出到控制台,而是生成字符串,可以用于赋值或进一步的处理。
五、四种类型的输入
在 Go 语言中,输入
通常指的是从用户或其他来源读取数据的过程。主要使用fmt
包中的函数和os
包中的函数来处理输入。
fmt.Scan():
用于从标准输入读取数据,适合读取单个值。
package mainimport ("fmt"
)func main() {var name stringfmt.Print("请输入你的名字: ")fmt.Scan(&name) // 将输入的名字存储到变量 name 中fmt.Println("你好,", name)
}
fmt.Scanf():
用于格式化读取输入,类似于printf
的格式化输出。
package mainimport ("fmt"
)func main() {var name stringvar age intfmt.Print("请输入你的名字和年龄(格式:名字 年龄): ")fmt.Scanf("%s %d", &name, &age) // 读取一个字符串和一个整数fmt.Printf("你好, %s,你的年龄是 %d!
", name, age)
}
fmt.Scanln():
类似于Scan()
,但会读取一整行直到换行符。
package mainimport ("fmt"
)func main() {var input stringfmt.Print("请输入一行内容: ")fmt.Scanln(&input) // 读取整行输入fmt.Println("你输入的是:", input)
}
bufio.Reader:
对于更复杂的输入,通常使用bufio.Reader
来读取。
它可以输入带空格的字符串
package mainimport ("bufio""fmt""os"
)func main() {reader := bufio.NewReader(os.Stdin)fmt.Print("请输入一行内容: ")input, _ := reader.ReadString('
') // 读取一行输入fmt.Println("你输入的是:", input)
}
相关文章:
go语言的成神之路-标准库篇-fmt标准库
目录 一、三种类型的输出 print: println: printf: 总结: 代码展示: 二、格式化占位符 %s:用于格式化字符串。 %d:用于格式化整数。 %f:用于格式化浮点数。 %v࿱…...
高级java每日一道面试题-2024年12月08日-JVM篇-什么是类加载器?
如果有遗漏,评论区告诉我进行补充 面试官: 什么是类加载器? 我回答: 在Java高级面试中,类加载器(ClassLoader)是一个重要的概念,它涉及到Java类的加载和初始化机制。以下是对类加载器的详细解释: 定义与作用 类加…...
数据库之连接池Druid
Druid是一个由阿里巴巴开源的高性能数据库连接池组件,它在许多项目中都是首选的连接池实现。Druid不仅提供了高效的连接管理,还具备丰富的监控和统计功能,以及强大的安全特性。 一、功能介绍 1、高效连接管理 Druid采用了高效的连接管理机…...
【如何审稿】Notes on Constructive and Positive Reviewing
学习体会: 用chatgpt翻译的2005年审稿人如何审稿的一篇文章, 学着用审稿人的角度评审自己写的稿件~ 全文摘录: 作为审稿人,您代表的是您的社区,您的审稿意见应当是专业和建设性的。会议的质量取决于审稿的质量。审稿人的任务是选出高质量、创…...
1.文本方块方法(Spacy Text Splitter 方法)Can‘t find model ‘zh_core_web_sm‘
一、概述 执行如下: def split_spacy(text):import spacynlp spacy.load( "zh_core_web_sm" ) doc nlp(text) for s in doc.sents: print(s) # d:\programdata\anaconda3\envs\python310\lib\site-packages if __name__"__main__":text &q…...
IT类项目实施流程
一、项目启动准备阶段 (一)甲方组建项目委员会 **甲方委员会确立:**指定负责人,全权负责整个项目人员、启动及时间调配、需求确定及需求变更、项目节点的验收、项目款项的支付工作。 (二) 乙方组建项目实施工作组 **乙方实施工作组确立:**工作组主要包括项目经理、需…...
数据分析平台业务落地痛点分析
在当今数字化时代,数据已成为企业决策和运营的核心驱动力。数据分析平台作为数据处理和洞察的重要工具,其业务落地过程中的痛点分析对于企业的数据战略至关重要。本文将通过概述、功能点、背景、业务点、底层原理等多个方面,深入剖析数据分析…...
java语言学习(5)
第九章 目录 类变量和类方法 理解main方法语法 代码块 单列设计模式 final关键字 抽象类 接口 类变量/静态变量 该变量最大的特点就是会被本类的所有对象实例共享,类变量可以通过类名来访问 分析代码,探讨内存的分配 class Child{private Str…...
基于SSM框架点餐管理系统(计算机毕业设计)论文,Java
系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…...
独家首发 | 基于 KAN、KAN卷积的轴承故障诊断模型
往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…...
nginx-proxy-manager初次登录502 bad gateway
nginx-proxy-manager初次登录502 bad gateway 按照官方docker-compose安装后,页面如下: 默认账户密码: adminexample.com/changeme点击sign in,提示Bad Gateway 打开调试 重装后依然如此,最后查阅githup issue 找到答案 https://github.com/NginxProxyManager/nginx-proxy-…...
棋牌项目Go的日志打印问题
棋牌项目Go的日志打印问题 项目使用 go work 管理模块 github.com/spf13/viper 通过 application.yml 加载配置 $ tree . ├── README.md ├── common │ ├── application.yml │ ├── config │ │ └── config.go │ ├── go.mod │ ├── go.su…...
基于SpringBoot校园台球厅人员与设备管理系统设计与实现
1.1课题背景与意义 在Internet高速发展的今天,计算机的应用几乎完全覆盖我们生活的各个领域,互联网在经济,生活等方面有着举足轻重的地位,成为人们资源共享,信息快速传递的重要渠道。在中国,网上管理的兴起…...
样品前处理工作站自动化操作
样品前处理工作站通过集成多种技术和自动化模块,实现了对样品的高效、精准处理。以下是实现自动化操作的关键步骤和原理: 1、集成多种技术:工作站通常集成了液体处理、固相萃取、离心、过滤等多种技术。这些技术的结合使得工作站能够完成从样…...
在 Vue 3 中实现点击按钮后禁止浏览器前进或后退
在 Vue 3 中实现点击按钮后禁止浏览器前进或后退,我们可以通过 ref 和 watch 来管理状态,同时使用 onBeforeUnmount 来清理事件监听。 使用 Vue 3 实现: <template><div><button click"disableNavigation">点击…...
【Redis集群】使用docker compose创建docker集群,并暴露外部接口
使用 Docker Compose 创建一个 Redis 集群并暴露外部接口需要配置 docker-compose.yml 文件。以下是一个基本的步骤,包括 Redis 集群的创建和外部接口的暴露。 1、创建 docker-compose.yml 首先,您需要创建一个 docker-compose.yml 文件,配…...
RabbitMq 基础
文章目录 一、初识 MQ1.1 同步调用:1.2 异步调用: 二、RabbitMQ三、SpringAMQP3.1 依赖和配置文件3.2 消息发送和接收:3.2.1 消息发送:3.2.2 消息接收: 3.3 WorkQueues 模型:3.4 交换机类型:3.4…...
类文件结构详解
一、引言 Java 类文件是 Java 虚拟机执行的基本单元。它包含了 Java 程序的字节码以及其他重要的元数据信息。了解类文件结构可以帮助我们更好地理解 Java 程序的编译过程、运行机制以及如何进行优化。 二、类文件结构概述 Java 类文件采用一种紧凑的二进制格式,主…...
01_Linux
一.Linux简介 1.1 Linux介绍 Linux是一套免费使用和自由传播的操作系统。说到操作系 统,大家比较熟知的应该就是Windows和MacOS操作系统, 我们今天所学习的Linux也是一款操作系统 1.2 Linux发展历史 时间:1991年 地点:芬兰赫尔…...
区块链与AI结合:驱动Web3的未来发展
Web3作为下一代互联网的核心理念,强调去中心化、用户主权和透明性。而区块链技术和人工智能(AI)则是推动Web3发展的两大关键力量。两者的结合不仅为Web3带来了新的可能性,还推动了智能化、透明化、自治化等特点的实现。本文将探讨…...
如何解决 docker 容器中 “-bash: ping: command not found” 错误 ?
在 Docker 的世界里,遇到错误是学习曲线的一部分,其中一个常见的错误是: -bash: ping: command not found。当您在 Docker 容器中尝试使用 ping 命令来测试与其他网络机器或服务的连接,但该命令在您的容器环境中不可用时ÿ…...
Leetcode 每日一题 242.有效的字母异位词
目录 问题描述 示例 题目要求 解决方案 算法思路 过题图片 代码实现 算法分析 优化思路 优化后的代码实现 优化后的算法分析 题目链接 问题描述 给定两个字符串 s 和 t,我们需要编写一个函数来判断 t 是否是 s 的字母异位词。字母异位词指的是两个字符串…...
centos7搭建FTP详细讲解
文章目录 1、ftp服务1、工作原理2、工作模式3、身份验证模式4、ftp服务器配置5、ftp客户端操作 1、ftp服务 1、工作原理  是一个cs架构 2个通道,21端口为控制…...
YOLOv8-ultralytics-8.2.103部分代码阅读笔记-build.py
build.py ultralytics\data\build.py 目录 build.py 1.所需的库和模块 2.class InfiniteDataLoader(dataloader.DataLoader): 3.class _RepeatSampler: 4.def seed_worker(worker_id): 5.def build_yolo_dataset(cfg, img_path, batch, data, mode"train"…...
JAVA-动态代理
文章目录 概要两种主要方式JDK 动态代理Proxy 类作用:常用方法: InvocationHandler 接口作用: 目标对象、代理对象、被代理对象JDK 动态代理工作原理 cjlib 动态代理demo 对比 概要 Java 动态代理利用 Java 的反射机制,可以在运行…...
【前端】React_Next.js
定期更新,建议关注、收藏! 安装 要使用react的框架,都应当安装node.js conda install nodejs选择Next.js 并创建项目 npx create-next-applatest可以看到目录结构生成如下 作为网页中的一个子路由 想让其嵌入已经写好的项目中…...
深入理解malloc与vector:内存管理的对比
引言 在编程中,内存管理是一个至关重要的环节。无论是C语言中的malloc函数,还是C标准库中的vector容器,它们都在内存分配和释放上扮演着关键角色。然而,它们的设计理念和用法有着显著的不同。本文将深入探讨malloc和vector的区…...
LeetCode题练习与总结:四数相加 Ⅱ --454
一、题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入:n…...
AI绘画设计实战-Day1
AI绘画变现方向: 生成猫咪拟人化;老照片修复;生成奇幻场景,换上客户的脸;生成商品详情模特图;商品宣传图;建筑/室内设计方案; AI视频-变现方向: AI跳舞视频ÿ…...
【Windows】ImmGetContext函数不适合跨进程工作
1. 教授回复 ChatGPT-o1: ImmGetContext() is not designed to work across process boundaries. It is indicates that a thread should not access the input context created by another thread, which implies that the function is intended for use within the same proc…...
【Linux】进程间通信——System V共享内存
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...
fastAPI快速使用
1. 安装: pip install fastapi 并且安装uvicorn来作为服务器: pip install uvicorn 最简单的 FastAPI 文件可能像下面这样: # main.pyfrom fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message&qu…...
ruoyi前后端不分离创建module
ruoyi创建module 1.创建表 2.在若依中创建module 3.注意选择maven 4.命名 5.把module加入到rouyi的pom.xml中 6.student 中加入common依赖 二.生成代码 2.1先创建目录 2.2导入创建的表 2.3 注意各种配置 2.4预览代码 2.5 生成代码 2.6…...
【AI日记】24.12.08 kaggle 比赛 Titanic-11
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容: 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习(pandas,numpy,sklearn,seaborn,matplotlib&a…...
处理后端返回的时间格式问题
今天在做项目的时候,发现后端返回的时间格式是“2024-12-08T06:11:46.00000:00”。 通过查阅资料,我发现这是后端返回的ISO 8601标准时间格式。这种格式在前端展示时可能不符合用户习惯,需要转换为更常见的“yyyy-MM-dd HH:mm:ss”格式&…...
【读书笔记·VLSI电路设计方法解密】问题33:ASIC芯片构建的主要步骤是什么
如问题32所述,ASIC芯片构建的主要步骤包括:RTL编写、功能验证、逻辑综合、布局布线、最终逻辑验证、时序验证、物理验证以及流片(Tapeout)。 RTL编写(RTL Coding) 这一阶段将设计意图从自然语言(如英文或中文)翻译为计算机可模拟的语言,以便进行仿真验证设计意图。此外…...
[机器学习] 监督学习之线性回归与逻辑回归
这里写目录标题 一、监督学习概述二、线性回归(一)模型表示(二)损失函数(三)梯度下降算法导入所需库生成模拟数据(可替换为真实数据)初始化参数并进行训练可视化损失函数随迭代次数的…...
十五、全局搜索正则表达式
一.grep简介 grep 全程Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特 定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep和egrep 二.grep的工作…...
kali Linux 安装配置教程(图文详解)
目录 一、下载安装VMware二、下载kali镜像三、安装kali到虚拟机 一、下载安装VMware 点我查看 二、下载kali镜像 官网下载:https://www.kali.org/get-kali/#kali-platforms 演示下载的为下图左边的,实际我们直接下载右侧虚拟机的直接使用就行 右侧下…...
QT QTableWidget::setModel”: 无法访问 private成员
//严重性代码说明项目文件行禁止显示状态 //错误C2248 “QTableWidget::setModel”: 无法访问 private 成员(在“QTableWidget”类中声明) QSqlQueryModel* sql_model; ui.tableView_database->setModel(sql_model); //ok ui.tableWidget_database->setModel(sql_model)…...
C#怎么判断电脑是否联网
在 C# 中,可以通过几种方法检测计算机是否联网。以下是几种常用的方式: 1. 使用 System.Net.NetworkInformation.Ping 类 通过发送一个 Ping 请求到公共 DNS 服务器(如 Google 的 DNS 8.8.8.8)来检测是否联网。这是最常见的一种…...
丢垃圾视频时间检测 -- 基于状态机的实现
文章目录 OverviewKey PointsPseudo-code Overview 需要考虑的方面 状态定义和转换条件时序约束空间约束异常处理 状态机的设计需要考虑的场景: 没有人人进入人携带垃圾人离开但垃圾留下垃圾消失异常情况(检测失败、多人多垃圾等) Key P…...
EEG2Rep自监督脑电大模型文献阅读
原文网址: EEG2Rep: Enhancing Self-supervised EEG Representation... - Google 学术搜索https://scholar.google.com/scholar?hlzh-CN&as_sdt0%2C5&qEEG2Rep%3AEnhancingSelf-supervisedEEGRepresentationThroughInformativeMaskedInputs&btnG 1.文…...
【前端知识】React简单入门
React语法介绍 概述一、产生背景与发展历程二、主要特点三、技术细节四、应用场景与优势五、学习与实践 JSX语法一、JSX的基本概念二、JSX的基本使用三、JSX中的JavaScript表达式四、JSX的条件渲染五、JSX的列表渲染六、JSX的样式处理七、JSX的其他注意事项 基础语法一、基础概…...
高通---Camera调试流程及常见问题分析
文章目录 一、概述二、Camera配置的整体流程三、Camera的代码架构图四、Camera数据流的传递五、camera debug FAQ 一、概述 在调试camera过程中,经常会遇到各种状况,本篇文章对camera调试的流程进行梳理。对常见问题的提供一些解题思路。 二、Camera配…...
电压电流声音信号采集与分析系统
基于Labview的电压电流与声音信号采集与分析系统可以同时采集:电压、电流与振动信号。该系统部件可以采集传感器的真实数据,而且可以对采集的信号进行时域与频域分析,并可以实时显示历史数据,保存历史数据。具体的功能如下&#x…...
MongoDB语法及MongoTemplate用法
文章目录 概念操作数据库语法数据库及文档操作文档操作 整合springboot的MongoTemplate用法springboot配置插入删除更新查询 概念 1.MongoDB 是一个文档数据库,数据以 BSON 方式存储(类似于json) 2.文档(Document)&am…...
【git reset】本地下载特定历史提交哈希值的github文件【未联网服务器】进行git reset操作
本地电脑下载git文件,并进行git reset操作 问题描述:解决方法:方法1:直接下载特定版本的github压缩包。方法二: 在本地windows电脑上安装git工具进行git reset版本回退,之后上传相应版本的压缩包到服务器上…...
【开源安全保护】如何安装JumpServer堡垒机
【开源安全保护】如何安装JumpServer堡垒机 什么是堡垒机 大家好,我是星哥,今天我以前来认识堡垒机 堡垒机(Bastion Host),也称为跳板机(Jump Server),是指在计算机网络中&#x…...
log4j漏洞复现--vulhub靶场
声明:学习过程参考了同站的B1g0rang大佬的文章 Web网络安全-----Log4j高危漏洞原理及修复(B1g0rang) CVE-2021-44228 RCE漏洞 Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输…...