我是靠谱客的博主 清秀书本,最近开发中收集的这篇文章主要介绍使用Log4j - Java异常处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/**
* Log4j是目前最流行的一种日志框架
* 它有两个版本:
* 1.x: Log4j
* 2.x: Log4j2
* Log4j是一个组件化设计的日志系统
* 它是通过append把不同的log输出到不同的目的地
* 例如Console是输出到屏幕,File是输出到文件,Socket是输出到远程
* Filter是过滤哪些log是需要被输出,哪些log是不需要被输出,
* Layout是用来格式化日志的信息,我们在实际使用的时候,并不需要关系Log4j内部的API
* 而是通过配置文件来配置他
* Commons Logging可以自动的使用Log4j,如果在classpath中,存在Log4j,
* Commons Logging就会自动使用Log4j,所以我们始终使用Commons Logging来写日志
* 在开发阶段我们不需要使用Log4j
* 我们只需要把正确的配置文件和相关的jar包放入classpath文件就可以了
* 我们使用配置文件可以灵活的修改日志,而无需修改代码
*
* commons-logging-1.1.2.jar,以及log4j的三个jar包
* log4j-jcl-2.6.1
* @author Leon.Sun
*
*/
public class Log4jDemo {
}
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 这个时候我们注意到Commons Logging在classpath自动发现log4j的jar包
* 他就会直接使用log4j,这个时候我们看到的日志就是log4j打印的,这个时候我们看到的
* 日志是由console打印的,也就是只有输出到console的日志会打印在console的输出中
*
* 通过Commons Logging实现日志,不需要修改代码即可使用Log4j
* 我们使用Log4j只需要把log4j2.xml和相关的jar放入classpath
* 如果我们要更换Log4j,只需要移除log4j2.xml和相关的jar
* 只有在我们需要扩展log4j的时候,我们猜需要引用log4j的接口
* @author Leon.Sun
*
*/
public class Test {
static final Log log = LogFactory.getLog(CommonsLogging.class);
public static void main(String[] args) {
Person p = new Person("Xiao Ming");
log.error("call hello(): " + p.hello());
try {
new Person(null);
} catch (Exception e) {
log.error("Exception when create person.",e);
}
log.info("Program end.");
}
}
log4j2.xml完美配置
https://blog.51cto.com/1197822/2157668
log4j2配置文件log4j2.xml详解(转载)
https://www.cnblogs.com/new-life/p/9246143.html
将log4j.xml修改为log4j2.xml
https://blog.csdn.net/weixin_42522453/article/details/83819983

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jcl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.6.2</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根节点是一个Configuration -->
<Configuration status="WARN">
<Properties>
<!-- 日志文件默认输出格式,不带行号输出(行号显示会影响日志输出性能);%C:大写,类名;%M:方法名;%m:错误信息;%n:换行 -->
<!-- 这种定义如何打印日志的格式, -->
<property name="log.pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M - %m%n</property>
<!-- 日志默认切割的最小单位 -->
<property name="every_file_size">20MB</property>
<!-- Info日志默认同一文件夹下可以存放的数量,不设置此属性则默认为7个 -->
<property name="info_max">10</property>
<!-- 日志默认同类型日志,同一文件夹下可以存放的数量,不设置此属性则默认为7个 -->
<property name="rolling_max">50</property>
<!-- Info日志默认存放路径(Info级别日志) -->
<property name="file.all.filename">log/all.log</property>
<!-- Info日志默认压缩路径,将超过指定文件大小的日志,自动存入按"年月"建立的文件夹下面并进行压缩,作为存档 -->
<property name="file.all.pattern">log/all.%i.log.gz</property>
<!-- Error日志默认存放路径(Error级别日志) -->
<property name="file.err.filename">log/err.log</property>
<!-- Error日志默认压缩路径,将超过指定文件大小的日志,自动存入按"年月"建立的文件夹下面并进行压缩,作为存档 -->
<property name="file.err.pattern">log/err.%i.log.gz</property>
</Properties>
<Appenders>
<!-- 第一个appender是console,也就是屏幕 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 我们定义了一个RollingFile的appender,它的name是all,我们引用了fileName的属性,是我们定义的file.all.filename -->
<RollingFile name="all" bufferedIO="true" fileName="${file.all.filename}" filePattern="${file.all.pattern}">
<PatternLayout pattern="${log.pattern}"/>
<!-- 我们在Policies中定义了一个TriggerPolicy,这个Policy的意思就是每当文件大小达到20M的时候,他就会自动切割,然后生成一个新的log文件 -->
<Policies>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
</Policies>
<!-- 设置同类型日志,同一文件夹下可以存放的数量,如果不设置此属性则默认存放7个文件 -->
<DefaultRolloverStrategy max="${info_max}" />
</RollingFile>
<!-- 最后一个appender也是一个rollingFile appender,他的name是err -->
<RollingFile name="err"
bufferedIO="true" fileName="${file.all.filename}" filePattern="${file.err.filename}">
<PatternLayout pattern="${log.pattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="${every_file_size}"/>
</Policies>
<DefaultRolloverStrategy max="${info_max}" />
</RollingFile>
</Appenders>
<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<Loggers>
<!--建立一个默认的root的logger-->
<!-- 我们先定义了roo log,它的level是info,我们把它关联到三个appender中,分别是console,all,err,
我们对err的level设置error,是所有的error错误都会记录到err这个appender中 -->
<root level="info">
<appender-ref ref="console" level="info"/>
<appender-ref ref="all" level="info"/>
<appender-ref ref="err" level="error"/>
</root>
<!-- 我们可以给一个包的log指定一个level是debug,就是所有debug级别的都会记录到console中 -->
<!-- <logger name="com.learn.logging" level="debug">
<appender-ref ref="console"/>
</logger> -->
</Loggers>
</Configuration>

 

最后

以上就是清秀书本为你收集整理的使用Log4j - Java异常处理的全部内容,希望文章能够帮你解决使用Log4j - Java异常处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部