内容简介:一、Maven配置1、与SpringBoot集成二、log4j2.xml日志配置
Log4j2 使用和配置
一、Maven配置
1、与SpringBoot集成
<!-- ====================log related -->
<
dependency
>
<!-- exclude掉spring-boot的默认log配置 -->
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter</
artifactId
>
<
exclusions
>
<
exclusion
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-logging</
artifactId
>
</
exclusion
>
</
exclusions
>
</
dependency
>
<
dependency
>
<!-- 引入log4j2依赖 -->
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-log4j2</
artifactId
>
</
dependency
>
<!-- ===================end of log related -->
二、log4j2.xml日志配置
简单配置如下:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!-- status: 用于设置log4j2自身内部的信息输出,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!-- monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<
configuration
status
=
"WARN"
monitorInterval
=
"30"
>
<
Appenders
>
<
Console
name
=
"Console"
target
=
"SYSTEM_OUT"
>
<
PatternLayout
pattern
=
"%d [%t] %-5p [%c] - %m%n"
/>
</
Console
>
</
Appenders
>
<
Loggers
>
<
logger
name
=
"org.thymeleaf"
level
=
"warn"
/>
<
Root
level
=
"info"
>
<
AppenderRef
ref
=
"Console"
/>
</
Root
>
</
Loggers
>
</
Configuration
>
1、PatternLayout 配置
示例如下:
%d{HH:mm:ss.SSS} [%thread] %-5level %logger:%line - %msg%n
等价于
%d{HH:mm:ss.SSS} [%t] %-5p %c:%L - %m%n
正式环境参考配置:
%d [%thread] %-5level %logger - %msg%n
开发环境参考配置:
%d{HH:mm:ss.SSS} [%thread] %-5level %C{9.1.1.9.}:%line - %msg%n
常用配置如下:
%d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间
%-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%c : logger的名称(%logger)
%t : 输出当前线程名称
%p : 日志输出格式
%m : 日志内容,即 logger.info("message")
%n : 换行符
%C : Java类名(%F)
%L : 行号
%M : 方法名
%l : 输出语句所在的行数, 包括类名、方法名、文件名、行数
hostName : 本地机器名
hostAddress : 本地ip地址
其他参见配置(供参考):
%d %p %C{1.} [%t] %m%n
%d [%t] %-5p [%c] - %m%n
%C{1}.%M %m %ex%n
[%date{HH:mm:ss.SSS}][%thread][%level][%class][%line]:%message%n
%-d [%t:%r] [%F:%L] - [%p] %m%n
%d [%t] %-5level %logger{36} - %msg%n
%d [%t] %F %M %l- %-5level %logger{36} %msg%n
%d %5p --- [%t] %-40.40c{1.} : %m%n%xwEx
%d [%t] %-5level %logger{36} - %msg%n
%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n
详细配置参见官方文档: http://logging.apache.org/log4j/2.x/manual/layouts.html
2、Appenders配置
详见官方文档:
http://logging.apache.org/log4j/2.x/manual/appenders.html
3、Filter配置
3.1 自定义Filter
编写一个自定义Filter,可以参考 org.apache.logging.log4j.core.filter.ThresholdFilter
例如 AppThresholdFilter,主要重写了下面一段,定义了一个 prefix 属性:
@PluginFactory
public
static
AppThresholdFilter createFilter(
@PluginAttribute
(
"level"
)
final
Level level,
@PluginAttribute
(
"prefix"
)
final
String prefix) {
final
Level actualLevel = level ==
null
? Level.ERROR : level;
final
Result onMatch = Result.NEUTRAL;
final
Result onMismatch = Result.DENY;
return
new
AppThresholdFilter(actualLevel, onMatch, onMismatch, prefix);
}
然后在log4j2.xml的根节点配置自定义Filter的包路径,例如:
< Configuration status="info" packages="com.zollty" >
然后就可以使用了,使用方法示例如下:
< AppThresholdFilter level="INFO" prefix ="com.zollty" />
在比较深入的使用过程中,有两点明显的感受:
1、log4j2灵活性不够,体现在设计思路上,没logback那么贴合实践。
2、log4j2使用不够广泛,资料不多,深度使用的话,会遇到很多问题网上搜不到答案。
其他劣势:
-
Log4j2用户较少,网上的资料较少,没有logback成熟;
-
SpringBoot原生支持的是Logback(而非log4j2),对Logback的扩展非常好;
-
Log4j2的XML配置不支持表达式语言,不支持判断;
-
Log4j2引入外部配置文件只支持xInclude,不能满足某些需求;
-
Log4j2不支持Listener,不能满足某些需求。
(注意,我上面所说的都是 “深度使用”,如果只是简单使用的话,两者应该差不多)
logback优势:
根据log4j2的官方介绍,log4j2的性能要比logback高一点点,但据我对log4j1和Logback源码的熟悉,知道logback的作者几乎是个完美主义者,性能优化也做得非常好。所以,不要盲目相信log4j2的性能测试,所谓“王婆卖瓜,自卖自夸”,真实情况是:即便log4j2性能更好,那也只是在特定条件下或理论层面的,实际使用上,两者性能差不多。
3、题外话:
log4j2推出时间晚,但是有严重的模仿logback的嫌疑,甚至可以说,log4j2很多设计是照抄logback的,但这种设计并没有得到 logback的作者以及开源社区的认可,即便它是Apache官方的项目,Spring等很多项目仍然没有把它纳入主流。
个人结论: 注重灵活可扩展性和成熟稳定就采用Logback,简单使用又注重性能可以使用Log4j 2尝鲜。Anyway,logback没什么不好,选它准没错!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ES6标准入门(第3版)
阮一峰 / 电子工业出版社 / 2017-9 / 99.00
ES6是下一代JavaScript语言标准的统称,每年6月发布一次修订版,迄今为止已经发布了3个版本,分别是ES2015、ES2016、ES2017。本书根据ES2017标准,详尽介绍了所有新增的语法,对基本概念、设计目的和用法进行了清晰的讲解,给出了大量简单易懂的示例。本书为中级难度,适合那些已经对JavaScript语言有一定了解的读者,可以作为学习这门语言最新进展的工具书,也可以作为参考手册......一起来看看 《ES6标准入门(第3版)》 这本书的介绍吧!