【Java】异常处理 之 使用Log4j

这篇具有很好参考价值的文章主要介绍了【Java】异常处理 之 使用Log4j。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 Log4j

前面介绍了Commons Logging,可以作为“日志接口”来使用。而真正的“日志实现”可以使用Log4j。

Log4j是一种非常流行的日志框架,最新版本是2.x。

Log4j是一个组件化设计的日志系统,它的架构大致如下:

log.info("User signed in.");
 │
 │   ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
 ├──>Appender │───>Filter  │───>Layout  │───>Console  │
 │   └──────────┘    └──────────┘    └──────────┘    └──────────┘
 │
 │   ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
 ├──>Appender │───>Filter  │───>Layout  │───>File   │
 │   └──────────┘    └──────────┘    └──────────┘    └──────────┘
 │
 │   ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
 └──>Appender │───>Filter  │───>Layout  │───>Socket  │
     └──────────┘    └──────────┘    └──────────┘    └──────────┘

当我们使用Log4j输出一条日志时,Log4j自动通过不同的Appender把同一条日志输出到不同的目的地。例如:

  • console:输出到屏幕;
  • file:输出到文件;
  • socket:通过网络输出到远程计算机;
  • jdbc:输出到数据库

在输出日志的过程中,通过Filter来过滤哪些log需要被输出,哪些log不需要被输出。例如,仅输出ERROR级别的日志。

最后,通过Layout来格式化日志信息,例如,自动添加日期、时间、方法名称等信息。

上述结构虽然复杂,但我们在实际使用的时候,并不需要关心Log4j的API,而是通过配置文件来配置它。

以XML配置为例,使用Log4j的时候,我们把一个log4j2.xml的文件放到classpath下就可以让Log4j读取配置文件并按照我们的配置来输出日志。下面是一个配置文件的例子:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<Properties>
        <!-- 定义日志格式 -->
		<Property name="log.pattern">%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n</Property>
        <!-- 定义文件名变量 -->
		<Property name="file.err.filename">log/err.log</Property>
		<Property name="file.err.pattern">log/err.%i.log.gz</Property>
	</Properties>
    <!-- 定义Appender,即目的地 -->
	<Appenders>
        <!-- 定义输出到屏幕 -->
		<Console name="console" target="SYSTEM_OUT">
            <!-- 日志格式引用上面定义的log.pattern -->
			<PatternLayout pattern="${log.pattern}" />
		</Console>
        <!-- 定义输出到文件,文件名引用上面定义的file.err.filename -->
		<RollingFile name="err" bufferedIO="true" fileName="${file.err.filename}" filePattern="${file.err.pattern}">
			<PatternLayout pattern="${log.pattern}" />
			<Policies>
                <!-- 根据文件大小自动切割日志 -->
				<SizeBasedTriggeringPolicy size="1 MB" />
			</Policies>
            <!-- 保留最近10份 -->
			<DefaultRolloverStrategy max="10" />
		</RollingFile>
	</Appenders>
	<Loggers>
		<Root level="info">
            <!-- 对info级别的日志,输出到console -->
			<AppenderRef ref="console" level="info" />
            <!-- 对error级别的日志,输出到err,即上面定义的RollingFile -->
			<AppenderRef ref="err" level="error" />
		</Root>
	</Loggers>
</Configuration>

虽然配置Log4j比较繁琐,但一旦配置完成,使用起来就非常方便。对上面的配置文件,凡是INFO级别的日志,会自动输出到屏幕,而ERROR级别的日志,不但会输出到屏幕,还会同时输出到文件。并且,一旦日志文件达到指定大小(1MB),Log4j就会自动切割新的日志文件,并最多保留10份。

有了配置文件还不够,因为Log4j也是一个第三方库,我们需要从这里下载Log4j,解压后,把以下3个jar包放到classpath中:

log4j-api-2.x.jar
log4j-core-2.x.jar
log4j-jcl-2.x.jar

因为Commons Logging会自动发现并使用Log4j,所以,把上一节下载的commons-logging-1.2.jar也放到classpath中。

要打印日志,只需要按Commons Logging的写法写,不需要改动任何代码,就可以得到Log4j的日志输出,类似:

03-03 12:09:45.880 [main] INFO  com.itranswarp.learnjava.Main
Start process...

最佳实践

在开发阶段,始终使用Commons Logging接口来写入日志,并且开发阶段无需引入Log4j。如果需要把日志写入文件, 只需要把正确的配置文件和Log4j相关的jar包放入classpath,就可以自动把日志切换成使用Log4j写入,无需修改任何代码。

小结

通过Commons Logging实现日志,不需要修改代码即可使用Log4j

使用Log4j只需要把log4j2.xml和相关jar放入classpath

