[Java]各种日志详细总结_更新记录时 详细记录各字段的具体更新细节日志(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  1. commons-logging:通用的日志接口,common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库,自己也自带一个功能很弱的日志实现
  2. slf4j:日志门面,只提供接口方法,当配合特定的日志实现时,需要引入相应的桥接包
  3. log4j2:

在logging中,通常包含以下几个元素:
1.log- 日志对象
2.level - 日志级别
3.formatter/render/layout - 格式化日志记录
4.handler/appender - 输出位置,包括console, file, stream

二、java.util.logging简介

源码演示:

< public class Test {
	public static void main(String[] args) throws Exception {
		// 1.创建log
		Logger log = Logger.getLogger("logtest");
		// 2.设置log级别(默认为info级别)
		log.setLevel(Level.INFO);
		// 3.设置Handler
		FileHandler fileHandler = new FileHandler("d:" + File.separator + "log.txt");
		// 4.Handler格式化(如果不格式化,默认输出为xml类型)
		fileHandler.setFormatter(new Formatter() {
			@Override
			public String format(LogRecord record) {
				StringBuilder sb=new StringBuilder("[" + new Date().toString()+this.getClass().getName() + "]");
				sb.append(record.getLevel() + "\t" + record.getMessage()+"\r\n");
				return  sb.toString() ;
			}
		});
		// 5.日志添加Handler
		log.addHandler(fileHandler);
		// 6.日志输出内容
		log.fine("fine日志测试");//比info级别低的日志将不会输出
		log.info("info日志测试");
		log.warning("warning日志测试");
	}
}>

输出结果如图:

更多细节及原理请查看—http://www.oseye.net/user/kevin/blog/237

http://lavasoft.blog.51cto.com/62575/184492/

三、log4j

log4j跟其它logger机制一样,存在着基本的logger所有基本概念,只是它的fomatter叫做patternLayout, 而handler则叫做appender. 另外log4j和java util logging在level的划分上有所不同,log4j的level分为:TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL。

1.工程结构

2.配置文件(本文以property方式,xml方式请查看其他)

<span style="font-size:18px;">####输出级别为 debug,目的地为appender1(可以指定多个):
log4j.rootLogger=debug,appender1,appender2,appender3 
 
####appender1 配置(控制台输出):
#输出位置:
log4j.appender.appender1=org.apache.log4j.ConsoleAppender  
#输出格式:
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout

####appender2 配置(文件输出,html格式):
#输出位置:
log4j.appender.appender2=org.apache.log4j.FileAppender
#输出位置:
log4j.appender.appender2.File=D:/appender2.html 
#输出格式:
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout

####appender3 配置(文件输出,自定义格式):
#输出位置:
log4j.appender.appender3=org.apache.log4j.FileAppender
#输出位置:
log4j.appender.appender3.File=D:/appender3.txt 
#输出格式:
log4j.appender.appender3.layout=org.apache.log4j.PatternLayout
#自定义样式  , %r 时间 ,%t方法名 main,%p优先级 DEBUG/INFO/ERROR  , 
#%c所属类的全名(包括包名),%l 发生的位置,在某个类的某行 ,%m 输出代码中指定的讯息,%n输出一个换行符号  
log4j.appender.appender3.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n</span>

说明:

1).配置根Logger,其语法为: 
  log4j.rootLogger = [ level ] , appenderName, appenderName, …
  其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指B日志信息输出到哪个地方。您可以同时指定多个输出目的地。

2).配置日志信息输出目的地Appender,其语法为: 
  log4j.appender.appenderName = fully.qualified.name.of.appender.class
  log4j.appender.appenderName.option1 = value1
  …
  log4j.appender.appenderName.option = valueN

其中,Log4j提供的appender有以下几种:
  org.apache.log4j.ConsoleAppender(控制台),
  org.apache.log4j.FileAppender(文件),
  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3).配置日志信息的格式(布局),其语法为: 
  log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  log4j.appender.appenderName.layout.option1 = value1
  …
  log4j.appender.appenderName.layout.option = valueN

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

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  %r 输出自应用启动到输出该log信息耗费的毫秒数
  %c 输出所属的类目,通常就是所在类的全名
  %t 输出产生该日志事件的线程名
  %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

3.代码:

<span style="font-size:18px;">public class Log4jTest {
	//第一步:日志记录
	private static Logger log = Logger.getLogger(Log4jTest.class);  
	
	public static void main(String[] args) throws Exception {	


![img](https://img-blog.csdnimg.cn/img_convert/aa55d29f947f48d8a4f6bc244d9fd7da.png)
![img](https://img-blog.csdnimg.cn/img_convert/31b6afbecac5263917ec6142307881e3.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用Log4j或Logback等日志框架来记录日志,并且这些日志框架都支持将日志存储到数据库中。下面以Log4j2为例,介绍如何将日志记录数据库。 1. 添加依赖 在项目中添加Log4j2的依赖,以及将日志记录数据库所需的数据库驱动依赖。例如: ```xml <!-- log4j2依赖 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.14.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version> </dependency> <!-- 将日志存储到数据库所需的数据库驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> ``` 2. 配置Log4j2 在项目中添加log4j2.xml配置文件,并进行相应的配置,例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <!-- 将日志存储到数据库中的Appender --> <Jdbc name="databaseAppender" tableName="log_table"> <ConnectionFactory class="com.mysql.cj.jdbc.MysqlDataSource"> <param name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false"/> <param name="user" value="root"/> <param name="password" value="123456"/> </ConnectionFactory> <Column name="eventDate" isEventTimestamp="true"/> <Column name="level" pattern="%level"/> <Column name="logger" pattern="%logger"/> <Column name="message" pattern="%message"/> </Jdbc> <!-- 控制台输出日志的Appender --> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="console"/> <AppenderRef ref="databaseAppender"/> </Root> </Loggers> </Configuration> ``` 上述配置中,使用Jdbc Appender将日志记录数据库中,需要指定数据库连接信息、名以及需要记录字段等。 3. 使用日志框架记录日志Java代码中,使用log4j2记录日志,例如: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class LogTest { private static final Logger logger = LogManager.getLogger(LogTest.class); public static void main(String[] args) { logger.info("Hello, world!"); } } ``` 上述代码中,使用LogManager获取Logger对象,并使用Logger对象记录日志日志信息会同输出到控制台和数据库中。 以上就是将日志记录数据库的简单实现方法,当然具体实现还需根据实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值