首页 > 其他分享 >Log4j入门使用(什么是日志? 为什么要使用Log4j)

Log4j入门使用(什么是日志? 为什么要使用Log4j)

时间:2023-11-14 22:44:06浏览次数:39  
标签:输出 入门 Log4j log4j 日志 级别 logger

什么是Log4j?

Log4j是一个Java日志组件,通过日志记录器接口,为程序提供了灵活的配置选项,可以将不同级别的消息输出到不同的目的地,如控制台,文件,数据库等。Log4j可以帮助开发人员更好地调试应用程序,同时也方便了运维人员对应用程序进行监控和故障排查

为什么要使用Log4j?

Log4j是一个流行的Java日志框架,它有以下几点优点:

1、灵活性:Log4j具有高度的配置灵活性,允许根据需要进行配置和定制。可以根据具体的应用程序要求进行配置。
2、高效性:Log4j实现了多种日志级别,使得可以选择不同的日志级别来记录不同的信息。它还能够在不影响应用程序性能的情况下记录大规模日志数据。
3、可扩展性:Log4j可以轻易地扩展,以满足应用程序要求。
4、统一性:Log4j作为一个标准的日志框架,可以帮助应用程序开发人员在不同的应用程序中使用相同的日志流程。
5、简易性:Log4j拥有易于使用的API,使得记录日志变得非常方便。

怎么使用(配置)Log4j ?

使用Log4j可以大致分为以下几个步骤:

1. 引入Log4j库。可以在Maven中添加以下依赖项:

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

2. 创建和配置log4j.properties文件。在项目的src/main/resources目录下创建log4j.properties文件,编写以下代码:

# 设置日志输出的级别
log4j.rootLogger=DEBUG, console
 
# 配置控制台输出
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

3. 在Java代码中定义Logger对象。在需要记录日志的Java文件中,引入Log4j库并创建Logger对象。

import org.apache.log4j.Logger;
 
public class MyClass {
    private static final Logger logger = Logger.getLogger(MyClass.class);
}

4. 使用Logger对象记录日志。在代码中使用Logger对象的不同方法记录日志,如下所示:

logger.debug("Debug message");
logger.info("Info message");
logger.warn("Warn message");
logger.error("Error message");
logger.fatal("Fatal message");

5. 运行程序并查看日志输出。运行程序后,可以在控制台中看到Log4j输出的日志信息,根据log4j.properties文件中的设置输出不同级别的日志信息

什么是日志?

日志是一种记录软件运行情况、错误和警告的文件或数据库。在软件开发、运维和故障排除过程中,日志可以提供有用的信息,帮助开发人员和运维人员了解应用程序的行为和问题,从而更好地进行调试、测试、性能监控和故障排除。日志通常包含时间戳、事件类型、事件描述、错误码、堆栈跟踪、异常信息等。

为什么要使用日志? 

以下是使用日志的几个原因:

1. 故障排除:日志记录能够提供有用的信息,帮助诊断和解决问题。

2. 软件调试:日志记录可以帮助开发人员更好地了解软件的行为以及问题。

3. 性能调优:日志可以记录应用程序的性能数据,帮助优化应用程序的性能。

4. 安全审计:日志记录可以帮助跟踪可能的安全问题。

5. 维护历史记录:日志可以提供有价值的历史记录,帮助了解软件的演进历史和维护。

6. 业务分析:日志记录可以提供有关用户使用软件的情况、流量和其他业务数据。

总之,日志记录可以提供运营、维护、开发等多方面的有用信息,方便我们优化软件一系列的操作。

怎么使用日志?

经过前面的Log4j日志配置后,可以编辑一个测试实例:

public class log {
 
    public static void main(String[] args) {
        //获取日志记录器
        Logger logger = Logger.getLogger(log.class);
        
        //记录debug日志信息
        logger.debug("这是debug级别的信息");
        
        //记录info日志信息
        logger.info("这是info级别的信息");
        
        //记录error日志信息
        logger.error("这是error级别的信息");
    }
}

控制台结果:

D:\log中的日志文件结果如下:

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%t 用来输出生成该日志事件的线程的名称
%p 用于输出日志事件的优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 用于输出从layout(布局)的构建到日志事件创建所经过的毫秒数
%c 用于输出日志事件的category(类别),通常就是所在类的全名
%F 用于输出被发出日志记录请求,其中的文件名
%d 用于输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd
HH:mm:ss,SSS},输出类似:20017年02月18日 22:10:28,921
%L 用于输出日志事件的发生位置,即在代码中的行数。举例:10
%l用于输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%% 用于输出%标志
%M 用于输出打印该条日志的方法名
%m 用于输出代码中指定的消息
%n 用于输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

