文章目录
1. Log4j 根配置语法
log4j.rootLogger = [ level ] , appenderName, appenderName, …
level需要用枚举值替换,表示日志级别
appenderName是输出方式,也是枚举值
把指定级别以上的日志信息输出到指定的一个或者多个位置
1.1 level 日志级别
org.apache.log4j.Level 类中定义了OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
七种日志级别
1.2 appenderName
appenderName是助记符,没有实际作用,但是针对appenderName,在下面,必须单独配置一个和appenderName相关的实现器,实现器的核心是appender,枚举值如下:
输出端类型 | 作用 |
---|---|
ConsoleAppender | 将日志输出到控制台 |
FileAppender | 将日志输出到文件中 |
DailyRollingFileAppender | 将日志输出到一个日志文件,并且每天输出到一个新的文件 |
RollingFileAppender | 将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大 小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件 |
JDBCAppender | 把日志信息保存到数据库中 |
1.3 使用模板
助记符没有意义,只要下面的配置和其保持一致
# 我们定义INFO级别,后面选择2种打印类型,控制台和文件
log4j.rootLogger=INFO, Console ,File
#Console ,其实就是一个助记符
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#File ,其实就是一个助记符
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = d://log4j2.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
不同的appender的参数,比如consoleappender就不要file位置参数,而相反,fileappender类型的必须指定位置
1.4 引用变量
有时,我们会定义一些公共参数,然后通过${}用,我们以zookeeper安装包conf/log4j.properties自带的为例:
1.5 Threshold属性
log4j.rootLogger=INFO, Console ,File 是全局属性,此时Console 和File都是INOF级别的,假设我想把Console改为ERROR,File仍维持不变,可以通过Threshold属性:
log4j.appender.Console.Threshold=ERROR
当然这里有个提前 Threshold层级必须大于 rootLogger里配置的level,即私人订制的要比全局的要更严格,否则无效,这里的顺序是OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 由大到小 。
2. 例子
1.配置依赖包引用
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.编码
import org.apache.log4j.Logger;
public class Log4jTest {
static Logger logger = Logger.getLogger(Log4jTest.class.getName());
public static void main(String[] args) {
logger.debug("This is debug message.");
logger.info("This is info message.");
logger.error("This is error message.");
}
}
3. eclipse配置log4j.properties
项目路径src下新建 log4j.properties 配置文件
# 日志级别和输出端,本例中同时向控制台和文件中写入日志
log4j.rootLogger=INFO,Console,A
#控制台输出端参数
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#文件输出端参数
log4j.appender.A=org.apache.log4j.FileAppender
log4j.appender.A.layout = org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.A.File=D:\\test\\logA.log
我们故意用A来充当助记符
4. idea 配置log4j.properties
在resources下:
2. 配置失效
有时发现配置未生效,则可能是冲突了,去掉冲突的包即可,比如spring boot下logback会产生冲突,去掉即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion><!--解决spring-boot-starter-logging下面的logback与log4j冲突-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>