Log4j Log4j2

前言

        今天抽时间来把这个日志框架学学,毕竟经常用,虽然不用自己写,但是书到用时方恨少,技多不压身。而且最近我的 GUI 软件中有一个关于日志问题的希望学完能够感觉解决掉。

Log4j & Log4j2

        Log4j2 是 Log4j 的升级版,2015年5月,Apache 宣布停止 log4j 的更新,最终的版本定格在了 1.2.17。

1、Log4j

        Log4j 有三大组件:Loggers(记录器)、Appenders(输出源)和 Layouts(布局)。可以简单理解为

  • Loggers:日志的类型,比如 DEBUG(调试信息)、INFO、WARN、ERROR、FATAL
  • Appenders:日志输出到哪里,比如控制台,甚至可以是 GUI 组件,比如 JavaFX、Swing 的 TextArea ,这也是我重点希望了解的
  • 和 Layouts:日志以怎样的形式输出,比如 ${yyyy-MM-dd HH:mm:ss} 

1.1、Loggers

        在设置日志输出的时候,会设置一个日志的输出级别,只有大于等于这个级别的日志才会输出。

        DEBUG < INFO < WARN < ERROR < FATAL

1.2、Appenders

        日志的输出源,可以是控制台(Console),可以是文件(File),或者是我们 Java Swing 和 JavaFX 的 TextArea 这种 GUI 控件中。        

        可以根据文件的大小产生新的文件,可以以流的形式发送到其它地方等。

常用的类:

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

        基本上可以满足我们日常的需求,如果我们的需求比较特殊,比如把日志输出到 JavaFX 的 TextArea 中,输出到 org.fxmisc.richtext 的 CodeArea 中,那么我们就可以自定义一个 Appender 类实现 AppenderSkeleton 接口。AppenderSkeleton 接口定义了一系列记录日志的方法,我们按照自己的需求实现这些方法即可。

1.3、Layouts

        用户可以根据自己的喜好格式化自己的日志输出,Layouts 提供了四种日志的输出样式,比如根据 HTML 样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。

常用的类如下:

  • org.apache.log4j.HTMLLayout (以 HTML 表格形式布局 )
  • org.apache.log4j.PartternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

1.4、Log4j 的使用

        log4j 的使用依赖配置文件。log4j 支持两种配置文件的形式,一种是 XML 格式、一种是 .properties 文件。

1.4.1、导包
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
1.4.2、创建配置文件

日志配置文件:log4j.properties 或者 logback.xml。

普通 Java 项目放到 src 同级目录下,maven 项目下放到 src/main/resources/ 目录下

# 指定日志输出级别,输出源
log4j.rootLogger=INFO,textArea,FILE# 输出到 GUI 组件
log4j.appender.textArea=org.apache.log4j.ConsoleAppender
log4j.appender.textArea.layout=org.apache.log4j.PatternLayout
log4j.appender.textArea.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %p ]  %m%n# 输出到文件
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=./logs/app.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
1.4.3、使用
class Test{// 一般都是定义为静态全局变量private final static Logger logger = Logger.getLogger(Test.class);public static void main(String[] args){// 需要输出日志的时候直接调用logger.info("这是一段 info 级别的日志");logger.error("这里一段 error 级别的日志");}
}
 1.4.4、配置文件详解

示例

log4j.rootLogger=INFO,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionParttern=%-4r %-5p [%t] %37c %3x - %m%n
1)配置根目录的语法
log4j.rootLogger=[ level ] , appenderName , appenderName ...

        其中,level 是优先级,分为 OFF、FATTAL、ERROR、WARN、INFO 、DEBUG、ALL 或者自定义方级别。Log4j 建议只使用四个级别,优先级从高到低地刺是 ERROR、WARN、INFO 、DEBUG。如果在配置文件指定了 INFO 级别,那么所有 DEBUG 的信息将不被打印出来。

        appenderName 就是指定日志信息输出到哪个地方,这个名字是我们自己起的。

2)配置日志信息输出源 Appender
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.optionl = value1
...
log4j.appender.appenderName.option = valueN

其中,Log4j 提供方 appender 有以下几种:

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

当然也可以是我们自定义的 appender ,比如我的下一篇文章中使用的 com.lyh.util.MyAppender。

不同的 appender 有不同的配置选项:

(1)ConsoleAppender 选项

  • Threshold=WARN (指定日志消息的输出最低层次)
  • ImmediateFlush=true (默认为true,意味着所有的消息被立即输出)
  • Target=System.err (默认下为 System.out,指定输出控制台)

