首页 > 其他分享 >常见的日志框架及Logback日志框架的使用

常见的日志框架及Logback日志框架的使用

时间:2023-11-16 22:22:39浏览次数:36  
标签:输出 框架 记录 Logback 日志 Log4j2 Log4j

什么是日志

日志是一种记录系统运行时信息的方式,这些信息可以包括程序的状态、错误消息、警告、调试信息等

日志的作用

1. 调试和故障排除
当代码出现Bug时,可以通过查看日志,了解程序正在执行过程中的各个步骤和状态,可快速定位和修复问题。
2. 监控和性能分析
用于监控应用程序的运行状况和性能。可以记录关键指标,如响应时间、内存使用情况、数据库查询次数等,通过这些日志数据分析,可以及时发现潜在的性能问题,并采取措施来改进应用程序的性能
3. 了解用户行为
如果应用程序需要收集用户数据,可以记录用户的行为、偏好和操作,以便更好地了解他们的需求,改进用户体验,并做出针对性的改进。
4. 安全性
通过记录安全事件和潜在的风险,可以更好的保护应用程序和用户数据。

日志级别

TRACE(跟踪日志)
最低级别的日志记录,用于输出最详细的调试信息,通常用于开发调试目的。在生产环境中,应该关闭TRACE级别的日志记录,以避免输出过多无用信息。
DEBUG(调试日志)
用于输出程序中的一些调试信息,通常用于开发过程中。像trace一样,在生产环境中应该关闭DEBUG级别的日志记录。
INFO(信息日志)
用于输出程序正常运行时的一些关键信息,比如程序的启动、运行日志等。通常在生产环境中开启INFO级别的日志记录。
WARN(警告日志)
用于输出一些警告信息,提示程序可能出现一些异常或错误。在应用程序中,WARN级别的日志记录通常用于记录一些非致命的异常信息,以便能够及时发现并处理这些问题。
ERROR(错误日志)
用于输出程序运行时的一些错误信息,通常表示程序出现了一些不可预料的错误。在应用程序中,ERROR级别通常用于记录一些致命性异常信息,以便能够及时发现并处理。
FATAL(致命日志)
最高级别的日志记录,表示程序出现致命错误或异常,即不可恢复的错误。

如何写日志

选择恰当的日志级别
打印有用的信息
注意日志格式
避免泄露敏感信息(如密码、API密钥或个人数据)

使用System.out.println打印日志的不足之处

  1. 大量的IO操作,对系统性能产生比较大的消耗。
  2. 它是一个同步操作,打印日志时会阻碍系统正常的业务处理。
  3. 控制台输出,无法保存日志,不方便运维事后排查问题。
  4. 无法控制输出。(没有日志打印开关)

常见的日志框架

Log4j
Log4j是最早流行的日志框架之一。它由Ceki Gülcü开发,并后来由Apache软件基金会接
管。Log4j 提供了灵活的配置选项、多种输出目的地、日志级别和分层日志体系。尽管Log4j 1在其时代
取得了巨大的成功,但在性能和某些功能方面存在限制,因此后来演化为Log4j2
LogBack
Logback 是Ceki Gülcü开发的日志框架,他也是Log4j的作者。Logback 是Log4j 的后续版本,旨在提供更高性能、更灵活的配置和现代化的日志解决方案。Logback 支持异步日志记录、多种输出格式、灵活的配置以及与SLF4J紧密集成
SLF4J
严格来说,SLF4J 并不算一个框架,而是Ceki Gülcü开发的一个日志门面接口。它为Java应用程序提供了统一的日志抽象,使开发人员可以使用一致的API进行日志记录,而不需要直接依赖于特定的日志实现。SLF4J 可以与多种底层日志框架(如Logback、Log4j2、java.util.logging等)结合使用。使用 SLF4J 应用程序就可以在不同的日志框架之间进行灵活配置和切换,同时还可以获得更好的性能表现
image
SLF4J使用:
<!-- slf4j 依赖包--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency>
Log4j2(Log4j2与LogBack:从性能方面 Log4j2 与 Logback 表现都很优秀,但 Log4j2 晚出来几年,有后发优势,性能会比 Logback 更好)
Log4j2 是 Apache 软件基金会开发的 Log4j 的下一代版本。它引入了许多新特性,如异步日志记录、插件支持、丰富的过滤器等,旨在提供更好的性能和灵活性。Log4j2 在设计上考虑了 Log4j 的局限性,并且支持多种配置方式

日志框架三大组件

记录器(Loggers)
按照布局中指定的格式把日志信息写入一个或多个输出源
输出源(Appenders)
日志输出可以是控制台、文本文件、XML文件或Socket 等
布局(Logouts)
所有集成Layout类的类定义了日志信息的布局,所谓布局就是日志信息的格式

LogBack在SpringBoot中的运用:

