User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   Java   ›   Java Notes   ›   正文
Java Notes

log4j—日志框架使用

2020-03-31 22:06:02
1113  0 0
参考目录 隐藏
1) 什么是日志框架
2) log4j配置说明
3) 1、配置Logger记录器
4) 2、配置Appender输出目的地
5) 3、配置layout日志布局
6) 这里有一个日志的格式,也就是 ConversionPattern,那么这个值到底该如何配置
7) 实例:
8) 1.添加log4j相关jar包
9) 2.log4j.properties配置
10) 3.测试类
11) 控制台输出结果
12) 日志文件输出结果

阅读完需:约 7 分钟

什么是日志框架

我们在系统中对于记录日志的需求并不单纯。首先,我们希望日志要能持久化到磁盘,最基本的就是要能够保存到文件中;其次,我们希望在开发和生产环境中记录的日志并不相同,明显开发环境的日志记录会更多方便调试,但放到生产环境下大量的日志很容易会撑爆服务器,因此在生产环境我们希望只记录重要信息。

基于不单纯的目的,System.out.println是直接不能满足我们的要求,因此抛弃它,选择功能更强的日志框架。

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

记录日志的框架并不仅仅只有log4j,比较有名的还有logback等,现在比较火的SpringBoot默认集成的日志就是logback。不管哪种日志框架,一般都能够实现日志的持久化功能。

log4j配置说明

log4j包含三个组件,分别是 Logger(记录器)、Appender(输出目的地)、Layout(日志布局)。可分别简单理解为”日志类别“、”日志要输出的地方“和”日志以何种形式输出“。

1、配置Logger记录器

log4j.rootLogger = [ level ] , appenderName, appenderName, …

level表示日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者你定义的级别。

  • OFF   最高日志级别,即关闭日志
  • FATAL  导致应用程序退出的错误
  • ERROR     运行发生错误,但仍不影响系统(程序)继续运行
  • WARN    警告,即潜在的错误情形
  • INFO   一般用在粗粒度级别上,记录程序全程执行过程,强调应用程序的运行全程
  • DEBUG   一般用于细粒度级别上,对调试应用程序非常有帮助
  • ALL    最低日志级别,记录所有级别的日志

Log4j建议使用四个级别,优先级从高到低分别是ERROR > WARN > INFO > DEBUG。

通过在这里定义的级别,你可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

2、配置Appender输出目的地

输出目的地类型:

org.apache.log4j.ConsoleAppender(控制台),  
org.apache.log4j.FileAppender(文件),  
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),  
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),  
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3、配置layout日志布局

org.apache.log4j.HTMLLayout(HTML表格形式)
org.apache.log4j.SimpleLayout(简单格式的日志,只包括日志信息的级别和指定的信息字符串 ,如:DEBUG - Hello)
org.apache.log4j.TTCCLayout(日志的格式包括日志产生的时间、线程、类别等等信息)
org.apache.log4j.PatternLayout(灵活地自定义日志格式)

这里有一个日志的格式,也就是 ConversionPattern,那么这个值到底该如何配置

 %p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
 %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
 %r:输出自应用程序启动到输出该log信息耗费的毫秒数。
 %t:输出产生该日志事件的线程名。
 %l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
 %c:输出日志信息所属的类目,通常就是所在类的全名。
 %M:输出产生日志信息的方法名。
 %F:输出日志消息产生时所在的文件名称。
 %L::输出代码中的行号。
 %m::输出代码中指定的具体日志信息。
 %n:输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"。
 %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
 %%:输出一个"%"字符。
 另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
 %20c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
 %-20c:"-"号表示左对齐。
 %.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

实例:

1.添加log4j相关jar包

<!--添加log4j相关jar包-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>

2.log4j.properties配置

参照一:

参照二:

参照三:

#日志配置
log4j.rootLogger = DEBUG,stdout,file
 
#控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
 
#所有文件输出
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = D:/logs/log.log
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.name = fileLogDemo
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c {Num}] [%l] [ %t:%r ] - [ %p ]  %m%n
log4j.appender.file.append = true

3.测试类

import org.apache.log4j.Logger;

public class log4jTest {
    //获取日志记录器Logger,名字为本类类名
    private static Logger logger = Logger.getLogger(log4jTest.class);
  
    public static void main(String[] args) {
        for(int i=0;i<3;i++){
            // 记录debug级别的信息
            logger.debug("log4j日志输出:This is debug message.");
            // 记录info级别的信息
            logger.info("log4j日志输出:This is info message.");
            // 记录error级别的信息
            logger.error("log4j日志输出:This is error message.");
        }
    }
}

控制台输出结果

日志文件输出结果

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

0 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 294点赞 594547浏览

随机文章
SpringSecurity—new 出来的对象一样也可以被 Spring 容器管理
4年前
SpringMVC—Web九大组件之ViewResolver
3年前
Spring笔记3.1-bean的注意事项
5年前
Feign、Ribbon、Hystrix 三者关系
5年前
Kotlin-表达式—运算符与中缀表达式(十三)
4年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1927 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 594547 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付