具体基本知识介绍:见 http://gyfmp5.iteye.com/blog/103253 有非常详细介绍
实际中碰到的问题:
1. 如何让不同的类或包的日志输入不同的目的地(文件、 db 等)
比如:按照业务不同输入不同的日志文件,宽带业务、预付费业务输入不同的日志文件
解决:
log4j.logger.com.ht.ibms.orderadmin.service.tache.adsl = debug ,FILE_ADSL
log4j.logger. xxx.yyy.zzz = info , FILE_UORSS
这里把包 com.ht.ibms.orderadmin.service.tache.adsl 下的类的日志写入 FILE_ADSL 文件 级别为 debug ;
2. 如何让不同级别的日志级别输入不同的目的地(文件、 db 等)
让 err 、 info 、 debug 输入不同的日志文件;这样方便使用查找
解决:
log4j.logger.com.ht.ibms.orderadmin.service.tache.adsl = debug ,FILE_ADSL
log4j.logger.com.ht.ibms.orderadmin.service.tache.adsl = info ,FILE_ADSL_2
也可以配置 这样
log4j.logger.com.ht.ibms.orderadmin.service.tache.adsl = debug ,FILE_ADSL
log4j.logger.com.ht.ibms.orderadmin.service.tache.adsl = debug,FILE_ADSL_2
但 appender FILE_ADSL_2 要设置最低接受级别 log4j.appender.FILE_ADSL_2.Threshold= info
3. 日志配置文件实时加载
不想重启服务器而想重新加载日志的配置文件
解决见下文
4. 日志配置 File 的相对路径配置
日志 File 方式的相对路径怎么配置;相对路径能是软件真正的跨平台跨路径使用
解决见下文
分析:
其实, log4j 在加载的时候会在 class 路径里找 log4j.properties 文件,如果找到了就会赋给 PropertyConfigurator 配置
PropertyConfigurator.configure(props);// 装入 log4j 配置信息
PropertyConfigurator.configure(xxxFilePath);// 装入 log4j 配置信息
在实时加载的时候就要重新配置加载下 ~
log4j 中配置日志文件相对路径
http://www.whitehouse.net.cn/blog/Article/log4j_config.html
法一、 解决的办法自然是用相对路径代替绝对路径,其实 log4j 的 FileAppender 本身就有这样的机制,如: log4j.appender.logfile.File=${WORKDIR}/logs/app.log
其 中 “${WORKDIR}/” 是个变量,会被 System Property 中的 “WORKDIR” 的值代替。这样,我们就可以在 log4j 加载配置文件之前,先用 System.setProperty ("WORKDIR", WORKDIR); 设置好根路径,此操作可通过一初始的 servlet 进行。
法二、可以使用服务器环境变量
log4j 的配置文件支持服务器的 vm 的环境变量,格式类似 ${catalina.home}
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log
log4j.appender.R.MaxFileSize=10KB
其 中的 ${catalina.home} 并非 windows 系统的环境变量,这个环境变量就不需要在 Windows 系统的环境变量中设置。之所以这样,你可 以看看 tomcat\bin\catalina.bat(startup,shutdown 都是调用这个 ) 里面自带有 -Dcatalina.home= "%CATALINA_HOME%" 。继承这个思想,所以你也可以自己设定一个参数 -Dmylog.home="D:/abc/log" 到对应的服务器 java 启动的 vm 参数中
法三、通过 servlet 初始化 init() 方法中加载 file 属性实现相对路径
具 体实现 : 做一个 servlet, 在系统加载的时候 , 就把 properties 的文件读到一个 properties 文件中 . 那个 file 的属性值 ( 我使用的 是相对目录 ) 改掉 ( 前面加上系统的根目录 ), 让后把这个 properties 对象设置到 propertyConfig 中去 , 这样就初始化了 log 的设置 . 在后面的使用中就用不着再配置了
一般在我们开发项目过程中 ,log4j 日志输出路径固定到某个文件夹 , 这样如果我换一个环境 , 日志路径又需要重新修改 , 比较不方便 , 目前我采用了动态改变日志路径方法来实现相对路径保存日志文件
(1). 在项目启动时 , 装入初始化类 :
public class Log4jInit extends HttpServlet { static Logger logger = Logger.getLogger(Log4jInit.class); public Log4jInit() { } public void init(ServletConfig config) throws ServletException { String prefix = config.getServletContext().getRealPath("/"); String file = config.getInitParameter("log4j"); String filePath = prefix + file; Properties props = new Properties(); try { FileInputStream istream = new FileInputStream(filePath); props.load(istream); istream.close(); //toPrint(props.getProperty("log4j.appender.file.File")); String logFile = prefix + props.getProperty("log4j.appender.file.File");// 设置路径 props.setProperty("log4j.appender.file.File",logFile); PropertyConfigurator.configure(props);// 装入 log4j 配置信息 } catch (IOException e) { toPrint("Could not read configuration file [" + filePath + "]."); toPrint("Ignoring configuration file [" + filePath + "]."); return; } } public static void toPrint(String content) { System.out.println(content); } }
实 际上 log4j 的配置文件 log4j.properties 如为默认名,可放置在 JVM 能读到的 classpath 里的任意地方,一般是放在 WEB- INF/classes 目录下。当 log4j 的配置文件不再是默认名,则需要另外加载并给出参数,如上 “ropertyConfigurator.configure(props);// 装入 log4j 配置信息 ”
(2).Web.xml 中的配置
<servlet> <servlet-name>log4j-init</servlet-name> <servlet-class>Log4jInit</servlet-class> <init-param> <param-name>log4j</param-name> <param-value>WEB-INF/classes/log4j.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
注意:上面的 load-on-startup 设为 0 ,以便在 Web 容器启动时即装入该 Servlet 。 log4j.properties 文件放在根的 properties 子目录中,也可以把它放在其它目录中。应该把 .properties 文件集中存放,这样方便管理。
(3).log4j.properties 中即可配置 log4j.appender.file.File 为当前应用的相对路径。
+
_
)
(
*
*
相关推荐
### log4j乱码问题解决办法 #### 一、引言 在开发过程中,日志记录是必不可少的一个环节。良好的日志系统可以帮助开发者快速定位问题并进行调试。Log4j作为一款广泛使用的Java日志框架,在很多项目中扮演着重要...
总结来说,Log4j2.16.0是一个关键的安全更新,解决了Log4j2框架中的“Log4Shell”漏洞。对于使用若依框架或其他依赖Log4j2的项目,升级到这个版本至关重要,可以避免系统遭受恶意攻击。用户需要下载并正确安装这个...
然而,如果你在运行应用时仍然收到同样的警告,可能是因为在某些类中使用了Log4j,但没有正确初始化。要解决这个问题,你需要在每个需要用到日志的类中,通过以下方式获取logger实例: ```java import org.apache....
与Log4j 1.x相比,Log4j2在设计上进行了重大改进,并解决了Logback等其他日志框架中存在的某些体系结构问题。 #### 特性概述 1. **审计功能**:Log4j2设计时考虑到了审计需求,这意味着即使在配置更新过程中,它也...
删除项目中存在的Log4j1.x所必须的log4j和slf4j-log4j12等依赖可以使用以下命令: mvn dependency:tree > tree.log cat tree.log | grep log4j 添加Slf4j和Log4j2的依赖可以使用以下配置: <groupId>org.slf4j ...
Log4j是Apache组织开发的一款广泛使用的Java日志框架,它为Java应用程序提供了一种灵活且强大的日志记录机制。Log4j的各个版本在功能、性能和安全性方面都有所不同,下面将详细介绍这些版本及其特点。 1. Log4j ...
IntelliJ IDEA(简称IDEA)是一款流行的Java集成开发环境,它支持将log4j集成到项目中,通过配置pom.xml或build.gradle文件添加依赖,或者手动将log4j.jar添加到项目的类路径下,以便在IDEA中直接使用Log4j进行日志...
### log4j中文手册知识点概览 ...综上所述,`log4j`是一款强大且灵活的日志记录工具,通过上述知识点的学习,我们不仅可以快速掌握其基础使用方法,还能深入理解其内部机制,更好地应用于实际项目中。
本教程主要关注如何在Tomcat 9环境中使用SLF4J(Simple Logging Facade for Java)和Log4j2进行日志记录,并解决可能出现的日志不写入问题。 首先,SLF4J是一个日志门面,它为各种日志框架提供了抽象层,如Logback...
这个"log4j使用实例.zip"压缩包包含了关于如何在Java项目中配置和使用Log4j的示例代码,非常适合Java后端初学者学习。 首先,Log4j的核心组件包括Logger、Appender和Layout。Logger是日志信息的生产者,负责生成...
Log4j是Apache的一个开源项目,提供了一套强大的日志API,而Log4j2是其升级版,旨在解决Log4j1.x存在的性能问题和设计缺陷。 Log4j2的核心改进在于其引入了全新的API——Log4j 1.2 API,文件`log4j-1.2-api-2.8.2....
4. 回溯修复:除了直接修复漏洞,log4j2.17.2还回溯修复了之前版本中可能存在的相关问题,以确保整体的安全性。 对于使用Java和Log4j2的开发者和管理员来说,升级到log4j2.17.2是必须且紧迫的任务。为了确保无缝...
通过分析和学习Log4j的源代码,开发者可以更好地理解和利用这个强大的工具,解决在实际项目中遇到的日志问题,定制自己的日志解决方案,或者为开源社区贡献新的特性或修复已知问题。总之,熟悉并掌握Log4j的内部工作...
为了解决这个问题,专门的Log4j2漏洞检测工具应运而生。 **Log4j2漏洞概述** Log4j2是Apache软件基金会的一个项目,它提供了一个灵活且高性能的日志记录API。然而,在2021年12月初,研究人员发现Log4j2的一个严重...
“log4j漏洞扫描工具”是指用于检测和识别Apache Log4j框架中存在安全漏洞的专用软件。Log4j是Java编程语言中的一个流行日志记录库,2021年曝光的重大安全漏洞(被称为CVE-2021-44228或Log4Shell)使得恶意攻击者...
当我们遇到“无法打出log4j日志的问题”,这通常是由于配置、环境或代码实现中的某些错误导致的。这篇长文将深入探讨如何排查和解决这类问题。 首先,我们要理解Log4j的基本工作原理。Log4j通过配置文件(通常是log...
本篇文章旨在详细介绍如何在Java中使用Log4j来管理日志,包括其配置方法以及与其他日志框架(如Commons Logging和JDK自带Logger)的对比。 #### 二、Jakarta Commons Logging (JCL) ##### 2.1 概述 Jakarta ...
这里特别提到了两个关键文件:`log4j-core-2.7.jar`和`log4j-api-2.7.jar`,它们是Log4j 2.7版本的核心实现和API接口,用于修复可能存在的与Struts2集成时的日志相关问题。此外,还提及了`log4j2.xml`,这是一个配置...
在安装Log4j插件后,可以解决开发环境中找不到Log4j的问题,从而顺利进行ophone应用的开发和调试。 总的来说,Eclipse Log4j插件是Java开发中提高日志管理效率的重要工具,它不仅简化了日志的输出,还提供了与IDE...
在实际项目中,可能同时存在log4j、SLF4J和log4j2的依赖,这时桥接包就显得尤为重要。例如,如果项目原本使用log4j,但希望迁移到SLF4J或log4j2,桥接包可以提供兼容性,避免日志混乱。`log4j-slf4j-impl.jar`是将...