百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

log4j日志处理 log4j日志输出格式

yuyutoo 2024-10-16 15:41 1 浏览 0 评论

什么是Log4j

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

log4j原理

Log4j设计实现为分层结构,每一层都提供了不同的类,实现不同功能的对象执行不同的任务,在实际的使用中可以根据自己的具体需求灵活的进行扩展。不同组件的框架图如下:

由图可以看出,log4j框架核心对象主要有三种:

  • Logger 对象,在程序使用中往往只会接触到这一对象,Logger对象负责获取不同级别日志信息;

  • Layout对象,该层提供用于格式化不同风格的日志信息的对象;

    Appender对象,负责发布日志信息,可以指定将日志信息输出的目的地,可以是控制台终端、文件、数据库、Unix syslog等;

    还有四种辅助对象:

  • Level对象:用于定义日志的级别,这个想必大家都不会陌生,Linux系统中是非常常用的(比如开发内核程序,常常用printk打印日志以此调试程序)。主要有以下几种

  1. off 最高等级,用于关闭所有日志记录。

  2. fatal 指出每个严重的错误事件将会导致应用程序的退出。

  3. error 指出虽然发生错误事件,但仍然不影响系统的继续运行。

  4. warm 表明会出现潜在的错误情形。

  5. info 一般和在粗粒度级别上,强调应用程序的运行全程。

  6. debug 一般用于细粒度级别上,对调试应用程序非常有帮助。

  7. all 最低等级,用于打开所有日志记录。

    Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG,定义一个较低级别的话,会将比其级别高的日志信息全部打印出来;

  • Filter对象:主要用于分析过滤日志信息,判断是否应该记录;

  • ObjectRenderer对象:用于提供不同对象的toString方法;

  • LogManager对象:主要负责Log4j的初始化配置。

Log4J最核心的也就5个类:

  • Logger用于对日志记录行为的抽象,提供记录不同级别日志的接口;

  • Level对日志级别的抽象;

  • LoggingEvent是对一次日志记录过程中所能取到信息的抽象;

  • Appender是对记录日志形式的抽象;

  • Layout是对日志行格式的抽象;

log4j二次开发

