log4j日志框架分析及使用教程

log4j日志框架分析及使用教程

日志很重要!!!

log4j是什么?

​ log4j是Apache下的一款开源的日志框架,能够满足我们在项目中对于日志记录的需求。log4j提供了简单的API调用,强大的日志格式定义以及灵活的扩展性。使用者可以自己定义Appender来满足对于日志输出的需求。在系统中对于记录日志的需求并不单纯。

​ 首先,希望日志能持久化到磁盘,最基本的就是能够保存到文件中;

​ 其次,希望在开发和生产环境中记录的日志并不相同,明显开发环境的日志记录会更多方便调试,但放到生产环境下大量的日志很容易会撑爆服务器,因此在生产环境希望只记录重要信息。

​ 基于不同的目的,System.out.println不能直接满足使用者的需求,因此应该选择功能更强的日志框架。而log4j是apache下一款著名的开源日志框架。

为什么需要日志?

​ ①异常的场景

​ 产品开发、系统运维(升级、日常管理等)

​ ②时间成本

​ 快速、高效

​ ③人力成本

​ 简化、降低难度

日志给谁用?

日志什么时候用?

​ 日志作为一种调试利器,可以帮助我们观察软件运行时内部结构和状态,辅助开发。日志文件分析已成为大型软件项目中代码调试的主要手段

​ ①软件测试时

​ 软件测试过程中,通过Debug或Trace信息,可以确认功能的实现原理及正确性。

​ ②软件运维时

​ 已发布运行的软件,当某个功能出现异常时,我们无法像开发环境一样进行调试找原因,能留给我们的就只有日志系统。如网管的配置下载问题。

​ ③学习软件时

熟悉一个陌生软件系统时,日志能够提供很多线索给我们去了解软件的架构和实现逻辑。

日志什么时候该记录?

​ ①模块的启动与结束

​ 需要对模块的启动和结束进行监控,从而知道模块是否正常加载或正常退出。比如网管ICE服务的OnClientInitMe等函数。

​ ②用户登录及操作

​ 需要记录用户何时登录、登出以及做了哪些操作,方便审计。比如网管的安全日志和操作日志。

​ ③异常信息

​ 所有捕获异常的位置均应当记录异常内容日志,所有与系统软件预期不符的地方都要记录日志。

​ ④软件的关键方法

​ 需要记录软件系统的一些关键性操作,它是衡量系统正常运行的重要指标。比如业务/配置增删改、激活、去激活等关键操作。

日志有几个等级?

​ 日志等级:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL。

​ 通常以下几种:TRACE、DEBUG、INFO、WARN、ERROR

​ ①TRACE :细致入微,可以用于开发过程中追踪bug 。

​ ②DEBUG:系统调试信息,通常用于开发过程中对系统运行情况的监控,在实际运行环境中不进行输出。

​ ③INFO:系统运行的关键性信息,通常用于对系统运行情况的监控。

​ ④WARN:告警信息,系统存在潜在的问题,有可能引起运行异常,但此时并未产生异常。

​ ⑤ERROR:系统错误信息,需要进行及时处理和优化。

等级目的阶段对象程度
ERROR告警运行用户准确/严重
WARN提醒运行/使用用户准确
INFO说明使用运维简洁
DEBUG详解开发调试维护/开发详细清楚
TRACE研究调试/学习开发/研发细致入微

使用日志该注意什么?

​ ①粒度适中

​ ②写有意义的log

​ ③不同场景选择正确的日志级别

​ ④日志信息可理解性

​ ⑤日志语言选择英文

*日志细节决定系统成败!*

log4j日志该如何配置使用?

配置

在项目资源配置文件夹新建 log4j.properties

### 设置###
log4j.rootLogger = debug,stdout,debugLog,infoLog,errorLog

### 输出信息到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志 ###
log4j.appender.debugLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugLog.File =logs/debug/log.log
log4j.appender.debugLog.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.debugLog.Append = true
log4j.appender.debugLog.Threshold = DEBUG
log4j.appender.debugLog.layout = org.apache.log4j.PatternLayout
log4j.appender.debugLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出INFO 级别以上的日志 ###
log4j.appender.infoLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoLog.File =logs/info/log.log
log4j.appender.infoLog.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.infoLog.Append = true
log4j.appender.infoLog.Threshold = INFO
log4j.appender.infoLog.layout = org.apache.log4j.PatternLayout
log4j.appender.infoLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志 ###
log4j.appender.errorLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorLog.File =logs/error/log.log
log4j.appender.errorLog.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.errorLog.Append = true
log4j.appender.errorLog.Threshold = ERROR
log4j.appender.errorLog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

注意:log4j.properties文件一定存放在资源文件夹中,否则项目无法识别调用

设置输出内容

编写日志输出内容

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestLog4j {

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

    public static void main(String[] args) {

        System.out.println("This is println message.");
        // 记录debug级别的信息
        logger.debug("This is debug message.");
        // 记录info级别的信息
        logger.info("This is info message.");
        // 记录error级别的信息
        logger.error("This is error message.");
    }
}

测试结果

项目结构

Maven依赖

<dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.5</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.32</version>
            </dependency>
        </dependencies>

运行结果

日志信息输出到控制台

日志信息保存到本地

​ logs文件夹系统会自动生成,无需新建

debug

error

info

源码获取

关注微信公众号:

Java烂笔头

对话框回复:

log4j

博主单纯需要阅读分享点赞、在看的鼓励支持,阳光无套路,完整源码分享!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值