log4j升级为log4j2(不需要改动代码)

news/2024/10/30 18:14:34/

 

 

公司的项目决定升级log4j,因为log4j2有一个自动删除日志的功能,这样可以减轻运维的一些工作,而且在多线程环境下,log4j2的异步日志系统比log4j和logback提高了十倍的性能(吞吐量和延迟率),官方原文如下:

Log4j 2 contains next-generation Asynchronous Loggers based on the LMAX Disruptor library. In multi-threaded scenarios Asynchronous Loggers have 10 times higher throughput and orders of magnitude lower latency than Log4j 1.x and Logback. 

因为是升级,原项目用的是log4j或者self4j打印日志,获取logger的方式不同

比如log4j:

import org.apache.log4j.Logger;

private static final Logger LOGGER = Logger.getLogger(xxxx.class);

比如self4j:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(xxxx.class);

而如果用log4j2的话,API将有所不同:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static final Logger logger = LogManager.getLogger(xxxx.class);

如果在升级的过程中,我们要去改代码的话,那将是一项很大的繁琐工程,log4j2架构已经考虑到这一点,给我们提供了转换的包,我们只需要导入几个转换包就可以使用log4j2,而且还不需要修改代码。

官方原文:

Perhaps the simplest way to convert to using Log4j 2 is to replace the log4j 1.x jar file with Log4j 2's log4j-1.2-api.jar. However, to use this successfully applications must meet the following requirements:

  1. They must not access methods and classes internal to the Log4j 1.x implementation such as Appenders, LoggerRepository or Category's callAppendersmethod.
  2. They must not programmatically configure Log4j.
  3. They must not configure by calling the classes DOMConfigurator or PropertyConfigurator

第一步:我这里是maven项目,就以maven项目为例子,进行讲解了

删掉pom.xml文件中关于log4j的依赖,添加新依赖

		 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.7</version><!-- <scope>provided</scope> --></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-1.2-api</artifactId><version>2.7</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.7</version><!-- <scope>provided</scope> --></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>2.7</version><scope>runtime</scope></dependency>

log4j-1.2-api为log4j和log4j2的连接包。
第二步:删掉以前的log4j.properties,改为log4j2.xml,这里起名字的时候,不要写错了

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info"><Properties><Property name="LOG_HOME">${sys:catalina.base}/var/logs</Property><Property name="APP_LOG_HOME">${LOG_HOME}/uas</Property></Properties><Appenders><Console name="Console" target="SYSTEM_OUT"><!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --><!-- <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> --><!-- 输出日志的格式 --><PatternLayoutpattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /></Console><RollingRandomAccessFile name="uas_appender"immediateFlush="true" fileName="${APP_LOG_HOME}/uas.log"filePattern="${APP_LOG_HOME}/uas.log.%d{yyyy-MM-dd}.gz"><!-- %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 %p : 日志输出格式 %c : logger的名称 %m : 日志内容,即 logger.info("message") %n : 换行符 %C : Java类名 %L : 日志输出所在行数 %M : 日志输出所在方法名 hostName : 本地机器名 hostAddress : 本地ip地址 --><PatternLayout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M --%msg%xEx%n</pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy interval="1"modulate="true" /></Policies><!-- 最多备份30天以内的日志,此处为策略限制,Delete中可以按自己需要用正则表达式编写 --><!-- DefaultRolloverStrategy字段中加入max=“30”经测试是配合SizeBasedTriggeringPolicy限制%i的存在数量,并没有发现是网上流传的是最多保存多少个文件的限制,也或许是我写的有问题 --><DefaultRolloverStrategy><Delete basePath="${APP_LOG_HOME}" maxDepth="1"><IfFileName glob="uas.log.*.gz" /><IfLastModified age="30d" /></Delete></DefaultRolloverStrategy></RollingRandomAccessFile></Appenders><Loggers><logger name="org.spring" level="error" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="uas_appender" /></logger><logger name="org.springframework" level="error" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="uas_appender" /></logger><logger name="org.apache.zookeeper" level="error" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="uas_appender" /></logger><logger name="com.alibaba.dubbo" level="error" additivity="false"><AppenderRef ref="Console" /><AppenderRef ref="uas_appender" /></logger><logger name="xx.xx.xx" level="info" additivity="false"><AppenderRef ref="Console" /><appender-ref ref="uas_appender" /></logger><root level="info"><appender-ref ref="Console" /><appender-ref ref="uas_appender" /></root></Loggers></configuration>

