slf4j+log4j在Java中实现日志记录
小Alan今天来跟大家聊聊开发中既简单又常用但必不可少的一样东西,那是什么呢?那就是日志记录,日志输出,日志保存。
后面就统一用日志记录四个字来形容啦。
日志记录是项目的开发中必不可少的一个环节,特别是对于后台服务节点程序来说,有了日志的输出便可以清晰的看到整个程序的运行过程,那么项目成功运行还好,我们就当是清晰的看看程序的运行过程好了,那万一项目要是出Bug了呢?如果这个时候没有上面所说的日志记录,日志输出,日志保存的话,那后果简直不堪设想,为啥?因为就算你的程序抛出了异常却并不意味着程序就一定要停下来等你去解决这个问题,然后它才会执行,大多数后台节点程序都不会因为一些异常而停止它的执行,而是会继续保持执行以便在出现某些问题的时候,不会因为当前出现的一些问题而影响到其它功能的执行,以便继续为用户提供其它正确的服务。那么这个时候就有一定的问题了,程序继续在执行,而又没有通过一些方式保存日志的话,对于jvm输出的信息来说,它是会不断的往下滚动的,而且长度也不是无限的,那么很有可能你会丢失错误信息导致你很难去解决程序中存在的问题,但是有了日志记录那就好办了,在出现问题的时候你随时可以去查看相关的日志,再把日志分类,error的日志专门存放在某个位置的话,那么我想这个时候你还是相对比较愉快一点的。
那么在Java中如何实现日志记录呢?小Alan个人比较喜欢使用slf4j+log4j,也强烈推荐使用这个组合,而不是单纯的用log4j,为啥嘞?因为日志库可不单单只有log4j,比如还有java.util.logging、logback等。那假如咱的项目中已经使用了java.util.logging,而这时候领导说把它换成log4j呢?如果这时你的项目使用的是log4j的Java代码,而不是slf4j的Java代码,那么恭喜你,有可能这java.util.logging和log4j的编码风格是不一样的,那么怎么办?你一个类一个类的去把日志记录的代码找出来,然后一个一个的去改呗,指不定漏了两个,那说不定很精彩。但是如果是slf4j的Java代码实现的日志记录的话,那结果就完全不一样了,轻轻松松搞定你上级的奇葩要求。slf4j跟其它日志库不一样,来看看百度百科的这段说明:
slf4j并不是一个日志库实现,而只是日志库实现的门面,它通过外观模式允许你在后台使用任意一个日志类库。管你穿的是啥内裤,反正哥的外观不变,毕竟内裤外穿的人还是少嘛,只换条内裤是不会影响你的外观的!接下来我们来看怎么实现slf4j+log4j,后面再稍微聊聊换内裤的话题。
友情提示:这里以maven项目为例,不明白maven的同学,可以在小Alan的博客中看看maven的随笔理解理解maven。
第一步:在maven的pom结构中引入相关的jar包:这里包含slf4j、log4j、可别漏了slf4j-log4j
slf4j下载地址:http://www.slf4j.org/download.html
第二步:在源代码目录下创建log4j.properties文件,maven项目的源代码目录为src/main/java
我们来看看log4j.properties文件的内容,大家可以根据注释去理解:
%x啥的大家就自己去网上找找其它对应的资料,解释起来又是一大篇幅,这里就省了。
最后一步:编写slf4j的Java实现代码
这里大家可以自己写个main方法去测试,小Alan就直接在正在开发的项目截个图了,这样也避免大家偷懒,自己动手去试试效果。
slf4j的另一种实现也是可行的那就是使用占位符的方式,代码如下:
结果示范①
结果示范②
结果示范③
这样就完美的实现了slf4j+log4j的日志记录,那么我们怎么把log4j替换成其他的日志库呢?很简单,我们打开下载的slf4j文件看看:
它下面包含了很多其他日志库的支持jar文件,我们只需要把maven的依赖改成所需要的日志库,再换一个日志库对应的支持jar文件就可以了,换成对应日志库的配置文件,这样你就不至于一个类一个类的去改代码了,因为内裤换了,但是slf4j的外观是不需要任何的改变的。
可爱博主:AlanLee
博客地址:http://www.cnblogs.com/AlanLee
本文出自博客园,欢迎大家加入博客园。
slf4j+log4j在Java中实现日志记录的更多相关文章
- java中开源日志记录工具log4j
日志:除了能记录异常信息,还可以记录程序正常运行时的关键信息. 使用log4j来进行日志文件记录经典步骤: 001.在项目中创建一个lib文件夹,然后将下载好的jar包copy到该文件夹下 002.对 ...
- Java中的日志——Java.util.logging、log4j、commons-logging
Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-loggin ...
- Java学习-007-Log4J 日志记录配置文件详解及实例源代码
此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:20 ...
- java中的日志打印
java中的日志打印: 日志工具类: #获取日志 INFO:表示获取日志的等级 A1:表示日志存器,可以自定义名称 #===DEBUG INFO log4j.rootLogger=DEBUG,A1,A ...
- JAVA 中LinkedHashMap要点记录
JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...
- (14)ASP.NET Core 中的日志记录
1.前言 ASP.NET Core支持适用于各种内置和第三方日志记录提供应用程序的日志记录API.本文介绍了如何将日志记录API与内置提供应用程序一起使用. 2.添加日志提供程序 日志记录提供应用程序 ...
- java中的日志组件-log4j
1.为什么使用日志组件 Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT的事件记录器:还可以控制每一 ...
- 在云环境上使用SLF4J对Java程序进行日志记录
我开发了一个Java应用,部署到云环境上之后,用postman测试发现不能按照我期望的工作,但是返回的消息对我没有任何帮助. 因为部署在云端的应用很难像本地Java应用一样调试,所以我打算用SLF4J ...
- Java中的日志管理
日志是应用程序运行中不可缺少的一部分,JAVA中有很多已经成熟的方案,尽管记录日志是应用开发中并不可少的功能,在 JDK 的最初版本中并不包含日志记录相关的 API 和实现.相关的 API(java. ...
随机推荐
- 基于Vue全家桶制作的的高仿美团APP
鸣谢:该项目核心部分参考了慕课网精英讲师ustbhuangyi的课程,其余部分高仿美团APP构建. 前端菜鸟项目,大佬们轻喷~ 美团外卖APP
- macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移
安装UnixODBC & PSQLODBC driver for UnixODBC $ brew install psqlodbc Updating Homebrew... ==> In ...
- 利用MySQL触发器实现check和assertion
MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...
- Mybatis源码解析-BoundSql
mybatis作为持久层,其操作数据库离不开sql语句.而BoundSql则是其保存Sql语句的对象 前提 针对mybatis的配置文件的节点解析,比如where/if/trim的节点解析可见文章Sp ...
- Python杨辉三角形
RT Show me the Code def triangles(): b = [1] while(True): yield b b = [1] + [b[i] + b[i+1] for i in ...
- FileInputStream 小Demo
要求:设计如下界面 文本框里面可以输入的路径和文件名 单机按钮可以读取在 指定的文件 并把文件内容显示到一个文本域里面来 代码: /** * */ package com.niit.homewo ...
- 201521123049 《JAVA程序设计》 第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 public ...
- [转载]Eclipse自定义快捷键导出和导入方法
背景: 以前做C/C++开发,习惯了Visual Studio这个强大的IDE,转到安卓开发后,用到蛋疼的Eclipse,实在不习惯,而且以前总觉得VS不流畅,现在才知道VS很好,才知道什么是真正的& ...
- Java多态总结
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 1.定义: 多态:指允许不同类的对象对同一消息做出响应.即同一消息可 ...
- 201521123009 《Java程序设计》第10周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 Q1:finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? tr ...