日志级别:

每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:
A:off 最高等级,用于关闭所有日志记录。
B:fatal 指出每个严重的错误事件将会导致应用程序的退出。
C:error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm 表明会出现潜在的错误情形。
E:info 一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all 最低等级,用于打开所有日志记录。

日志输出:

日志既然都有级别,那么日志输入时也会作用到,在前面配置Log4j时设置了日志输出级别:

当时设置了日志输出级别为debug,那么输出时只会输出日志级别高于等于debug的日志信息到控制台;为了更直观的看到效果,我们先把日志级别设置到info:

再次执行测试示例:

public class log {
 
    public static void main(String[] args) {
        //获取日志记录器
        Logger logger = Logger.getLogger(log.class);
        
        //记录debug日志信息
        logger.debug("这是debug级别的信息");
        
        //记录info日志信息
        logger.info("这是info级别的信息");
        
        //记录error日志信息
        logger.error("这是error级别的信息");
    }
}

控制台结果:

可以看到debug级别的日志信息没有输出,因为它的级别低于我们设置的日志输出级别info。

标签:输出,入门,Log4j,log4j,日志,级别,logger
From: https://www.cnblogs.com/xy0713/p/17832777.html

相关文章

  • log4j配置日志文件
    配置log4j日志:1、在项目目录下创建 log4j.properties 文件2、复制以下代码:#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码log4j.rootLogger=DEBUG,console,file#控制台输出的相关设置log4j.appender.console=org.apache.l......
  • C语言程序设计入门教程4
    1define#定义常量和宏(1)#define定义的标识符常量(eg:MAX=100)(2)define定义宏--宏:带参数eg:比较俩数大小用函数方式表示intMax(intx,inty)//定义函数方式{if(x>y) returnx; else returny;}用宏表示//定义MAX(x,y)=(x>y?x:y)#defineMAX(x,y)(x>y?x:y)//定义MA......
  • 数据库操作入门:PyMongo 和 MongoDB 的基本用法
    MongoDBMongoDB是一种流行的NoSQL数据库,它将数据存储在类似JSON的文档中,使数据库非常灵活和可扩展PyMongoPython需要一个MongoDB驱动程序来访问MongoDB数据库。在本教程中,我们将使用MongoDB驱动程序"PyMongo"。建议使用PIP来安装"PyMongo",确保您的Python环境已安装PIP。在命......
  • 【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header
    问题描述在APIMGateway日志中,对于发送到APIMHost的请求,只记录了一些常规的URL,Status,Time,IP等信息。关于请求Header,Body中的信息,因为隐私保护的原因,默认没有记录。[Info]2023-11-16T06:19:28.482[GatewayLogs],isRequestSuccess:True,totalTime:2196,category:......
  • Spring Cloud 入门总结
    首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟。总体架构什么是Springcloud构建分布式系统不需要复杂和容易出错。SpringCloud为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、......
  • loki日志http请求过大的报错
    错误现象日志平台使用的是Loki+Promtail组合,这边有个服务日志量很大。当我使用Grafana请求这个pod的服务日志时,grafana显示timeout或504报错。故障排查(1)调整Grafana的超时设置具体设置可参考Grafana从Loki查询大量日志时超时问题,我也尝试通过调整grafna-->数据源-->L......
  • docker查看镜像日志
    在Docker中,可以使用dockerlogs命令来查看容器的日志,而不是直接查看镜像的日志。镜像是一个静态的文件,而容器是一个运行中的实例,它基于镜像创建而来,并且可以产生日志。以下是查看容器日志的基本语法:dockerlogs[OPTIONS]CONTAINER其中:OPTIONS包括一些选项,例如-f表示跟随......
  • springcloud教程 -- 快速搭建入门级demo
    废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片here] 生产者:提供服务消费者:消费服务服务注册/发现中心:服务注册,发现,监控所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server) ****************......
  • Halcon、HDevelop快速入门
    ​HDevelop基础一HDevelop概述    HDevelop是一款机器视觉的集成开发环境。下面将对HDevelop的界面内容做一下简单的介绍。界面介绍打开HDevelop,将看到以下画面。     如上图所示,打开HDevelop后可以看到4个窗口:图形窗口,算子窗口,变量窗口,程序窗口。其中......
  • vuejs3.0 从入门到精通——Pinia——定义Store
    定义Store Store是用defineStore()定义的,它的第一个参数要求是一个独一无二的名字:import{defineStore}from'pinia'//你可以对`defineStore()`的返回值进行任意命名,但最好使用store的名字,同时以`use`开头且以`Store`结尾。(比如`useUserStore`,`useCartStore......