日志系统的介绍和使用
1、介绍和区别:
Log4j是Apache的一个开放源代码项目,作用有:①将日志信息输送到控制台、文件等;②控制每一条日志的输出格式;③通过定义每一条日志信息的级别,更加细致的控制日志的生成过程;该日志方式可以通过配置文件来灵活配置。
slf4j是简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能。
SLF4J和各个具体的日志系统进行绑定时的框架原理图:
1)综上所述:
slf4j-api提供日志接口,slf4j-log4j提供logj的具体实现。也就是 slf4j只是一个日志标准,并不是日志系统的具体实现,如果项目只有slf4j的包是没有办法实现日志功能的。
2)其结构如下:
slf4j-api(接口层)
|
各日志实现包的连接层( slf4j-jdk14, slf4j-log4j)
|
各日志实现包
3)结合各日志实现包使用时提供的jar包情况为:
- SLF4J和logback结合使用时需要提供的jar:slf4j-api.jar,logback-classic.jar,logback-core.jar
- SLF4J和log4j结合使用时需要提供的jar:slf4j-api.jar,slf4j-log412.jar,log4j.jar
- SLF4J和JDK中java.util.logging结合使用时需要提供的jar:slf4j-api.jar,slf4j-jdk14.jar
- SLF4J和simple(SLF4J本身提供的一个接口的简单实现)结合使用时需要提供的jar:slf4j-api.jar,slf4j-simple.jar
4)自定义日志配置
根据不同的日志系统,可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。
默认的命名规则,并且放在 src/main/resources 下面即可
2、log4j的配置使用
log4j是apache提供的日志管理工具,主要是用来维护、调试程序的日志信息,便于用户跟踪程序执行过程。功能类似于java本身的系统输出,System.out.println()
,使用log4j工具可以更好地管理日志,通过配置文件的配置来决定日志的输出。
log4j有三大组件:日志器(Logger)、日志输出目标(Appender)、格式化器(Layout)
1、Logger:用来输出日志消息的类,它可以输出不同级别的消息,例如错误消息、警告消息等;其中级别有五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL
2、Appender:通常我们希望日志输出到文件中,以及控制台,也可能希望日志输出数据库,该类就表示一个输出的目标;
3、Layout:对输出的消息进行格式化,例如在消息中添加日期,以及级别等。
项目中的log4j.properties配置文件配置如下:
# Output pattern : date [thread] priority category - message FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7
log4j.rootLogger=INFO, Console#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%d %-5p]:%m%n#SQL Logger
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=INFO
log4j.logger.java.sql.Statement=INFO
log4j.logger.java.sql.PreparedStatement=INFO#Project defalult level
log4j.logger.com.cmb=INFO
①第一行配置为根配置,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
把指定级别以上的日志信息输出到指定的一个或者多个位置
上述配置即INFO层级以及以上的信息输出到Console(控制台),配置为info这样只显示INFO, WARN, ERROR的日志信息
②第二行是指定日志输出的类型。
可选参数如下:
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每隔一段时间产生一个日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
③第三行是指定日志输出的格式。
可选参数如下:
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
④第四行是配合第三行设置,对日志输出进行格式化设置。
格式化参数说明如下: - %m 输出代码中指定的消息。
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
- %r 输出自应用启动到输出该log信息耗费的毫秒数。
- %c 输出所属的类目,通常就是所在类的全名。
- %t 输出产生该日志事件的线程名。
- %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”。
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS}。
- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
- %%: 输出一个"%"字符。
- %F: 输出日志消息产生时所在的文件名称。
- %L: 输出代码中的行号。
⑤#SQL Logger部分是使用log4j输出sql的配置
3、logback的配置使用
logback是Java的日志开源组件,是apache创始人编写的,相比log4j而言,性能更好。
1)logback主要有三个模块组成:(通过依赖这三个模块实现的)
- logback-core // 基础模块,其他模块基于此
- logback-classic // 它是log4j的一个改良版本,同时它完整实现了slf4j API,因此可以很方便的更换成其它日志系统,如log4j
- logback-access // 访问模块与Servlet容器集成提供通过Http来访问日志的功能
2)配置的详细介绍
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根节点 配置文件修改时重新加载,默认true -->
<configuration scan="true"><!-- 设置上下文名称,区分不同的日志记录--><contextName>myAppName</contextName><!--设置变量。定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="CATALINA_BASE" value="**/logs"></property><!-- 子节点 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder charset="UTF-8"><!-- 输出日志记录格式 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 第一个文件输出,每天产生一个文件 --><appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 输出文件路径+文件名 --><fileNamePattern>${CATALINA_BASE}/aa.%d{yyyyMMdd}.log</fileNamePattern><!-- 保存30天的日志 --><maxHistory>30</maxHistory></rollingPolicy><encoder charset="UTF-8"><!-- 输出日志记录格式 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 第二个文件输出,每天产生一个文件 --><appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${CATALINA_BASE}/bb.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${CATALINA_BASE}/bb.%d{yyyyMMdd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder charset="UTF-8"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${CATALINA_BASE}/custom.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- daily rollover --><fileNamePattern>${CATALINA_BASE}/custom.%d{yyyy-MM-dd}.log</fileNamePattern><!-- keep 30 days' worth of history --><maxHistory>30</maxHistory></rollingPolicy><encoder charset="UTF-8"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 子节点 设置日志输出级别 --><root level="ERROR"><appender-ref ref="CONSOLE" /></root><logger name="file1" level="DEBUG"><appender-ref ref="FILE1" /></logger><logger name="file1" level="INFO"><appender-ref ref="FILE2" /></logger><!-- 子节点 自定义logger --><logger name="custom" level="INFO"><appender-ref ref="CUSTOM" /></logger>
</configuration>
3)配置xmind说明
参考:logback 常用配置(详解)
日志系统的介绍和使用相关推荐
- mysql8.0源代码解析_源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统
原标题:源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统 作者介绍 张永翔,现任网易云RDS开发,持续关注MySQL及数据库运维领域,擅长MySQL运维,知乎ID:雁南归. MySQL ...
- 卫星系统——酒店后端全链路日志收集工具介绍
背景 随着酒店业务的高速发展,我们为用户.商家提供的服务越来越精细,系统服务化程度.复杂度也逐渐上升.微服务化虽然能够很好地解决问题,但也有副作用,比如,问题定位. 每次问题定位都需要从源头开始找同事 ...
- 日志系统新贵Loki,确实比笨重的ELK轻
来自:CSDN(作者:linkt1234) 原文链接: https://blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公司容器云的日志方 ...
- cx_oracle写日志信息_日志系统的设计
笔者在写作本章节的时候,并不敢把此章节的标题叫做<高性能日志系统的设计>,之所以不敢加上"高性能"三个字的原因是: 第一,我对于日志系统设计知识和经验都来自于学习和工作 ...
- 抛弃ELK!Loki日志系统详解!
背景 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的 ...
- 百亿级日志系统架构设计及优化
作者:杨津萍,大数据架构师,从业十余年,专攻 Web 架构及大数据架构. 来自:51cto技术栈(ID:blog51cto) " 日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台 ...
- PHP框架中的日志系统
引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程序猿才真正动的英文),调试的时候也会很方便,还可以记 ...
- 几十条业务线日志系统如何收集处理?
在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息,甚至包括点击的位置,我们也经常发现自己刚搜完一个东西,再打开网页时每个小广告都会出现与之相关联的商品或信息,在感叹智能的同时不惊想 什 ...
- 大型互联网应用中的日志系统
2019独角兽企业重金招聘Python工程师标准>>> 大型互联网应用的突出特点是应用本身规模大,结构复杂,用户访问量大.设计良好的日志系统,有助于分析流量趋势,帮助管理网络应用:有 ...
最新文章
- 【本质】你知道C语言编译的过程吗?
- 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
- Leetcode 242.有效的字母异位词(哈希表)
- windows tcp端口占满_TCP与UDP分析、三次握手四次断开、DDOS
- 安装PaddleOCR遇到ERROR: Command errored out with exit status 1:command: ‘f:\python3.7\python.exe‘ -u -c
- SQL_SERVER 导oracle(转)
- anaconda 清华镜像及对应下载
- 电脑桌面云便签怎么登录便签账号?
- 计算机网络设备维修会计分录,设备维修记录什么会计科目
- 苹果计算机如何显示错误,科普电脑打开苹果手机视频教程及Apple ID验证失败发生未知错误怎么解决...
- Vue移动端系列 => [06] 文章搜索
- 免费免安装!3s 获取云数据库,MySQL,Mongo、Redis 全都有!
- 心跳机制 heartbeat
- requireJS常用用法
- FlatList ListHeaderComponent 频繁刷新
- 用 Python 通过雅虎财经获取股票数据
- Java Base64加密解密编码解码
- Cloudreve免费开源网盘系统源代码Cloudreve公私兼备网盘系统 多功能仿百度网盘源码+免费分享
- 计算机 名片,计算机版本的名片识别软件
- 矩阵求导(分母布局与分子布局),以及常用的矩阵求导公式