【Java】log4j 基本配置

本文详细介绍了日志组件log4j的使用方法及配置,包括Loggers、Appenders和Layouts三个核心组成部分,并提供了具体的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么需要在项目中导入日志组件?当然,如果我们可以自己完全实现那就不说什么了,但是实际上没有人有时间去实现一个功能强大的日志组件。那么,如果不借助现成的,我们一般就是systemout一些,这种只能应付简单的情况,在大型项目中完全不够用,比如多种输出配置,需要输出到文件,需要输出到数据库等,输出到文件的要按天来划分,定义不同的等级。这些都是我们需要的,而日志组件可以很好地支持这些,我们直接用就行。下面看一下log4j的用法,现在已经出到log4j2了,先看log4j吧。

主要包含了三个部分:Loggers,Appenders和Layouts。Loggers负责记录日志,主要分为以下级别:ALL,DEBUG,INFO,ERROR,FATAL。常用的是后四种,级别越来越高,logger只会记录级别不低于当前设置的日志。

那么平时如何使用这四个级别?一般debug是调试信息,在正式运行的时候是不会输出的,当系统出问题了,想排查可以开启这个级别。info可以输出系统的一些运行状态,比如启动。error和fatal可以是系统的异常。

Appenders负责决定日志输出的位置,常见的是控制台,文件,数据库网络等。

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

每一个appender都有这些配置:

Threshold:级别

ImmediateFlush:是否缓冲

Layout以及Conversion:格式

下面是各自的配置:

控制台:

Target:终端名称

日滚动文件:

Append:是否覆盖,默认不覆盖

File:位置和名称

DataPattern:这里可以定义滚动的日期,比如一天一个或者一月一个。'.'yyyy-MM-dd表示一天一个,当天的由File指定,过期的就加上这个后缀。

块滚动文件:

 

Append:是否覆盖,默认不覆盖

File:位置和名称

MaxFileSize:单个日志文件上限
MaxBackupIndex:备份数目,如果为2,那么有一个当前文件,和两个备份文件

 

Layouts负责输出的格式。

 

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

一般使用PatternLayout模式,具体的格式由ConversionPattern配置:

%p:级别

%d:日期,到毫秒

%l:全类名+行号

%m:日志信息

%c:类名,这个参数与getLogger方法传入的一致,但是%l则是自动寻找当前的

使用:

这里采用了maven导入:

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

log4j.properties:

log4j.rootLogger = INFO, MYCONSOLE, MYDAILY, ERROR

log4j.appender.MYCONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.MYCONSOLE.Target = System.out
log4j.appender.MYCONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.MYCONSOLE.layout.ConversionPattern = [%p][%l,%d]:  %m %n

log4j.appender.MYDAILY = org.apache.log4j.DailyRollingFileAppender
log4j.appender.MYDAILY.File = logs/app.log
log4j.appender.MYDAILY.DatePattern='.'yyyy-MM-dd-hh-mm
log4j.appender.MYDAILY.layout = org.apache.log4j.PatternLayout
log4j.appender.MYDAILY.layout.ConversionPattern = [%p][%l,%d]:  %m %n

log4j.appender.ERROR = org.apache.log4j.RollingFileAppender
log4j.appender.ERROR.File = logs/error.log
log4j.appender.ERROR.Threshold = DEBUG
log4j.appender.ERROR.layout = org.apache.log4j.PatternLayout
log4j.appender.ERROR.layout.ConversionPattern = [%p][%l,%d]:  %m %n
log4j.appender.ERROR.MaxFileSize = 1KB  
log4j.appender.ERROR.MaxBackupIndex = 2

一个日志输出到控制台,一个输出到日滚动文件,另一个记录error,块滚动文件

package com.liyao;


import org.apache.log4j.Logger;

/**
 * Hello world!
 *
 */
public class App {
    public static void main( String[] args ) {
        Logger logger = Logger.getLogger(App.class);
        logger.info("123123");
        logger.error("eorr!!!!");
        logger.debug("debug");
    }


}

补充:

log4j.properties文件位置,如果是maven项目,放在resources目录下即可。

如果想指定日志的位置为相对路径,即项目目录下,可以使用logs/xxxx.log

log4j.rootLogger = DEBUG, Console, File, ERROR

log4j.appender.Console = org.apache.log4j.ConsoleAppender
log4j.appender.Console.Threshold = INFO
log4j.appender.Console.Target = System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = %d{yyyy-MM-dd HH\:mm\:ss} %5p %c{1}:%L - %m%n

log4j.appender.File = org.apache.log4j.RollingFileAppender
log4j.appender.File.Threshold = INFO
log4j.appender.File.File = logs/app.log
log4j.appender.File.MaxFileSize = 500MB
log4j.appender.FILE.Append = false
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern = [%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n

log4j.appender.ERROR = org.apache.log4j.RollingFileAppender
log4j.appender.ERROR.Threshold = ERROR
log4j.appender.ERROR.File = logs/error.log
log4j.appender.ERROR.MaxFileSize = 500MB
log4j.appender.ERROR.Append = false
log4j.appender.ERROR.layout = org.apache.log4j.PatternLayout
log4j.appender.ERROR.layout.ConversionPattern = [%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n

File的模式默认为追加,可以设置Append=false,就会覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值