18--日志(了解)

1、日志

1.1 什么是日志

日志用来记录用户操作、系统运行状态等,是一个系统的重要组成部分。对于一些简单的小程序,可能并不需要在如何记录日志的问题上花费太多精力。但是对于作为基础平台为很多产品提供服务的后端程序,就必须要考虑如何依靠良好的日志来保证系统可靠的运行了。

好的日志可以帮助系统的开发和运维人员

  • 了解线上系统的运行状态
  • 快速准确定位线上问题
  • 发现系统瓶颈
  • 预警系统潜在风险
  • 挖掘产品最大价值

不好的日志导致

  • 对系统的运行状态一知半解,甚至一无所知
  • 系统出现问题无法定位,或者需要花费巨大的时间和精力
  • 无法发现系统瓶颈,不知优化从何做起
  • 无法基于日志对系统运行过程中的错误和潜在风险进行监控和报警
  • 对挖掘用户行为和提升产品价值毫无帮助

1.2 日志分类

日志从功能来说,可分为诊断日志、统计日志、审计日志。

1.2.1 诊断日志

  • 请求入口和出口
  • 外部服务调用和返回
  • 资源消耗操作: 如读写文件等
  • 容错行为: 如云硬盘的副本修复操作
  • 程序异常: 如数据库无法连接
  • 后台操作:定期执行删除的线程
  • 启动、关闭、配置加载

1.2.2 统计日志

  • 用户访问统计:用户IP、上传下载的数据量,请求耗时等
  • 计费日志(如记录用户使用的网络资源或磁盘占用,格式较为严格,便于统计)

1.2.3 审计日志

  • 管理操作对于简单的系统,可以将所有的日志输出到同一个日志文件中,并通过不同的关键字进行区分。而对于复杂的系统,将不同需求的日志输出到不同的日志文件中是必要的,通过对不同类型的文件采用不同的日志格式(例如对于计费日志可以直接输出为Json格式),可以方便接入其他的子系统。

1.3 日志级别

Log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别)

优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。

ALL

最低等级的,用于打开所有日志记录。

TRACE

designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。

DEBUG

DEUBG 级别的主要输出调试性质的内容,该级别日志主要用于在开发、测试阶段输出。该级别的日志应尽可能地详尽,便于在开发、测试阶段出现问题或者异常时,对其进行分析。

INFO

INFO日志主要记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现。建议在项目完成后,在测试环境将日志级别调成 INFO,然后通过 INFO 级别的信息看看是否能了解这个应用的运用情况,如果出现问题后是否这些日志能否提供有用的排查问题的信息。

WARN

WARN 级别的主要输出警告性质的内容,这些内容是可以预知且是有规划的,比如,某个方法入参为空或者该参数的值不满足运行该方法的条件时。在 WARN 级别的时应输出较为详尽的信息,以便于事后对日志进行分析

ERROR

ERROR 级别主要针对于一些不可预知的信息,诸如:错误、异常等,比如,在 catch 块中抓获的网络通信、数据库连接等异常,若异常对系统的整个流程影响不大,可以使用 WARN 级别日志输出。在输出 ERROR 级别的日志时,尽量多地输出方法入参数、方法执行过程中产生的对象等数据,在带有错误、异常对象的数据时,需要将该对象一并输出

FATAL

指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错误,这种级别你可以直接停止程序了。

OFF

最高等级的,用于关闭所有日志记录。

1.4 日志小结

如果将log level设置在某一个级别上,那么比此级别优先级高的log都能打印出来。例如,如果设置优先级为WARN,那么OFF、FATAL、ERROR、WARN 4个级别的log能正常输出,而INFO、DEBUG、TRACE、 ALL级别的log则会被忽略。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

Log4J的默认级别为:ERROR

2、Log4J

2.1 Log4J概述

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。

2.2 Log4J的基本使用

2.2.1 导入log4j-1.2.17.jar

在项目中新建一个lib文件夹,此文件夹与src平级,将jar文件复制到该目录中

18--日志(了解)_第1张图片

2.2.2 导入log4j的配置文件

注意配置文件放在src,会自动加载

log4j.properties

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
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 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F://Java/JavaSE/Day14/log/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

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

测试:

import org.apache.log4j.Logger;

public class Main {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(Main.class);

        logger.debug("这是debug信息");

        logger.error("这是错误信息");

        try {
            int a = 10;
            int b = 0;
            int c = a / b;
            System.out.println(c);
        }catch (Exception e){
            logger.error(e.getMessage());
        }
    }
}

执行结果:

18--日志(了解)_第2张图片

18--日志(了解)_第3张图片

你可能感兴趣的:(JavaSE学习记录,apache,java,开发语言)