Log4j中有org.apache.log4j.FileAppender类,该类实现了将日志文件输出到文件,其有两个子类(更详尽的信息参看http://logging.apache.org/log4j/1.2/apidocs/):

DailyRollingFileAppender:实现了根据时间对日志文件进行切割,主要的成员变量为

private String datePattern = "'.'yyyy-MM-dd"; //按天切割日志文件

RollingFileAppender:实现了根据日志文件的大小对日志文件切割,而且还可以指定日志文件的个数,超过指定个数的日志文件将会被删除。主要是依靠成员变量:

protected long maxFileSize = 10*1024*1024; //默认的日志文件大小protected int maxBackupIndex = 1; //默认的日志文件个数

这些成员变量信息都可以在Log4j的配置文件log4j.properties中重新指定新值。

现在要做的就是将RollingFileAppender和DailyRollingFileAppender类的功能结合起来,保证DailyRollingFileAppender大框架不变的前提下支持maxBackupIndex参数,以及可以实现超过指定日志文件个数的日志文件被删除。

实现步骤

代码中主要使用了java.util包中的集合类和java.io包中的File类。

1.在DailyRollingFileAppender类中添加maxBackupIndex属性;

2.定义了日志文件的后缀是日期格式,如log1.log-2016-10-23-12,使用File类获取目录的日志文件;

3.将文件按日期排序存储在Map集合中(相当于白名单),存储的个数为指定的maxBackupIndex个;

4.遍历日志目录文件,使用集合的comtains方法依次判断是否是白名单中的,不属于的即就是距离现在最远的文件,则调用定义的delete方法实现删除多余的文件;

相关推荐

MySQL5.5+配置主从同步并结合ThinkPHP5设置分布式数据库

前言:本文章是在同处局域网内的两台windows电脑,且MySQL是5.5以上版本下进行的一主多从同步配置,并且使用的是集成环境工具PHPStudy为例。最后就是ThinkPHP5的分布式的连接,读写...

thinkphp5多语言怎么切换(thinkphp5.1视频教程)

thinkphp5多语言进行切换的步骤:第一步,在配置文件中开启多语言配置。第二步,创建多语言目录。相关推荐:《ThinkPHP教程》第三步,编写语言包。视图代码:控制器代码:效果如下:以上就是thi...

基于 ThinkPHP5 + Bootstrap 的后台开发框架 FastAdmin

FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。主要特性基于Auth验证的权限管理系统支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置支持单...

Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示

本文实例讲述了Thinkphp5.0框架实现控制器向视图view赋值及视图view取值操作。分享给大家供大家参考,具体如下:Thinkphp5.0控制器向视图view的赋值方式一(使用fetch()方...

thinkphp5实现简单评论回复功能(php评论回复功能源码下载)

由于之前写评论回复都是使用第三方插件:畅言所以也就没什么动手,现在证号在开发一个小的项目,所以就自己动手写评论回复,没写过还真不知道评论回复功能听着简单,但仔细研究起来却无法自拔,由于用户量少,所以...

ThinkPHP框架——实现定时任务,定时更新、清理数据

大家好,我是小蜗牛,今天给大家分享一下,如何用ThinkPHP5.1.*版本实现定时任务,例如凌晨12点更新数据、每隔10秒检测过期会员、每隔几分钟发送请求保证ip的活性等本次分享,主要用到一个名为E...

BeyongCms系统基于ThinkPHP5.1框架的轻量级内容管理系统

BeyongCms内容管理系统(简称BeyongCms)BeyongCms系统基于ThinkPHP5.1框架的轻量级内容管理系统,适用于企业Cms,个人站长等,针对移动App、小程序优化;提供完善简...

YimaoAdminv3企业建站系统,使用 thinkphp5.1.27 + mysql 开发

介绍YimaoAdminv3.0.0企业建站系统,使用thinkphp5.1.27+mysql开发。php要求5.6以上版本,推荐使用5.6,7.0,7.1,扩展(curl,...

ThinkAdmin-V5开发笔记(thinkpad做开发)

前言为了快速开发一款小程序管理后台,在众多的php开源后台中,最终选择了基于thinkphp5的,轻量级的thinkadmin系统,进行二次开发。该系统支持php7。文档地址ThinkAdmin-V5...

thinkphp5.0.9预处理导致的sql注入复现与详细分析

复现先搭建thinkphp5.0.9环境...

thinkphp5出现500错误怎么办(thinkphp页面错误)

thinkphp5出现500错误,如下图所示:相关推荐:《ThinkPHP教程》require():open_basedirrestrictionineffect.File(/home/ww...

Thinkphp5.0极速搭建restful风格接口层

下面是基于ThinkPHPV5.0RC4框架,以restful风格完成的新闻查询(get)、新闻增加(post)、新闻修改(put)、新闻删除(delete)等server接口层。1、下载Thin...

基于ThinkPHP5.1.34 LTS开发的快速开发框架DolphinPHP

DophinPHP(海豚PHP)是一个基于ThinkPHP5.1.34LTS开发的一套开源PHP快速开发框架,DophinPHP秉承极简、极速、极致的开发理念,为开发集成了基于数据-角色的权限管理机...

ThinkPHP5.*远程代码执行高危漏洞手工与升级修复解决方法

漏洞描述由于ThinkPHP5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,黑客构造特定的请求,可直接GetWebShell。漏洞评级严重影响版本ThinkPHP5.0系列...

Thinkphp5代码执行学习(thinkphp 教程)

Thinkphp5代码执行学习缓存类RCE版本5.0.0<=ThinkPHP5<=5.0.10Tp框架搭建环境搭建测试payload...

取消回复欢迎 发表评论: