日志框架简单比较(slf4j、j.u.l、log4j、logback、log4j2 )
slf4j:slf4j 是所有日志框架的规范、标准和接口。它不是特定于框架的实现,因为该接口不能单独使用,必须与特定的日志记录框架实现结合使用。 log4j、logback、log4j2 等)。 j.u.l:j.u.l 是java.util.logging 包的缩写,是JDK 1.4 版中引入的Java 原生日志框架。 log4j:log4j是Apache实现的开源日志组件。 Logback:Logback也是由log4j的创建者设计的,具有更好的功能,并且被用作log4j的原生实现。 log4j2:Log4j2 是log4j 1.x 和logback 的改进版本,它采用了多种新技术(例如无锁异步),使日志吞吐量和性能比log4j 1.x 提高了10 倍。解决了一些死锁,使配置更简单、更灵活。为什么我们需要一个日志接口呢?不是可以直接使用具体的实现吗?接口是用来定制规范的,可以有多种实现。使用时,它是面向接口的(所有导入的包都是slf4j包,而不是特定日志框架的包)。也就是说,直接与界面交互以:因为我们不直接使用该实现,所以我们可以任意更改它,而无需更改代码中任何与日志记录相关的代码。对于Java 工程师来说,使用日志记录工具的最佳实践是使用log4j2 + slf4j 等组合来记录应用程序。这样做的最大好处是,在开发业务层时,无需了解底层日志框架的实现或细节,编码时也无需考虑未来的框架更换成本。这也是日志记录接口(外观模式)提供的一个好处。
日志级别
Log4j2 有六个日志记录级别。
跟踪:跟踪是最低级别的日志记录,对应于跟踪程序的执行情况。 调试:通常在开发中,调试被设置为最低的日志记录级别。 info:信息打印重要信息。多个警告:使用警告。在某些情况下,程序不会报告错误,但必须将错误传达给程序员。这也是开发过程中常用的。当这种情况发生时,程序本质上就变成了致命错误。如果将日志级别设置为某个级别,则不会记录低于该级别的日志信息,只会记录高于设置级别的信息。
Spring Boot集成log4j2
1.pom.xml
Spring Boot默认使用LogBack,但我没有看到显示依赖关系的jar包。这其实是因为jar包spring-boot-starter-logging是spring-boot-starter-web或者spring-的依赖的一部分。启动启动器。
如果你想在这里使用Log4j2,你需要从spring-boot-starter-web中删除spring-boot-starter-logging依赖,并像这样显示声明使用Log4j2的依赖jar包。
依赖groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactIdExclusions!–删除默认配置–exclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-logging/artifactId/exclusion/exclusions/dependency! –log4j2 引入依赖–dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-log4j2/artifactId /dependency2.log4j2.xml
在application.properties 中指定log4j2.xml 的位置。您还可以设置打印日志信息。
log4j2.xml 简单示例?xml 版本=’1.0′ 编码=’UTF-8’?配置Appenders 控制台名称=’CONSOLE’ target=’SYSTEM_OUT’ PatternLayout charset=’UTF-8′ pattern='[%-5p] % d %c – %m%n’ //控制台File name=’File’ fileName=’logs/file.log’ PatternLayout pattern=’%m%n’ //File /Appenders Loggers root level=’info’ AppenderRef ref=’CONSOLE’/AppenderRef ref=’File’//root /Loggers/configuration3. 打印日志。
如果只使用log4j2,通常会使用LogManager来获取Logger对象,但如果使用slf4j,则会使用LoggerFactory来获取它。
private Final static org.slf4j.Logger logger=LoggerFactory.getLogger(Log4j2Controller.class); logger.trace(‘跟踪级别’);logger.debug(‘调试级别’);logger.info(‘信息级别’);warn(‘warn level’);logger.error(‘error level’);使用lombok插件时(网上查看详细安装说明),首先需要使用@Slf4j注解(lombok提供的输出日志使用下面的方法。
log.trace(‘跟踪级别’);log.debug(‘调试级别’);log.info(‘信息级别’);log.warn(‘警告级别’);log.error(‘错误级别’);
log4j2配置文件详解
log4j2.xml 文件大致包含:
1. 配置
Configuration是根节点,有status、monitorInterval等多个属性。
状态值包括trace、debug、info、warn、error和fatal。这些用于控制log4j2 日志框架本身的日志级别。如果状态设置为较低级别(例如跟踪),则:看到很多关于log4j2本身的日志,包括加载log4j2配置文件的路径等信息。一般情况下不需要设置此项。 MonitorInterval 表示重新读取配置文件的秒数,允许在不重新启动应用程序的情况下更改配置。 name:配置名称strict:是否使用严格的XML格式。我们建议使用并标准化开发人员配置描述。 2. 特点
Properties:配置文件中的全局参数变量。用于减少自定义配置信息的重复编码。该设置是可选的,例如定义日志存储位置D:/logs。
3. 追加器
Appender 是用于定义日志输出的输出源,log4j2 支持多种输出源,包括Console、File、RollingRandomAccessFile、MongoDB、Flume 等。
Console:开发时配置控制台输出源,方便调试。文件输出源用于将日志写入指定文件(例如:D:/)。 logs/mylog.log) RollingRandomAccessFile: 此输出源还会写入文件。不同的是,您可以指定当文件达到一定大小(例如20MB)时启动另一个文件。如果继续写入日志,将无法继续写入文件,因此该文件必须具有新的文件命名约定。如果大小太大,打开日志时会冻结。 fileName:指定当前日志文件的位置和文件名。
filePattern:指定滚动发生时文件传输和重命名的规则。
SizeBasedTriggeringPolicy:指定当文件大小大于size指定的值时触发滚动。
DefaultRolloverStrategy:指定要保存的最大文件数。
TimeBasedTriggeringPolicy:该配置必须与filePattern结合使用。如果filePattern中配置的文件重命名规则为${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,TimeBasedTriggeringPolicy中指定的时间间隔为1,则最小时间粒度为mm,即分钟。与结合,表示每分钟生成一个新文件。如果改为%d{yyyy-MM-dd HH},则最小粒度为小时,每小时生成一个文件。
RollingFile:与上面类似,但与RollingRandomAccessFile不同的是,RollingRandomAccessFile默认的日志文件写入策略是异步flush,首先将日志信息写入缓冲区,然后在缓冲区满时将缓冲区写入磁盘。默认缓冲区大小为8 到256kb。具体尺寸需要您自己设置。 NoSql:输出到MongoDb、MongoDb数据库Flume:输出到Apache Flume(Flume是来自Cloudera的一个高可用、高可靠、分布式、大规模的日志采集、聚合和传输系统。Flume支持日志系统的定制化)在收集数据时(使用不同的数据发送器),Flume提供了简单处理数据并将数据写入不同数据接收器(可定制)的能力。异步。输出源是异步的。配置RollingRandomAccessFile)PatternLayout:对于控制台或文件输出源(Console、File、RollingRandomAccessFile),一个PatternLayout用于指定输出文件的格式(日志时间、文件、方法、行数等),必须包含一个节点。等),例如pattern=’%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} – %msg%n’ ,各个标记的详细含义如下:
%d 输出时间%d{HH:mm:ss.SSS} 表示输出时间,以毫秒为单位%t 输出当前线程名称%p 输出日志级别%-5p -5 表示固定输出5 个字符,左对齐To do。如果不够,则添加0%。 right c 日志消息的类名%m 消息内容%n 换行符%F 输出所在的类文件名(例如Log4j2Test.java) %L 输出的行号%M 输出所在的方法的名称Placed % l 输出语句%logger 打印记录器名称。如果没有名字,则不会输出。
Logger分为根Logger和自定义Logger,如果无法根据日志名称检索到指定的Logger,则在定制时必须指定每个Logger的名称。可用的包名称将作为日志的名称,不同的包会配置不同级别等)、日志级别、附加性(是否继承下面配置的loggers)、通用loggers(console、File、RollingRandomAccessFile)配置一个或多个输出源AppenderRef。
每个记录器都可以指定一个级别(TRACE、DEBUG、INFO、WARN、ERROR、ALL 或OFF)。如果未指定,则级别默认为ERROR。
additivity指定是否同时向父类的appender输出日志。默认为true。
详细配置示例
?xml 版本=’1.0′ 编码=’UTF-8’?配置MonitorInterval=’30’ 附加程序控制台名称=’控制台’ 目标=’SYSTEM_OUT’ PatternLayout 模式='[%d{HH:mm:ss:SSS}] [%p ] – %l – %m%n’ //console !–文件输出所有信息。该日志由append属性决定,每次程序运行时都会自动清除。适合临时测试– filename=’log’ fileName=’logs/test.log’append=’false’ PatternLayout pattern=’%d{HH:mm:ss.SSS} %-5level %class{36} % L %M – % msg%xEx%n ‘//File !– 打印以下所有信息,每年每月创建一个大小日志,每当大小超过大小时,它会自动保存到文件夹并压缩如下。存档– RollingFile name=’RollingFileInfo’ fileName=’logs/info.log’ filePattern=’logs/${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log’ 过滤器!- – 控制台只会输出级别以上的信息(onMatch),其他的都会直接拒绝(onMismatch) – ThresholdFilter level=’INFO’ onMatch=’ACCEPT’ onMismatch=’DENY’/ThresholdFilter level=’WARN ‘ onMatch=’ DENY’ onMismatch=’NEUTRAL’//Filters PatternLayoutpattern='[%d{HH:mm:ss:SSS}][%p] – %l – %m%n’/策略TimeBasedTriggeringPolicy/SizeBasedTriggeringPolicy size=’100 MB’ //策略/RollingFile RollingFile name=’RollingFileWarn’ fileName=’logs/warn.log’ filePattern=’logs/${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log’ 过滤器ThresholdFilter level=’WARN ‘ onMatch=’ACCEPT’ onMismatch=’DENY’/ThresholdFilter level=’ERROR’ onMatch=’DENY’ onMismatch=’NEUTRAL’ //Filters PatternLayout pattern='[%d{HH:mm:ss:SSS}] [%p] – %l – %m%n’/Policies TimeBasedTriggeringPolicy/SizeBasedTriggeringPolicy size=’100 MB’ //Policies !–如果不设置DefaultRolloverStrategy属性,则默认同一文件夹下最多7个文件,这里设置20 — DefaultRolloverStrategy max=’20’ //RollingFile RollingFile name=’RollingFileError’ fileName=’logs/error.log’ filePattern=’logs/${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i .log ‘ ThresholdFilter level=’ERROR’/PatternLayout 模式='[%d{HH:mm:ss:SSS}] [%p] – %l – %m%n’/策略TimeBasedTriggeringPolicy/SizeBasedTriggeringPolicy size=’100 MB’//Piesolic /RollingFile /appenders !- – 接下来,定义记录器。只有定义了logger并引入了appender后才启用appender –loggers!–从Spring和Hibernate中排除一些无用的调试信息–logger name=’org.springframework’ level=’INFO’ /logger logger name=’ org.mybatis’ level=’INFO’ /logger root level=’all’appender-ref ref=’Console’/appender-ref ref=’RollingFileInfo’/appender-ref ref=’RollingFileWarn’/appender-ref ref=’ RollingFileError’//root /loggers/configuration 如果您觉得还可以,请点赞,谢谢,您的支持是我最大的动力
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/83807.html