导入依赖:
<dependencies>
<!-- slf4j 依赖包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<!-- lombok 依赖包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
在工程的resources目录下创建logback.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<!-- 定义日志变量-->
<property name="log.path" value="logs.log/" />
<!--日志输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level
%logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!-- 日志输出到文件 -->
<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
</pattern>
</encoder>
</appender>
<!-- 根日志输出级别-->
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- 指定包日志输出级别-->
<logger name="com.binge" level="debug" />
</configuration>
创建文件的打印日志方式一(不推荐)
package com.hpc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogDemo {
	//获取日志记录器对象
	private static final Logger log = LoggerFactory.getLogger(LogDemo.class);
	public static void main(String[] args) {
		log.info("这是一条日志信息");
	}
}
创建文件的打印日志方式二(推荐使用)---使用注解
package com.hpc;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LogDemo2 {
	public static void main(String[] args) {
		log.info("这是一条日志信息");
	}
}

标签:输出,框架,记录,Logback,日志,Log4j2,Log4j
From: https://www.cnblogs.com/hpc02/p/17837421.html

相关文章

  • Fastapi框架:Starlette,Pydantic 与 FastAPI 框架是什么关系?
    【一】介绍Starlette是个什么项目;IDE开发时Python3.5+版本的"typehints"的好处:简短、直观和标准的Python类型声明;介绍Pydantic包,FastAPI项目的开发为什么要使用Pydantic【二】Starlette【1】介绍Starlette是一种轻量级的ASGI框架/工具包,是构建高性能A......
  • Fastapi框架:引入
    【一】为什么新秀FastAPI火成这样介绍FastAPI有哪些突出特点,浏览官网文档中的Feasures一览【二】FastAPI的突出特点性能优越开发效率提升200%~300%直接减少约40%的人为BUG直观易学易用经简代码/代码重复率低自带API交互文档,开发成果随时交付API开发标准化......
  • 【grep】linux 下日志查看的筛选技巧
    查看关键字前后20个字符grep-oP'.{0,20}deviceName.{0,20}'data.loggrep-oE'.{0,20}deviceName.{0,20}'data.log(在macos下,不认识-P参数)只显示一行日志的第1~20个字符moredata.log|cut-c1-20......
  • 微软发布.NET云原生开发框架——.NET Aspire
    众所周知,微软于2023-11-14日发布了.NET8的正式版。伴随着这个重要.NET版本的发布,微软也发布了一个全新的.NET云原生开发框架——.NETAspire。.NETAspire提供了如下3个方面的能力,来帮助我们使用.NET开发分层、云就绪的可观测、本地与生产环境一致的分布式云原生应用程序:微服......
  • Mybatis和其他主流框架的整合使用
    Mybatis简介MyBatis历史MyBatis最初是Apache的一个开源项目iBatis,2010年6月这个项目由ApacheSoftwareFoundation迁移到了GoogleCode。随着开发团队转投GoogleCode旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到GithubiBatis一词来源于“internet”和“abat......
  • Log4Delphi日志学习
    转载请注明出处:https://www.cnblogs.com/coder163/p/9309717.htmlhttps://log4delphi.sourceforge.net/tutorial.htmlLog4D下载:官网地址导入Delphi:Tool-->Options-->EnvironmentOptions--->DelphiOptions--Library-->Librarypath 三个目录使用载入配置文件菜单--->P......
  • 修改/etc/docker/daemon.json中的log-opts配置发现无效 docker 限制日志大小
    https://colobu.com/2018/10/22/no-space-left-on-device-for-docker/在/etc/docker/daemon.json中修改或添加log-opts参数"log-driver":"json-file","log-opts":{"max-size":"50m","max-file":"3"}网上很......
  • nginx 日志备份
    ·1、编辑脚本backup.sh#!/bin/bash#进入备份目录cd/data/nginx/logs/#设置备份名字newAccessLog="access`date+%Y-%m-%d`.log"newErrorLog="error`date+%Y-%m-%d`.log"#拷贝日志文件,已经在配置文件设置日志文件存放在:/data/nginx/logs/下,如果没有修改日志路径的一般在:/u......
  • iframe本身就不是动态语言,样式和脚本都需要额外导入.iFrame的本质是内联框架的缩写,它
    以下哪个选项的描述是错误的Aiframe是用来在网页中插入第三方页面,早期的页面使用iframe主要是用于导航栏这种很多页面都相同的部分,这样在切换页面的时候避免重复下载Biframe的创建比一般的DOM元素慢了1-2个数量级Ciframe标签会阻塞页面的的加载Diframe本质是动态语言的Inc......
  • nginx 日志查询
    转载:https://www.jianshu.com/p/f105fb19dd0b1、根据访问IP统计UVawk'{print$1}'access.log|sort|uniq-c|wc-l2、统计访问URL统计PVawk'{print$7}'access.log|wc-l3、查询访问最频繁的URLawk'{print$7}'access.log|sort|uniq-c|sort-n-k1-r|m......