这里需要注意的有以下几点:

1.log4j2.*版本中获取home路径是${sys:catalina.base}
2.要在<root>标签中添加<appender-ref ref="Console"/>,<appender-ref ref="log"/>才能在控制台、和文件中打印日志

第三步:在web.xml中配置

注释掉以前关于加载log4j的配置,重新配置,这里我的log4j2.xml放在classpath/conf下

<context-param><param-name>log4jConfiguration</param-name><param-value>classpath:conf/log4j2.xml</param-value></context-param>

配置放在web.xml的<display-name/>下方

如此log4j升级log4j2升级成功。

扩展:如果原项目中用的是self4j打印日志,那么导包的时候需要导入:

		<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency>

也是不需要修改代码,关于self4j继承log4j2的详细解决方案,可参考:http://blog.csdn.net/zouxucong/article/details/56005725 

 

原文地址:https://blog.csdn.net/zouxucong/article/details/56013053?utm_source=itdadao&utm_medium=referral


http://www.ppmy.cn/news/573895.html

相关文章

Log4j详细使用教程

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 日志是应用软件中不可缺少的部分&#xff0c;Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站&#xff1a;jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软…

Log4j框架配置文件log4j.properties配置使用详解

一.Log4j的配置文件分类 Log4j支持两种配置文件格式&#xff0c;一种是XML格式的文件&#xff0c;一种是properties&#xff08;keyvalue&#xff09;文件&#xff0c;其中properties格式的配置文件最为常用&#xff0c;其有一个固定的文件名log4j.properties&#xff0c;下面…

J-Flash烧录

之前写过一个J-Flash步骤&#xff0c;但是现在看&#xff0c;发现写的不是很详细&#xff0c;自己不满意。最近正好需要给工厂工人写一个JFlash烧录hex文件的步骤&#xff0c;所以我重新写一个详细的。我使用的芯片平台是MM32和GD32&#xff0c;不管什么芯片只要是cortex-M内核…

exe4j安装及下载

1.首先去官网下载exe4j:https://www.ej-technologies.com/download/exe4j/files&#xff0c;选择对用版本下载 2.下载完成后&#xff0c;一直下一步就可以&#xff0c;如果对下载位置有要求&#xff0c;请自行变更 3.exe4j下载完成后需要添加注册码&#xff0c;否则每次打开都…

slf4j介绍及配置详解

首先maven构建项目&#xff0c;在pom.xml中添加下面代码。<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version></dependency><dependency><groupId>org.slf4j…

SLF4J的错误汇总

SLF4J警告或错误消息及其含义 原文&#xff1a;https://www.slf4j.org/codes.html#StaticLoggerBinder No SLF4J providers were found. 如果在类路径中找不到SLF4J提供程序&#xff0c;则会报告此警告&#xff0c;即不是错误消息。在类路径中放置slf4j-nop.jar slf4j-simple.j…

【log4j】下载、安装、使用

目录 1. 下载2. 安装3. 使用log4j输出log log4j的意思&#xff1a;log for java 官网&#xff1a;https://logging.apache.org/log4j/1.2 w3cschool教程参考&#xff1a;https://www.w3cschool.cn/java/log4j-installation.html 1. 下载 http://logging.apache.org/log4j/1.2…

imagej得到灰度图数据_IMAGE J灰度分析

IMAGE J 灰度分析 DNA 灰度分析 方法 1 1. 首先打开软件后,开启图档; 2. 请先做校正, 选择 Analyze 底下的 Calibrate 选项, 再选择校正的模式, 使用 Uncalibrate OD ,再按 ok ; 3. 在 要 分 析 的 第 一 条 (first lane) 加 上 一 个 长 型 框 ( 工 具 列 第 一 个 选 …