我是靠谱客的博主 清秀书本,这篇文章主要介绍使用Log4j - Java异常处理,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/** * 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 { }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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."); } }
复制代码
1
2
3
4
5
6
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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- 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>
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部