当前位置: 首页 > news >正文

主流日志框架Logback与Log4j2

一、Logback

1、介绍

Logback是由log4j创始人设计的又一个开源日志组件。

Logback当前分成三个模块:logback-core,logback- classic和logback-access

logback-core是其它两个模块的基础模块,类似与springframework

logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API。使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。

logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

2、Logback中的组件

Logger:日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别

Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等

Layout:负责把事件转换成字符串,格式化的日志信息的输出。在Logback中Layout对象被封装在encoder中。也就是说我们未来使用的encoder其实就是Layout

3、基础日志输出格式
%-10level 级别:案例为设置10个字符,左对齐
%d{yyyy-MM-dd HH:mm:ss.SSS}:日期
%c:当前类全限定名
%M:当前执行日志的方法
%L:行号
%thread:线程名称
%m或者%msg:信息
%n:换行
4、基础配置文件格式
<?xml version="1.0" encoding="UTF-8"?><!--scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。--><configuration scan="true" scanPeriod="60 seconds"><!--定义变量 ,可被插入到logger上下文中,此处定义日志文件的存储地址--><property name="log.base.run" value="../logs/sshblog"/><!--JMX管理,logback支持使用JMX随时重载logback.xml或者单独设置某个package的levelscan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。--><jmxConfigurator/><!--输出到控制台--><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><!--日志格式化--><encoder><pattern>[sshblog]|%-20(%date|[%thread])|%-1level|%logger{80}| %msg%n</pattern></encoder><!--字符串System.out(默认)或者System.err--><target>System.out</target></appender><!--滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件--><appender name="logfileRun" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- <Encoding>UTF-8</Encoding> --><!--被写入的文件名--><File>${log.base.run}.log</File><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">    <!--当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类,此处class为最常用的,其他的自己去看--><FileNamePattern>${log.base.run}_%d{yyyyMMdd}-%i.log.zip</FileNamePattern>    <!--必要节点,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变--><MaxHistory>15</MaxHistory><!--可选节点,可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。--><TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!--查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动--><MaxFileSize>50MB</MaxFileSize></TimeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>[sshblog]|%-20(%date|[%thread])|%-1level| %msg [%file:%line]%n</pattern></encoder></appender><logger name="com.test" level="trace" additivity="true"><!--用来设置某一个包或具体的某一个类的日志打印级别、以及指定appender。loger仅有一个name属性,一个可选的level和一个可选的addtivity属性。name: 用来指定受此loger约束的某一个包或者具体的某一个类。level: 用来设置打印级别,大小写无关。addtivity: 是否向上级loger传递打印信息。默认是true。经测试,如果此处配置为true,且同一个appender同时添加在此和root,则会打印两次,如果根元素没有配置,则无论配置为true还是false,都只打印一次--><appender-ref ref="stdout"/> <!--可以包含零个或多个appender-ref元素,标识这个appender将会添加到这个logger--></logger><logger name="com.xrom.ssh" level="error" additivity="true"><appender-ref ref="stdout"/></logger><root level="trace"><!--它也是loger元素,但是它是根loger,是所有loger的上级。只有一个level属性,因为name已经被命名为"root",且已经是最上级了。level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。--><appender-ref ref="logfileRun"/><!--<appender-ref ref="stdout" />--></root></configuration>

二、Log4j2

1、介绍

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。

被誉为是目前最优秀的Java日志框架

2、特征

性能提升

Log4j2包含基于LMAX Disruptor库的下一代异步记录器

在多线程场景中,异步记录器的吞吐量比Log4j 1.x和Logback高18倍,延迟低

自动重新加载配置

与Logback一样,Log4j2可以在修改时自动重新加载其配置

与Logback不同,它会在重新配置发生时不会丢失日志事件

高级过滤

与Logback一样,Log4j2支持基于Log事件中的上下文数据,标记,正则表达式和其他组件进行过滤

过滤器还可以与记录器关联。与Logback不同,Log4j2可以在任何这些情况下使用通用的Filter类

无垃圾机制

在稳态日志记录期间,Log4j2 在独立应用程序中是无垃圾的

在Web应用程序中是低垃圾。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Spring]Spring MVC 请求和响应及用到的注解
  • Call OpenAI API with Python requests is missing a model parameter
  • Stable Diffusion 使用详解(11)--- 场景ICON制作
  • (十六)、把镜像推送到私有化 Docker 仓库
  • 2024华为杯研赛E题保姆级教程思路分析
  • 打造民国风格炫酷个人网页:用HTML和CSS3传递民国风韵
  • 如何在Windows上安装Docker
  • 业务资源管理模式语言17
  • 如何通过蜂巢(容器安全)管理内部部署数据安全产品与云数据安全产品?
  • 浅谈计算机视觉新手的学习路径
  • AIoT智能工控板
  • Linux常用指令
  • [SDX35]SDX35硬件使用512MB内存,实际只初始化256MB问题分析及解决方案
  • 【STM32】esp8266连接wifi
  • 进阶SpringBoot之异步任务、邮件任务和定时执行任务
  • 【翻译】babel对TC39装饰器草案的实现
  • ➹使用webpack配置多页面应用(MPA)
  • 2017年终总结、随想
  • ES6核心特性
  • Gradle 5.0 正式版发布
  • java8-模拟hadoop
  • Less 日常用法
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • spark本地环境的搭建到运行第一个spark程序
  • vue--为什么data属性必须是一个函数
  • vue中实现单选
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从0实现一个tiny react(三)生命周期
  • 番外篇1:在Windows环境下安装JDK
  • 分享一份非常强势的Android面试题
  • - 概述 - 《设计模式(极简c++版)》
  • 精彩代码 vue.js
  • 利用DataURL技术在网页上显示图片
  • 免费小说阅读小程序
  • 前端_面试
  • 世界上最简单的无等待算法(getAndIncrement)
  • 数组大概知多少
  • 微信小程序填坑清单
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 协程
  • 智能网联汽车信息安全
  • Nginx实现动静分离
  • scrapy中间件源码分析及常用中间件大全
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (02)Unity使用在线AI大模型(调用Python)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)空速传感器
  • (31)对象的克隆
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (七)c52学习之旅-中断
  • (十三)Maven插件解析运行机制