什么是日志?
日志是记录系统或应用程序在运行过程中所发生事件或行为的详细信息的文件。它通常包括时间戳、事件类型、事件描述等信息,以便在需要时进行故障排查、性能优化、安全审计等工作。日志可以帮助开发人员和系统管理员诊断应用程序问题,了解系统运行情况,以及存档和监控事件。
log4j是什么?
log4j是一个Java日志框架,可以以非常灵活的方式记录应用程序日志。它提供了一种在运行时配置日志输出和日志级别的方式,让开发人员能够方便地控制日志输出,同时它还支持多种日志输出格式和输出目标,比如输出到控制台、文件、数据库等。log4j已经非常成熟,并且广泛应用于各种Java应用程序中。
为什么要使用log4j?
log4j是一个Java日志框架,用于记录应用程序中的日志信息。它可以帮助程序员管理和输出日志,提高代码的可读性、可维护性和可扩展性。
log4j的主要概念包括:
-
Logger:日志记录器,用于记录日志信息。每个Logger可以有自己的日志级别和Appender。
-
Level:日志级别,用于指定日志信息的重要性。包括TRACE、DEBUG、INFO、WARN、ERROR和FATAL等级别。
-
Appender:日志输出器,用于将日志信息输出到不同的目的地,如控制台、文件、数据库等。
-
Layout:日志布局,用于指定日志信息的格式。
-
Filter:日志过滤器,用于根据条件过滤不需要的日志信息。
-
Configuration:日志配置,用于配置日志记录器、输出器、布局、过滤器等。可以通过配置文件、代码或注解进行配置。
log4j 的优点
Log4j是Java编程语言的一个开源项目,可与Java应用程序集成并提供自定义日志记录功能。以下是使用Log4j的一些优点:
-
灵活性:Log4j可以按照特定需求进行配置和使用,可以控制日志级别、输出目标和格式等。
-
性能:Log4j具有高效的日志记录功能,可以在应用程序中实现快速、高效的日志记录。
-
维护性:Log4j可以帮助开发人员快速发现和解决应用程序中的日志问题,有助于提高代码质量和维护性。
-
可扩展性:Log4j允许开发人员实现自定义日志记录功能,可根据不同的需求进行扩展和定制。
-
社区支持:Log4j是一个广泛使用和支持的开源项目,有大量的文档和社区资源可供参考和使用。
log4j2 的主要概念包括:
以下是log4j2的主要概念:
-
Logger(记录器):负责记录日志信息的组件,通常通过名称来区分不同的记录器。
-
Appender(追加器):负责将记录器产生的日志信息输出到指定的目的地,例如控制台、文件等。
-
Layout(布局):负责将日志记录器产生的信息按照指定格式输出,可以自定义布局。
-
Filter(过滤器):负责筛选日志信息,只输出符合特定条件的日志信息。
-
Configuration(配置):负责配置日志系统,包括定义日志记录器、追加器、布局和过滤器等。
-
Level(等级):负责定义日志信息的重要性,例如TRACE、DEBUG、INFO、WARN、ERROR、FATAL等。
-
Marker(标记):负责为日志信息添加额外的标记,便于后续处理和分类。
-
ContextMap(上下文映射):负责将关键信息以键值对的形式存储在上下文中,便于后续查询和分析。
log4j2 的优点
log4j2是Apache软件基金会的一个日志框架,具有以下优点:
-
高性能:log4j2使用异步日志写入,能够获得更好的性能表现。
-
灵活性:log4j2提供了多种输出模式和过滤器,能够满足各种不同场景和需求。
-
插件化:log4j2支持插件化的扩展,可以通过插件快速地集成到不同的系统中。
-
多线程安全:log4j2是线程安全的,多线程中不会出现数据不一致的情况。
-
支持多种编程语言:log4j2支持多种编程语言,在Java、Scala和Kotlin等语言中都能够使用。
log4j 和 log4j2的下载以及安装配置
以下是 log4j 的下载安装步骤:
- 访问 Apache log4j 官方网站,下载最新版本的 log4j。
- 解压缩下载的压缩包。
- 解压文件到创建好的 lib 文件夹中
- 将log4j2解压后的【log4j-api-2.14.1.jar】和【log4j-core-2.14.1.jar】 文件复制到项目创建好的 lib 目录下。
- 将 log4j 解压后的【log4j-1.2.17.jar】文件复制到项目创建好的 lib 目录下。
- 在项目中添加 log4j 的配置文件 log4j.properties 或者 log4j.xml。
- 第一种配置文件(log4j2 的配置文件):
- src下新建配置文件 【log4j.xml】
- log4j2的配置文件只能使用:.xml、.json、.jsn。
-
<?xml version="1.0" encoding="UTF-8"?> <!-- status记录到控制台的内部Log4j事件的级别,可缺省 --> <!-- monitorInterval设置检查文件更改间隔时间,单位S,每秒检查一次 --> <configuration status="WARN" monitorInterval="1"> <!--日志打印级别: fatal > error > warn > info > debug > trace --> <!-- 全局变量,通过${name}引用该变量 --> <Properties> <!-- 日志打印路径 --> <Property name="LOG_HOME">../logs/fc-asset</Property> <!-- 历史日志打印路径 --> <Property name="HISTORY_LOG_HOME">${LOG_HOME}/history</Property> <!-- 统一日志打印格式:2020-07-01 21:14:48, 987 [main] [INFO] [com.fc.asset.FcAssetApplication] [FcAssetApplication.java:15] - message --> <Property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss, SSS} [%thread] [%-5level] [%logger{36}] [%file:%line] - %msg%n"/> </Properties> <!-- 负责将日志传送至配置目的地,配置日志打印内容、格式、方式、保存策略等 --> <Appenders> <!-- 控制台日志打印配置 --> <console name="Console" target="SYSTEM_OUT"> <!-- 打印格式 --> <PatternLayout charset="UTF-8" pattern="${LOG_PATTERN}"/> </console> <!-- 文件打印配置,支持文件滚动归档和缓存;filePattern设置滚动单位为S,%i代表从1开始的正整数,%3i可为3位 --> <RollingRandomAccessFile name="normalLog" fileName="${LOG_HOME}/fc-asset.log" filePattern="${HISTORY_LOG_HOME}/fc-asset_%d{yyyy-MM-dd HH:mm:ss}_%i.log"> <!-- 打印格式 --> <PatternLayout charset="UTF-8" pattern="${LOG_PATTERN}"/> <!-- 滚动策略 --> <Policies> <!-- 文件每超过1KB就生成一个新的日志文件 --> <SizeBasedTriggeringPolicy size="1KB"/> <!-- 每2秒生成一个新的日志文件,并修正时间 --> <TimeBasedTriggeringPolicy interval="2" modulate="true"/> </Policies> <!-- 同一秒的日志文件最多只能拆分两个 --> <DefaultRolloverStrategy max="2"/> </RollingRandomAccessFile> </Appenders> <!-- 日志打印配置,只有此处配置了Appender,Appender才会生效 --> <Loggers> <!-- 只打印包含com.fc.asset内容的日志,打印级别为trace,并将其反馈至Root中 --> <Logger name="com.fc.asset" level="trace" additivity="true"> <AppenderRef ref="normalLog"/> </Logger> <!-- Root设置打印级别为trace,打印控制台 --> <Root level="trace"> <AppenderRef ref="Console"/> </Root> </Loggers> </configuration>
-
第二种配置文件(log4j 1.2.17 的配置文件):
-
src下新建配置文件【log4j.properties】
-
以下是一个简单的log4j.properties配置文件示例:
# 定义根日志记录级别及输出目的地 log4j.rootLogger=DEBUG, stdout # 定义控制台输出目的地 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{1} - %m%n # 定义日志输出级别 log4j.logger.com.example=DEBUG
这个配置文件将根日志记录级别设置为DEBUG,并且将日志输出到控制台(stdout)。日志输出的格式使用ISO8601时间格式,包含线程名,日志级别,类名和日志内容。对于com.example包下的类,将会记录DEBUG级别的日志。
-