`
ccii
  • 浏览: 56143 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多
一、Log4j基础
1. Log4j简介
  Log4j是Apache的一个开源项目,通过Log4j,我们可以记录程序运行时的出错信息,便于软件开发人员分析错误原因,修正Bug。Log4j也可以充当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。Log4j还可以监视程序运行的情况,周期性的记录到文件中或数据库中,以便日后进行统计分析。

2. Log4j由三种主要的组件组成
  1)Logger组件
    记录器组件负责产生日志,并能够对日志进行分类筛选,控制什么样的日志应该被输出。可以同时定义多个记录器,每个记录器有自己的名字,记录器之间通过名字来表明隶属关系(如记录器a.b是a.b.c的父亲)。在Log4j中有一个根记录器(org.apache.log4j.Logger类)永远存在,且不可以通过名字检索或引用,可以通过它的静态方法getRootLogger()方法得到它,而其他的记录器则通过静态方法getLogger(String name)来实例化。
  2)Appender组件
    在Log4j中,信息通过Appender组件输出到目的地,包括控制台、文件、GUI组件、远程套接字服务器、JMS、NT事件记录器及远程UNIX Syslog守护进程。如下:
      org.apache.log4j.ConsoleAppender(控制台),
      org.apache.log4j.FileAppender(文件),
      org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
      org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
      org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  3)Layout组件
    Layout组件负责格式化输出的日志信息,一个Appender只能有一个Layout。Log4j提供的layout有如下几种:
      org.apache.log4j.HTMLLayout(以HTML表格形式布局),
      org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
      org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息),
      org.apache.log4j.xml.XMLLayout(由一系列中log4j.dtd中定义的<log4j:event>元素组件),
      org.apache.log4j.PatternLayout(可以灵活地指定布局模式,同c语言的printf()一样灵活)

3. 记录器的日志级别
  记录器的日志级别在org.apache.log4j.Level类中定义,一共有5种可能的级别,从低到高依次是DEBUG,INFO,WARN,ERROR和FATAL。如果一个记录器没有指定日志级别,那么它将从最近的一个指定了级别的祖先继承级别。

三、Log4j示例
1. 引入Log4j
  Log4j官方下载地址: http://logging.apache.org/log4j/

2. log4j.properties
### 定义根记录器日志级别  ###
log4j.rootLogger = debug,stdout,file1,file2

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

### 输出到日志文件 ###
log4j.appender.file1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file1.File = logs/log.log
log4j.appender.file1.Append = true
### 输出DEBUG级别以上的日志
log4j.appender.file1.Threshold = DEBUG
log4j.appender.file1.layout = org.apache.log4j.PatternLayout
log4j.appender.file1.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存异常信息到单独文件 ###
log4j.appender.file2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file2.File = logs/error.log
log4j.appender.file2.Append = true
### 只输出ERROR级别以上的日志
log4j.appender.file2.Threshold = ERROR
log4j.appender.file2.layout = org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 


3. 测试
package test;

import org.apache.log4j.Logger;

public class Test {
	private final static Logger logger = Logger.getLogger(Test.class);

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Test Begin!");
		logger.debug(" 1. debug ");
		logger.info(" 2. info ");
		logger.warn(" 3. warn ");
		logger.error(" 4. error ");
		logger.fatal(" 5. fatal ");
	}
}


四、XML文件配置方式
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" configDebug="true">
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %d [%X{track}] [%X{model}] %m [%t][%c:%L]%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="DEBUG"/>
            <param name="AcceptOnMatch" value="true"/>
        </filter>
    </appender>
    <appender name="ERROR" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="datePattern" value="'.'yyyy-MM-dd-HH"/>
        <param name="File" value="logs/error.log"/>
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %d [%X{track}] [%X{model}] %m [%t][%c:%L]%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMax" value="FATAL"/>
            <param name="LevelMin" value="ERROR"/>
        </filter>
    </appender>
    <!-- info.log文件只输出info信息 -->
    <appender name="INFO" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="datePattern" value="'.'yyyy-MM-dd-HH"/>
        <param name="File" value="logs/info.log"/>
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %d [%X{track}] [%X{model}] %m [%t][%c:%L]%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMax" value="INFO"/>
            <param name="LevelMin" value="INFO"/>
        </filter>
    </appender>
    <appender name="WARN" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="datePattern" value="'.'yyyy-MM-dd-HH"/>
        <param name="File" value="logs/warn.log"/>
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %d [%X{track}] [%X{model}] %m [%t][%c:%L]%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMax" value="WARN"/>
            <param name="LevelMin" value="WARN"/>
        </filter>
    </appender>
    <appender name="DEBUG" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="datePattern" value="'.'yyyy-MM-dd-HH"/>
        <param name="File" value="logs/debug.log"/>
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %d [%X{track}] [%X{model}] %m [%t][%c:%L]%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMax" value="DEBUG"/>
            <param name="LevelMin" value="DEBUG"/>
        </filter>
    </appender>
    <root>
        <priority value="DEBUG"/>
        <appender-ref ref="DEBUG"/>
        <appender-ref ref="INFO"/>
        <appender-ref ref="WARN"/>
        <appender-ref ref="ERROR"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</log4j:configuration>

0
3
分享到:
评论

相关推荐

    老生常谈Log4j和Log4j2的区别(推荐)

    Log4j只需要引入一个JAR包,即log4j.jar,而Log4j2则需要引入两个核心JAR包,即log4j-core.jar和log4j-api.jar。大家可以发现,Log4j和Log4j2的包路径是不同的,Apache为了区分,包路径都更新了。 文件渲染 Log4j...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...

    logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库

    针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...

    Log4j2学习用到的jar包及apache-log4j-2.19.0-bin.zip

    分别有disruptor-3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF...

    Log4j2简介及与Log4j效率对比

    ### Log4j2简介 Log4j2是Apache软件基金会推出的日志框架,它是Log4j 1.x的重构版本,旨在提供更为高效且灵活的日志解决方案。与Log4j 1.x相比,Log4j2在设计上进行了重大改进,并解决了Logback等其他日志框架中...

    log4j.jar各个版本

    apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    总结,SLF4J和Log4j的组合使用让日志管理更加灵活,开发者可以通过SLF4J的简洁API进行日志记录,同时利用Log4j的强大功能,如自定义输出格式和多种输出目的地。通过适当的配置和测试,我们可以确保日志系统按照预期...

    log4j-core-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-2.15.0....

    Log4j2、Fastjson、Log4j的BurpSuite插件亲测有效

    Log4j、Log4j2和Fastjson的安全性问题在过去曾引起广泛关注,例如Log4j2的CVE-2021-44228(也被称为Log4Shell漏洞),这是一个远程代码执行漏洞,影响了许多使用Log4j2的系统。这个插件可能就是为了检测和利用这些...

    log4j-api-2.12.4.ja和log4j-core-2.12.4.jar

    此次提及的`log4j-api-2.12.4.jar`和`log4j-core-2.12.4.jar`是Log4j 2框架的两个关键组件,版本号为2.12.4,这个版本主要修复了之前版本中可能存在的安全漏洞。 **log4j-api-2.12.4.jar** 是Log4j 2框架的API模块...

    logging-log4j2-log4j-2.15.0-rc2.zip

    《深入理解Log4j 2.15.0-rc2:日志处理的关键技术解析》 Log4j,作为Java领域广泛使用的日志记录框架,一直以来都是开发者们的重要工具。这次我们关注的是其最新版本——logging-log4j2-log4j-2.15.0-rc2。这个版本...

    SpringBoot框架配置log4j和log4j2的配置代码

    Log4j和Log4j2是两种广泛使用的Java日志框架,它们提供了灵活的日志配置和高性能的日志处理能力。本文将详细介绍如何在SpringBoot项目中配置Log4j和Log4j2。 ### SpringBoot与Log4j Log4j是Apache的一个开源项目,...

    log4j-2.18.0

    《log4j-2.18.0:修复重大安全漏洞的紧急更新》 在IT领域,安全性始终是首要关注的问题。近期,一个名为“log4j2”的严重安全漏洞引发了广泛关注,它影响了所有log4j2版本,从2.0开始直到2.18.0版本之前。这个漏洞...

    log4j.properties(完整版) log4j.properties(精简版)

    **日志框架Log4j详解** 在Java开发中,日志记录是一项不可或缺的功能,它能够帮助开发者追踪程序运行状态,定位错误,优化性能,并为后期维护提供重要信息。Log4j是Apache组织开发的一个强大的、灵活的日志记录框架...

    log4j-api-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-...

    扫描log4j2 版本扫描log4j2 版本

    2. **版本确认**:然后,通过查看项目配置文件(如`log4j2.xml`或`log4j2.json`)或依赖管理工具(如Maven或Gradle)的配置,确定当前使用的Log4j2版本。 3. **漏洞评估**:对比已知受影响的版本列表,如CVE-2021-...

    log4j-API-最新稳定版本log4j-1.2.17

    标题提及的是"log4j-API-最新稳定版本log4j-1.2.17",这表明我们关注的是日志框架Log4j的一个特定版本,即1.2.17。Log4j是Apache软件基金会开发的一个用于Java应用程序的日志记录工具,它提供了灵活的日志记录功能,...

    logging-log4j2-log4j-2.16.0-rc1.zip

    总的来说,"logging-log4j2-log4j-2.16.0-rc1.zip"的发布是Log4j团队对"Log4Shell"漏洞的有力回应,通过禁用可能导致安全问题的功能,提高了整体的安全标准。这一事件提醒我们,安全无小事,及时的更新和维护是保障...

    apache-log4j-2.17.0 核心jar包

    Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...

    log4j示例项目

    这个“log4j示例项目”旨在帮助开发者理解和使用Log4j,通过该项目,我们可以深入学习Log4j的配置、使用方法以及其在实际开发中的应用。 **1. Log4j的组成部分** Log4j主要包括三个核心组件:Logger(日志器)、...

Global site tag (gtag.js) - Google Analytics