(2)FileAppender 选项

  • Threshold=WARN (指定日志消息的输出最低层次)
  • ImmediateFlush=true (默认为true,意味着所有的消息被立即输出)
  • File=mylog.txt (指定消息输出到 mylog.txt)
  • Append=false (默认是true,即将消息追加到指定文件,false指将消息覆盖指定的文件内容)
  • DataPattern='.'yyyy-ww (每周滚动一次文件,即每周产生一个新的文件)

也可以设置为每月、周、天、时和分:

  1. '.'yyyy-MM (每月)
  2. '.'yyyy-ww (每周)
  3. '.'yyyy-MM-dd (每天)
  4. '.'yyyy-MM-dd-a (每天两次)
  5. '.'yyyy-MM-dd-HH (每小时)
  6. '.'yyyy-MM-dd-HH-mm (每分钟)

(4)RollingFileAppender 选项

  • Threshold=WARN (指定日志消息的输出最低层次)
  • ImmediateFlush=true (默认为true,意味着所有的消息被立即输出)
  • File=mylog.txt (指定消息输出到 mylog.txt)
  • Append=false (默认是true,即将消息追加到指定文件,false指将消息覆盖指定的文件内容)
  • MaxFileSize=100KB(后缀可以是 KB,MB 或者 GB,当日志大小达到该大小时,会自动滚动,将原来的内容移动到 mylog.1 文件)
  • MaxBackupIndex=2 (指定可以产生的滚动文件的最大数)
3)配置日志信息的布局
  • org.apache.log4j.HTMLLayout (以 HTML 表格形式布局 )
  • org.apache.log4j.PartternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

了解即可

4)输出格式设置

在配置文件中通过 log4j.appender.A1.layout.ConversionPattern 设置日志输出格式。

参数:

  • %p:输出日志信心优先级,也就是 DEBUG,IOFO,WARN,ERROR,FATAL
  • %d:输出日志的时间或日期,默认格式为 ISO8601 ,也可以指定格式,比如 %d{yyyy MM dd HH:mm:ss,SSS} ,输出 2024年01月29日19:20:15,200
  • %r:输出自应用启动到输出该 log 信息消耗的毫秒数
  • %c:输出日志信息所属类目,通常就是所在类的全名
  • %t:输出产生该日志事件的线程名
  • %l:输出日志事件的发生位置,相当于 %C.%M(%F:%L) 的组合,包括类目名、发生的线程,已经在代码中的行数。比如 Test.main(Test.java:10)
  • %x:输出和当前线程相关联的 NDC(嵌套诊断环境),尤其用到像 Java servlets 这样的多客户线程的应用中。
  • %%:输出 %
  • %F:输出日志消息产生时所在的文件名称
  • %L:输出代码中的行符
  • %m:输出代码中指定的消息,产生的日志具体信息
  • %n:输出一个回车换行符,windows平台为 "\r\n",unix平台为 "\n" 

2、Log4j2

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/655924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从理论到实践,如何用TRIZ破解研发中的技术难题?

自科技飞速发展以来&#xff0c;技术问题层出不穷&#xff0c;成为许多企业和研究机构研发过程中难以突破的瓶颈。然而&#xff0c;有一个强大的工具&#xff0c;能帮助我们解决这些问题&#xff0c;那就是TRIZ。 一、TRIZ是什么 TRIZ&#xff0c;全称是"发明问题解决理…

【Java程序设计】【C00178】基于SSM的NBA球队管理系统(论文+PPT)

基于SSM的NBA球队管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的NBA球队管理系统 本系统分为前台用户和后台管理员2个功能模块。 前台用户&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首页…

AMC系列可编程智能电测仪表功能以及选型

功能&#xff1a; AMC 系列可编程智能电测仪表是针对电力系统、工矿企业、公用设施、智能大厦的电力监控需求而设计的智能仪表&#xff0c;它集成电力参数的测量(如单相或者三相的电流、电压、有功功率、无功功率、视在功率、频率、功率因数)以及电能监测和考核管理。采用高亮…

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA

20240130在ubuntu20.04.6下给GTX1080安装最新的驱动和CUDA 2024/1/30 12:27 缘起&#xff0c;为了在ubuntu20.4.6下使用whisper&#xff0c;以前用的是GTX1080M&#xff0c;装了535的驱动。 现在在PDD拼多多上了入手了一张二手的GTX1080&#xff0c;需要将安装最新的545的驱动程…

精细化客户管理,这篇文章教会您!

如何做好客户精细化管理? 对于企业来说&#xff0c;不止要做到客户拉新&#xff0c;同时&#xff0c;也要做到让新客户变成老客户&#xff0c;让客户多次高频次购买。否则客户如果只是来购买一次&#xff0c;客户回购率低&#xff0c;长期以往&#xff0c;那企业的生存资本&a…

kubernetes-快速部署一套k8s集群

1、前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式&#xff1a; kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 二进制包 从github下载发行…

《CSS3》田字网格背景(外实线内虚线)的实现

