一、log4j.properties是什么
简单说就是一个日志的配置文件,其中包含了与日志相关的各种配置信息,修改的话需要管理员权限。
在我的Ubuntu虚拟机中的位置:/usr/local/spark-2.3.0-bin-hadoop2.7/conf/log4j.properties(这个是我在做spark实验的时候使用的路径,这样看来不同的环境log4j的位置还不一样嘞……)
注:写这篇总结时候的背景是我在做spark的实验,在Ubuntu系统的IDEA中创建了一个工程,然后在其中创建了一个Object对象,在Object对象中进行编程实验。
二、log4j.properties的修改
推荐一篇极好的博客:Spark log4j 日志配置详解
三、遇到的问题
在更改log4j.properties文件后,运行程序,发现日志依然从控制台输出,自己指定的log文件中并没有任何变化。
解决方法:
上网查阅了很多资料,发现导致这种问题出现的原因是:
程序在执行时引用了其他的jar包,引用的jar包中可能包含了其他log4j相关的配置文件。由于log4j配置文件的引用存在优先级,因此程序没有使用我们之前更改的log4j.properties文件,而是使用了jar包中的配置文件,导致更改没有奏效。
解决方法:
方法一:在程序中通过加入代码,直接指定使用的log4j.properties文件:
首先导入相关的包:
import org.apache.log4j.PropertyConfigurator
然后在主函数中添加语句:
PropertyConfigurator.configure("/usr/local/spark-2.3.0-bin-hadoop2.7/conf/log4j.properties")
注:引号中为想要指定使用的log4j.properties的绝对路径(这里画重点)
方法二:
博文里就是大致解决思路
四、其他收获
1、maven工程?
2、log4j.properties引用还存在优先级?!而且据说还不确定,所以网上多数网友推荐上面记录的方法中的方法一。
本次解决问题所浏览过的博客:
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
在项目的classPath 下配置log4j.xml ,为什么没有读取log4j的配置文件它会自己找到