一、log4j2的使用
Apache Log4j 2 是Log4j 的升级版本,参考了logback 的一些不错的设计,修复了一些问题,并带来了一些较大的改进,主要是:
l 异常处理在logback中,Appender异常对应用程序是不可见的,但是log4j2提供了几种异常处理机制。
l 性能提升当比较log4j和logback时,log4j2明显具有性能提升。官方测试数据稍后公布。
l 自动重载配置参考logback设计。当然,最实用的是能够在生产中动态更改日志记录级别,而无需重新启动应用程序。
l 无垃圾机制大多数情况下,log4j2使用设计的无垃圾机制来避免频繁的日志收集导致的jvm gc。
官网:https://logging.apache.org/log4j/2.x/
1. Log4j2入门
当今市场上最主流的日志门面是SLF4J,但Log4j2也是一个日志门面,因为它的日志记录实现非常强大并且性能良好。因此,说到日志实现,Log4j2是常见的,Slf4j + Log4j2应该成为未来的共同趋势。
添加依赖
!– Log4j2 Facade API–依赖项groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-api/artifactId version2.11.1/version/dependency!– Log4j2 日志实现–依赖项groupIdorg.apache.logging.log4j/groupId artifactIdlog4j- core/artifactId version2.11.1/version/dependency 代码
导入org.apache.logging.log4j.LogManager;导入org.apache.logging.log4j.Logger;导入org.junit.Test;公共类Demo1 { 私有静态最终记录器LOGGER=LogManager.getLogger(Demo1.class); test1(){ LOGGER.fatal(‘fatal’); //默认错误级别LOGGER.info(‘info’); (‘debug’); 输出:
2. 使用slf4j作为日志的门面,使用log4j2作为日志的实现
添加依赖
!– Log4j2 Facade API–依赖项groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-api/artifactId version2.11.1/version/dependency!– Log4j2 日志实现–依赖项groupIdorg.apache.logging.log4j/groupId artifactIdlog4j- core/artifactId version2.11.1/version/dependency!–使用slf4j作为日志门面,使用log4j2进行日志记录–依赖groupIdorg.slf4j/groupId artifactIdslf4j-api/artifactId version1.7.25 /version/dependency!–为slf4j绑定日志实现log4j2 –dependency groupIdorg.apache.logging.log4j/groupId artifactIdlog4j-slf4j-impl/artifactId version2.10.0/version/dependency 配置文件的适配器:
?xml version=’1.0’coding=’UTF-8′?– status=’warn’ 日志框架本身的输出日志级别monitorInterval=’5′ 自动加载配置文件的时间间隔(5或更多)秒–配置状态=’调试’ 监控间隔=’5′ !– 配置集中管理属性通过${name}引用– 属性!– 日志输出位置– 属性名称=’log_home’d://logs/property ! –输出格式–属性名称=’pattern’%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L — %m%n/property /Properties ! –日志处理–Appender !–控制台输出–Console name=’Console’ target=’SYSTEM_ERR’ !–输出格式–PatternLayout pattern=’${pattern}’ //控制台!– 文件输出– 文件名=’File’ fileName=’${log_home}/fileLog.log’ PatternLayout pattern=’${pattern}’ //File !–使用随机读写流日志文件输出appender,提高性能– RandomAccessFile name=’accessFile’ fileName=’${log_home}/accessLog.log’ PatternLayout pattern=’${pattern}’ //RandomAccessFile !–日志文件按照特定规则分割– RollingFile name=’rollingFile’ fileName=’${ log_home}/rollLog.log’ filePattern=’${log_home}/${date:yyyy-MM-dd}/myrolllog-%d{yyyy-MM-dd-HH-mm}- %i.log’ ! filter–ThresholdFilter level=’debug’ onMatch=’ACCEPT’ onMismatch=’DENY’/!–日志消息格式–PatternLayout pattern=’${pattern}’/Policy! –系统启动时,启动分割规则!并创建一个新的日志文件– OnStartupTriggeringPolicy/!– 根据文件大小分割,10MB — SizeBasedTriggeringPolicy size=’1MB’/!– 根据时间节点分割来做。该规则定义如下: to filePattern — TimeBasedTriggeringPolicy //Policies !–同一目录下文件数限制为30个,超出的文件将被覆盖– DefaultRolloverStrategy max=’30’ //RollingFile /Appenders !–Logger定义–Logger root level=’trace’ !– 指定用于日志记录的处理器–AppenderRef ref=’Console’/AppenderRef ref=’rollingFile’ /!– AppenderRef ref=’File’ /– AppenderRef ref=’accessFile’ /– /Root /Loggers/Configuration
3. 异步日志
Log4j2提供了两种方式来实现日志记录。一种方法使用AsyncAppender,另一种方法使用AsyncLogger,分别对应上面描述的Appender和Logger组件。
取决于
!–异步日志依赖–依赖groupIdcom.lmax/groupId artifactIddisruptor/artifactId version3.3.4/version/dependency 配置文件:Appender组件模式
?xml version=’1.0’coding=’UTF-8′?– status=’warn’ 日志框架本身的输出日志级别monitorInterval=’5′ 自动加载配置文件的时间间隔(5或更多)秒–配置状态=’调试’ 监控间隔=’5′ !– 配置集中管理属性通过${name}引用– 属性!– 日志输出位置– 属性名称=’log_home’d://logs/property ! –输出格式–属性名称=’pattern’%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L — %m%n/property /Properties ! –日志处理–Appender !–控制台输出–Console name=’Console’ target=’SYSTEM_ERR’ !–输出格式–PatternLayout pattern=’${pattern}’ //控制台!– 文件输出– File name=’File’ fileName=’${log_home}/fileLog.log’ PatternLayout pattern=’${pattern}’ //File Async name=’async’ AppenderRef ref=’File’ //Async/Appenders !–Logger定义–Loggers Root level=’trace’ !–指定用于日志记录的处理器–AppenderRef ref=’Console’/AppenderRef ref=’async’ //Root /Loggers/Configuration 配置文件:AsyncLogger组件方式
AsyncLogger是log4j2的一大亮点,也是官方推荐的异步方法。这允许对Logger.log 的调用快速返回。有两个选项:全局异步和混合异步。
全局异步是指所有日志都是异步记录的。无需更改配置文件。只需添加log4j2.component.properties 配置即可。
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 混合异步意味着您可以在应用程序中同时使用同步和异步日志记录,从而使您可以更灵活地配置日志记录。
?xml version=’1.0’coding=’UTF-8′?– status=’warn’ 日志框架本身的输出日志级别monitorInterval=’5′ 自动加载配置文件的时间间隔(5或更多)秒–配置状态=’调试’ 监控间隔=’5′ !– 配置集中管理属性通过${name}引用– 属性!– 日志输出位置– 属性名称=’log_home’d://logs/property ! –输出格式–属性名称=’pattern’%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L — %m%n/property /Properties ! –日志处理–Appender !–控制台输出–Console name=’Console’ target=’SYSTEM_ERR’ !–输出格式–PatternLayout pattern=’${pattern}’ //控制台!– 文件输出– File name=’File’ fileName=’${log_home}/fileLog.log’ PatternLayout pattern=’${pattern}’ //File Async name=’async’ AppenderRef ref=’File’ //Async/Appenders !– Logger Definition — Logger !– 自定义异步记录器对象includeLocation=’false’ 关闭记录行号信息additivity=’false’ 不再继承自根记录器对象– AsyncLogger name=’com.hk’ level=’ info’ includeLocation=’false’ additivity=’false’ AppenderRef ref=’File’ //AsyncLogger Root level=’trace’ !–指定用于日志记录的处理器–AppenderRef ref=’Console’ includeLocation=’true’ //Root /Loggers/Configuration 配置如上。 com.hk 日志是异步的,根日志是同步的。
使用异步日志记录时的注意事项:
1. 使用异步日志记录时,AsyncAppender、AsyncLogger 和全局日志记录不应同时可见。性能与AsyncAppender 相同,并且性能最低。
2、设置includeLocation=false会显着降低异步日志输出位置信息时的性能,使其比同步日志慢。
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/83809.html