Log4j总结详细讲解
Log4j是Apache的一个日志项目,说得通俗易懂点Log4j就是做日志的,简单示范一下怎么使用的。
简答的示范:
记录登录成功了
logger.info("登录成功");
出错了
logger.warn('代码报错了balabalabala')
使用的时候就是这么简单
那我们一起走进Log4j这门技术吧
首先呢,log4j需要一个配置文件,下面以我的为示范
log4j.properties文件:
指定根日志器记录debug级别及以上的日志,并预定义了控制台日志器、天日志器(隔一定时间一个日志文件),也就是一个在控制台输出日志一个,隔一段时间存一个日志文件把日志放在里面
log4j.rootLogger=DEBUG, Console ,DailyRollingFile
下面这个是控制台日志记录器的详细配置
#Console (控制台)
log4j.appender.Console=org.apache.log4j.ConsoleAppender #通俗理解:我们定义的日志器console=阿帕奇里的控制台日志器
log4j.appender.Console.layout=org.apache.log4j.PatternLayout #通俗理解:我们的日志器的布局=阿帕奇的格式化布局
log4j.appender.Console.layout.ConversionPattern=[ %p ] %d{yyyy-MM-dd HH:mm:ss}[ %l: used %r ms] %n %m%n #通俗理解:我们的日志器的布局的格式设置为=巴拉巴拉(参考下面的资料和这个示范产生的日志去理解,是利用占位符的思想做的) 比如按照这个配置调用logger.info("我是日志,记录了XXX") 那么会输出的是
[ INFO ] 2020-01-17 19:26:57[ cn.freeprogramming.fpa.controler.MemberController.login(MemberController.java:160): used 86495337 ms] 我是日志,记录了XXX
# LOg4j里的占位符资料
#%m:输出代码中指定的消息
#%p:输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL
#%r:输出自应用启动到输出该 log 信息耗费的毫秒数
#%c:输出所属的类目,通常就是所在类的全名
#%t:输出产生该日志事件的线程名
#%n:输出一个回车换行符,Windows 平台为 /r/n,Unix 平台为 /n
#%d:输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28,921
#%l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
#DailyRollingFile(每天一个日志文件)这个是我想定义的每天一个日志文件的日志器
log4j.appender.DailyRollingFile = org.apache.log4j.DailyRollingFileAppender #同理不讲
log4j.appender.DailyRollingFile.File = C://FPALog/FPADailyRollingFile.log #设置日志文件的位置
log4j.appender.DailyRollingFile.layout = org.apache.log4j.PatternLayout #同理
log4j.appender.DailyRollingFile.layout.ConversionPattern =[ %p ] %d{yyyy-MM-dd HH:mm:ss}[ %l: used %r ms] %n %m%n #同理
log4j.appender.DailyRollingFile.DatePattern=yyyy-MM-dd'.log' #这个指定了生成历史日志的文件名格式=上面的文件在后面加yyyy-mm-dd'.log',
#比如上面的文件是FPADailyRollingFile.log,那么比如今天是2020年1月16日,到了明天,那么历史日志就会存在FPADailyRollingFile.log2020-01-16.log,可以参照我下面的截图理解
log4j.appender.DailyRollingFile.encoding=UTF-8 #不解释
log4j.appender.DailyRollingFile.Threshold=info #info及以上的日志才记录
上面是我的案例,理解了之后再去看Log4j的资料就会容易理解很多,一开始我搞了好久都没理解,最后通过试验来理解了log4j
推荐一个博客Log4j-简书
----------------------------------------------------------------------------------------------------------------
常用的附加器实现类
- org.apache.log4j.ConsoleAppender:日志输出到控制台
- org.apache.log4j.FileAppender:日志输出到文件
- org.apache.log4j.RollingFileAppender:当日志文件大小到达指定尺寸的时候将产生一个新的日志文件
- org.apache.log4j.DailyRollingFileAppender:每天产生一个日志文件
ConsoleAppender:控制台输出日志
FileAppender:一直输出到一个文件(一直追加)
RollingFileAppender:按照设置(文件最大值,文件最大数量)去生成日志,一旦文件达到一定大小就创建一个新的日志文件去存,最多有多少个日志文件,一旦超过就把前面的覆盖掉
DailyRollingFileAppender:定时产生日志文件,把历史日志按照格式产生
------------------------------------------------------------------------------------------------------------------------------
常用的布局
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
--------------------------------------------------------------------------------------------------------------------------------
到此你已经理解了Log4j就是有四种常用的日志器,然后我们可以自己设置日志的布局、输出格式、怎么输出。
那么我们可以开始讲怎么使用了(使用SpringBoot2.0做web项目为例)
第一步:在resources目录下创建一个log4j.properties
第二步:按照你的需求编写好这个配置文件
第三步:在maven里导入或者自己下jar包导入
<!-- log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
第四步:代码里使用
导包
import org.apache.log4j.Logger;//导包
创建logger代码
Logger logger=Logger.getLogger(Test.class)//调用静态方法getLogger(),传入一个类
如果你使用Spring进行管理
那么就创建一个配置文件,来对这个Bean做注册
import org.apache.log4j.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Log4jConfig {
@Bean
public Logger logger()
{
return Logger.getLogger(Test.class);
}
}
将这个Bean注册好之后那么你使用的时候就是如下这样(依赖注入),在controller成员变量里:
@Autowired
private Logger logger;
然后就可以痛快的使用logger进行log了
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039765
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~