怎样在自己的 Web 中加入强大的日志系统系统?slf4j 的日志插件必须要知道!
对于程序猿来讲,一个应用程序的日志管理是极为重要的。因为,它可以帮助我们随时查看应用程序的运行状态、执行效果等信息,从而监控软件系统、或是根据日志信息解决一些重要的问题。
但是在 Java 应用程序中又有着众多的日志框架或是工具组件,比如 Java 的 Jdk 自身提供的 logging、Apache 提供的 log4j、还有 logback 等日志框架。今天所提到的 slf4j,它并不是一个具体的日志解决方案,它的存在只是为了服务于各式各样的日志系统,用户可以根据自己的需求选择日志系统比如 log4j。slf4j 相当于是对不同的日志系统提供的接口,它独立于我们所经常使用的日志系统比如 logback、log4j 等等。大家试想,如果在开发过程中出现了好几个日志类库,那么我们必须要对这些单独的日志系统进行配置、并且各个日志系统维护起来也是相当的麻烦。
经过 slf4j 的接口封装以后的日志系统调用也变得更加的简洁、并且使打印日志的方法也变得更加的高效。特别是提供的模板方法进行日志打印,减少了不停的创建字符串的消耗,在生产环境中日志对系统性能的影响往往是非常重要的,必须引起重视。现在,一般的微服务架构中都会采用 ELK 的架构模式,简单来讲就是将每个微服务模块的日志、接口调用信息都发送到另外一台服务器上使用 Web 日志系统进行查看,如果有需要了解 ELK 日志系统的可以留言后期文章进行说明。
logger.debug("result is name: {} and age : {} ", name, age);
接下来,说明一下如何结合 log4j、slf4j 的日志组件进行应用在我们的框架应用程序中,先理论、后实践,话不多说,我们先来看一下 Maven 的 pom 配置文件中配置这两个日志组件的依赖。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
其中 slf4j-api 是对外提供独立的日志接口,而 slf4j-log4j12 则是 slf4j 对于 log4j12 的支持,需要注意的是这两个组件的版本要保持一致以免产生不必要的麻烦。完成了依赖组件的引入,说一下日志系统的配置。在 项目中的 resource 文件夹下面新建 log4j.properties 文件进行接下来的配置。
### 设置rootLogger,一般在开发环境中使用 debug 级别日志
log4j.rootLogger = info,stdout,D,E
## 控制台输出
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
### 默认是system.out
log4j.appender.stdout.Target = System.out
### 布局格式,可以灵活指定
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
### 消息格式化
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{
yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
## 以每天一个文件输出日志
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
## 输出文件目录
log4j.appender.D.File = /usr/log/info.log
## 消息增加到指定的文件中,false表示覆盖指定文件内容
log4j.appender.D.Append = true
## 输出信息最低级别
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{
yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
如果是 SpringBoot 还可以使用 yml 的形式来进行配置,结构、条理都会更加的清晰。最后,简单来说明一下使用 slf4j 的形式在应用程序中进行日志打印操作。
// 使用 slf4j 的 Logger 对象获取类名为 Main 的日志对象,一般 Main 指的是当前类的名称
private static Logger logger = Logger.getLogger(Main.class);
public static void main(String[] args) {
String str = "测试字符串";
logger.info("str:{}", str);
}
这里展示了 logger.info() 方法的使用,还有 debug()、error() 方法等,并且每个方法都可以使用不同数量的参数可以满足比较多的需求。
更多精彩前往微信公众号【老王说编程】>>>
怎样在自己的 Web 中加入强大的日志系统系统?slf4j 的日志插件必须要知道!的更多相关文章
- java web 中 读取windows图标并显示
java web中读取windows对应文件名的 系统图标 ....显示 1.获取系统图标工具类 package utils; import java.awt.Graphics; import j ...
- Java Web 中使用ffmpeg实现视频转码、视频截图
Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html ...
- Web中的安全性问题
根据2010年OWASP发布的Web应用程序安全风险主要是SQL注入攻击.跨网站脚本.伪造客户端请求.Cookie盗取,传输层保护不足. 1 SQL注入攻击 随着B/S框架结构在系统开发中的广泛应用 ...
- Redis(十四)Redis 在Java Web 中的应用
在传统的 Java Web 项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面. 由于数据库持久化数据主要是面向磁盘,而磁盘的读/写比较慢,在一般管理系统中,由于不存在高 ...
- 优化Web中的性能
优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争. 优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的 ...
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如 ...
- 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)
今天,在.net4.5,mvc4下新建了个区域,运行起来就报这个错误: 命名空间"System.Web"中不存在类型或命名空间名称"Optimization"( ...
- 在web中使用windows控件,实现摄像头功能
最近做的一个Web版的视频会议项目,需要在网页中播放来自远程摄像头采集的实时视频,我们已经有了播放远程实时视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,A ...
- 在Web中使用Windows控件
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 将Net控件转化为ActiveX控件 1GUID 2实现IObjectSafety接口 3程序集设定 制作安装程序 Web集 ...
随机推荐
- Django基础005-Django开发的整体过程
1.写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:id ...
- subList方法拆分集合问题
subList方法拆分集合问题 分享一个有意思的错误,先看代码 public static void main(String[] args) throws IllegalAccessException ...
- python正则表达式应用
import re ab='''ms: [["", "\u7acb\u5373\u4e0b\u8f7d"], ["", "\u52 ...
- jieba分词处理
分词是一种数学上的应用,他可以直接根据词语之间的数学关系进行文字或者单词的抽象,比如,讲一句话"我来自地球上中国"进行单词分割,我们可能会得到如下的内容:"我" ...
- C语言变量为何先定义后使用
C语言中,对变量的使用,首先要先定义.说明其数据类型.原因可能如下: 1不同类型的变量,其编码表示方式可能不同. 2不同类型的变量,其占有的空间大小不同.不事先说明无法在内存中开辟空间.
- MySQL 8.x 新版本特性赶紧学!!Linux 服务器上安装 MySQL 8.x
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 引言 ...
- iOS 15 Beta升级卡死在更新进程,无法启动怎么办?
2021苹果全球开发者大会结束后,大批果粉迫不及待的尝试升级iOS 15测试版本,想第一时间体验新功能. 但是许多用户反馈升级一直卡死在"准备更新"."验证更新" ...
- 开发工具IDE从入门到爱不释手(六)常用插件Git
Git 环境准备 本地基本操作 本地文件关联git管理 文件提交git Ctrl+K:提交 关联远程仓库 先注册github账号 连接本地 git菜单 撤销提交 追加提交 Code Review
- Mac终端美化(iterm2+zsh+oh-my-zsh+powerlevel10k)
iterm2+zsh+oh-my-zsh+powerlevel10k 一.下载iterm2 方式一:官网下载 https://iterm2.com/ 方式二:百度云下载 链接: https://pan ...
- 第二篇 -- Django写一个接口并用Jmeter进行测试
第一节学习了Jmeter的下载和安装,那么第二节就来看看具体怎么使用. 本篇介绍的是使用Jmeter进行http接口测试,那么接口程序使用Django开发的一个小接口. 一.Django编写接口 这一 ...