一、前言 记录一些有趣的CSS实现方式&#xff0c;总所周知&#xff0c;当一段效果可以通过CSS实现的时候&#xff0c;绝不使用Javascript来实现&#xff0c;因此记录一些有意思的CSS效果&#xff0c;一来是方便自己学习&#xff0c;另一来是方便以后在需要使用到的时候能快速找…

ubuntu18.04更换软件源

一、步骤 1. 备份原软件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup2. 修改软件源(源从下面找) sudo gedit /etc/apt/sources.list3. 更新软件源 sudo apt update二、现有软件源 1.官方自带源 #deb cdrom:[Ubuntu 18.04.6 LTS _Bionic Beaver_ - Rel…

async 与 awite

async 和 await 是 JavaScript 中用于处理异步操作的关键字。 async 函数是一个返回 Promise 对象的函数&#xff0c;它在函数体内部使用 await 来等待 Promise 对象执行结果。使用 async 函数可以让代码更加简洁易懂&#xff0c;避免了回调函数嵌套的问题。 例如&#xff1…

基于YOLOv8深度学习的水稻叶片病害智能诊断系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Vue3使用vant检索组件van-search的坑

当清空按钮与检索按钮同时居右时&#xff0c;点击clear清空按钮事件时会同时触发click-right-icon事件,如下配置&#xff1a; <van-searchv-model"form.search"show-actionshape"round"left-icon""right-icon"search"placeholder&…

Python(19)Excel表格操作Ⅰ

目录 导包 读取EXCEL文件 1、获取worksheet名称 2、设定当前工作表 3、输出目标单元格数据 4、工作表.rows&#xff08;行&#xff09; 5、工作表.columns&#xff08;列&#xff09; 小结 导包 要想使用 python 操作 Excel 文件&#xff0c;应当导入 openpyxl 包。在…

03:华为云管理|云主机管理|云项目实战

华为云管理&#xff5c;云主机管理&#xff5c;云项目实战 安全组配置部署跳板机配置yum源&#xff0c;安装软件包优化系统服务安装配置ansible管理主机 模版镜像配置配置yum源&#xff0c;安装软件包优化系统 网站云平台部署实战华为云的负载均衡 安全组配置 设置安全组 云…

[GO]使用 CSTD(Code Self Test Development) 技术方式处理 error

背景知识 在以前使用 VC 开发代码时&#xff0c;微软提供了 ASSERT 和 VERIFY 宏&#xff0c;其在调试环境下能比较方便的发现问题。我基于此设计了 CSTD(Code Self Test Development) 和 API_VERIFY , COM_VERIFY 等宏帮助我开发了几乎 0bug 的 C/C 代码.在使用 go 语言开发时…

数据结构--树

一、树的基本术语 结点:树中的一个独立单元 结点的度:结点下分支的个数 树的度:树中所有结点中度的最大值 非终端结点:度不为0的结点 双亲和孩子:结点下的子树称为该结点的孩子.相应地,该结点称为孩子的双亲 兄弟:同一个双亲的孩子之间 祖先:从根到该结点所经分支上的所…

[NOIP2010 普及组] 接水问题

信息学奥赛一本通1950&#xff1a;【10NOIP普及组】接水问题 洛谷P1190 [NOIP2010 普及组] 接水问题 题解 【题目描述】 学校里有一个水房&#xff0c;水房里一共装有m个龙头可供同学们打开水&#xff0c;每个龙头每秒钟的供水量相等&#xff0c;均为1。 现在有n名同学准备接水…

猫头虎分享:Go语言开发资源库大全指南 - 从新手到专家

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!《100天精通Golang(基础入门篇)》 — 踏入Go…

【拦截器——详细介绍】

拦截器——详细介绍 1. 介绍2. 类型3. 工作流程4. 作用5. 实现方式6. 配置使用7. 注意事项 1. 介绍 拦截器&#xff08;Interceptor&#xff09;是一种在软件设计中常用的设计模式&#xff0c;通常用于在方法的执行前后进行额外的处理&#xff0c;比如日志记录、鉴权、缓存等。…

【Docker】docker安装jenkins

一、执行命令 下载jenkins镜像 #下载jenkins 镜像 docker pull jenkins/jenkins:latest-jdk8 启动jenkins容器 #启动jenkins 容器 #挂载 如果不挂载 每次启动jenkins的配置、插件、用户等信息都没有了 #jenkins_home 包含jenkins配置、插件、用户等信息。 要指定必须配置用…

【AI视野·今日NLP 自然语言处理论文速览 第七十六期】Fri, 12 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 12 Jan 2024 Totally 60 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Axis Tour: Word Tour Determines the Order of Axes in ICA-transformed Embeddings Authors Hiroaki Yamagi…