如果要更换Log4j,只需要移除log4j2.xml和相关jar;

只有扩展Log4j时,才需要引用Log4j的接口(例如,将日志加密写入数据库的功能,需要自己开发)。文章来源地址https://www.toymoban.com/news/detail-645461.html

到了这里,关于【Java】异常处理 之 使用Log4j的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA中使用log4j及slf4j进行日志输出的方法

    JAVA中输出日志比较常用的是log4j,这里讲下log4j的配置和使用方法,以及slf4j的使用方法。 一、下载log4j的架包,并导入项目中,如下: 二、创建log4j.properties配置文件 1、log4j配置文件的位置: (1)如果是java project项目,则在项目的根目录下创建log4j.properties而不是在src目录下

    2024年02月07日
    浏览(39)
  • 安全学习_开发相关_Java第三方组件Log4j&FastJSON及相关安全问题简介

    Java Naming and Directory Interface (Java 命名和目录接口 ),JNDI 提供统一的客户端 API,通过不同的服务供应接口(SPI)的实现,由管理者将 JNDI API 映射为特定的命名服务和目录服务,使得 JAVA 应用程可以通过 JNDI 实现和这些命名服务和目录服务之间的交互。 Log4J: Apache的一个开源项目

    2024年02月05日
    浏览(51)
  • Java 项目日志实例基础:Log4j

    点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ 介绍几个日志使用方面的基础知识。 1 Log4j 1、Log4j 介绍 Log4j(log for java)是 Apache 的一个开源项目,通过使用 Log4j,我们可以控制日志信息输出到日志文件、也可以控制每一条日志的输出格式

    2024年02月12日
    浏览(43)
  • 【java安全】Log4j反序列化漏洞

    关于Apache Log4j Log4j是Apache的开源项目,可以实现对System.out等打印语句的替代,并且可以结合spring等项目,实现把日志输出到控制台或文件等。而且它还可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码,满足了大多数要求。 就是用来打印日志的 漏洞成因

    2024年02月11日
    浏览(41)
  • java web中部署log4j.xml

    标题:Java Web中部署log4j.xml 目录: 1. 介绍 2. 配置log4j.xml文件 3. 配置web.xml文件 4. 配置Spring框架 5. 配置Spring Bean 6. 总结 ## 1. 介绍 在Java Web开发中,日志记录是非常重要的一部分。log4j是一个常用的Java日志记录框架,它提供了灵活的配置和强大的日志功能。本篇博客将介绍如何

    2024年02月09日
    浏览(39)
  • logging.level的含义及设置 【java 日志 (logback、log4j)】

    日志级别 tracedebuginfowarnerrorfatal 常用的有:debug,info,warn,error 通常我们想设置日志级别,会用到 logging.level.root=info logging.level设置日志级别,后面跟生效的区域。root表示整个项目。 也可以写某个包,或者某个类。 例如:logging.level.com.ali.service=error。在com.ali.service包下所有

    2024年02月10日
    浏览(38)
  • Maven编译java及解决程序包org.apache.logging.log4j不存在问题

    1、首先新建一个文件夹,比如hello Hello里新建pom.xml 注意上面dependencies部分用于解决程序包org.apache.logging.log4j不存在问题,即 Maven编译java及解决程序包org.apache.logging.log4j不存在问题 和文件夹srcmainjava java里新建Exploit.java和LogTest.java Exploit.java LogTest.java 2、然后使用meve compile编

    2024年02月10日
    浏览(38)
  • 【异常】org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4

    这个错误表明在你的项目中同时引入了 log4j-slf4j-impl 和 log4j-to-slf4j 两个依赖,而这两者是互斥的,不能同时存在。 解决这个问题有两种方式: 移除冲突的依赖 : 在你的项目的构建文件(如 pom.xml )中,找到引入的依赖列表,检查是否同时引入了 log4j-slf4j-impl 和 log4j-to-slf

    2024年02月04日
    浏览(40)
  • 单元测试报错解决java.lang.NoClassDefFoundError: org/apache/logging/log4j/util/ReflectionUtil

    原因是新版本的log4j-core包中不包含org/apache/logging/log4j/util/ReflectionUtil这个类,在2.2版本后这个类被迁移到log4j-jcl包中。 引入新的包即可 maven引入 gradle引入 即可解决

    2024年02月16日
    浏览(39)
  • log4j日志框架的使用

    log4j的配置文件可以理解成有2部分 1根日志记录器  2 各appender(输出源)配置 入口 loggerManager的静态代码块 在loggerManager的静态代码块中,完成对配置文件的读取和解析 然后组装成框架的Logger对象、appender对象完成初始化操作 当调用logger.info打印日志时,和logback的流程基本一样

    2024年02月04日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包