log4j2.xml文件详解及在日志中加入全局guid

网友投稿 772 2022-09-07


log4j2.xml文件详解及在日志中加入全局guid

目录log4j2.xml文件及在日志中加入全局guid只有定义了这个,上面的才会真实有效想在日志中加入全局guid需要修改日志的格式log4j2.x配置文件中各标签1、Logger 完成日志信息的处理2、Appender 设置在哪输出日志信息3、Layout 设置日志信息的输出格式4、Filters5、Status6、monitorInterval7、Policies 配置日志相关策略

log4j2.xml文件及在日志中加入全局guid

filePattern="${sys:user.home}/logs/provider/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">

filePattern="${sys:user.home}/logs/provider/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">

filePattern="${sys:user.home}/logs/provider/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">

filePattern="${sys:user.home}/logs/provider/${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log.gz">

只有定义了这个,上http://面的才会真实有效

日志信息输出到文件中,超过指定大小压缩存档

日志信息输出到文件中,按照日期来压缩存档

想在日志中加入全局guid需要修改日志的格式

加入自定义参数H

/**

* 有时候需要在日志中实现类似aop的效果,统一加进去某些参数。对于这种需要,log4j2则可以使用插件机制

* Plugin 表示的是这是一个插件,name是名称,category为PatternConverter.CATEGORY(目前插件只有这个选择)

ConverterKeys表示的就是自定义的参数,可以多个

* @author yp-tc-m-7129

*

*/

@Plugin(name = "LogPatternConverter", category = PatternConverter.CATEGORY)

@ConverterKeys({ "H" })

public class LogPatternConverter extends LogEventPatternConverter {

/**

* 检查全局guid是否正确 - GUID[45a696c385f341efbebf05fd0b3b1344] - TYPE[MANUAL]

* @param args

*/

/*public static void main(String[] args) {

System.out.println(getPayplusLogUUID());

}*/

private static final LogPatternConverter INSTANCE = new LogPatternConverter();

public static LogPatternConverter newInstance(final String[] options) {

return INSTANCE;

}

private LogPatternConverter(){

super("LogId", "logId");

}

/**

* 另外的格式化日志,在日志中加入一个全局guid

* 这里有两个参数,LogEvent是系统已经存在的一些可选数据,StringBuilder 表示的是最终的输出字符流。一般都是将自定义的append进去

*/

@Override

public void format(LogEvent event, StringBuilder builder) {

final Message msg = event.getMessage();

if (msg != null) {

String result = msg.getFormattedMessage();

result = getPayplusLogUUID() + result;

builder.append(result);

}

}

/**

* 业务日志全局UUID

*

* @return

*/

protected String getPayplusLogUUID() {

StringBuilder builder = new StringBuilder();

if (!ThreadContextUtils.contextInitialized()) {

ThreadContextUtils.initContext("applicationName", null, ThreadContextType.MANUAL);

}

builder.append("- GUID[");

builder.append(ThreadContextUtils.getContext().getThreadUID());

builder.append("] - TYPE[");

builder.append(ThreadContextUtils.getContext().getType());

builder.append("] ");

return builder.toString();

}

}

这样就在日志中加入了全局guid用于查询日志处理问题了。

log4j2.x配置文件中各标签

log4j2.0以后我们通常在log4j2.xml中配置相关参数,在配置的时候我们需要理解这些参数的具体含义,下面列出了这些参数的解释。

1、Logger 完成日志信息的处理

logger中的name是指代码的包名或类名,路径要写全,可以配置不同包中的日志输出到不同的文件中。level是日志输出级别,定义输出的层次和决定信息是否输出,

DEBUG

additivity设置事件是否在root logger输出,为了避免重复输出,可以在Logger 标签下设置additivity为”false”。

2、Appender 设置在哪输出日志信息

FileAppender:普通地输出到本地文件

FlumeAppender:将几个不同源的日志汇集、集中到一处。

JMSQueueAppender VS. JMSTopicAppender:与JMS相关的日志输出

RewriteAppender:对日志事件进行掩码或注入信息

RollingFileAppender:对日志文件进行封存(详细)

RoutingAppender:在输出地之间进行筛选路由

SMTPAppender:将LogEvent发送到指定邮件列表

SocketAppender:将LogEvent以普通格式发送到远程主机

SyslogAppender:将LogEvent以RFC 5424格式发送到远程主机

AsynchAppender:将一个LogEvent异步地写入多个不同输出地

ConsoleAppender:将LogEvent输出到命令行

FailoverAppender:维护一个队列,系统将尝试向队列中的Appender依次输出LogEvent,直到有一个成功为止

其中ConsoleAppender、RollingFileAppender和SMTPAppender较为常用。如果想详细了解,可以参考log4j的官方文档

ConsoleAppender将输出写到System.err或System.out。如果想将输出写到System.out,设置Console标签下的target为”SYSTEM_OUT”即可;如果想将输出写到System.err,设置Console标签下的target为”SYSTEM_ERR “即可。

RollingFileAppender跟FileAppender的基本用法一样。但RollingFileAppender可以设置log文件的size(单位:KB/MB/GB)上限、数量上限,当log文件超过设置的size上限,会自动被压缩。RollingFileAppender可以理解为滚动输出日志,如果log4j 2记录的日志达到上限,旧的日志将被删除,腾出的空间用于记录新的日志,DefaultRolloverStrategy 标签的max设置压缩文件的上限(默认值为7)。

SMTPAppender主要用来给指定的E-mail发送log event。

SMTPAppender默认情况下只发送ERROR级别以上的日志,在测试的时候会发现低级别的日志是不会通过邮箱发送的。

3、Layout 设置日志信息的输出格式

layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.SimpleLayout(包含日志讯息的级别和讯息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、执行绪、类别等讯息)

org.apache.log4j.PatterLayout(可以灵活地指定布局格式)

详细配置可以参考官方文档。

4、Filters

Filter可以过滤log事件,并控制log输出,详细配置可以参考官方文档。

例如ThresholdFilter 可以实现单个log级别的过滤功能。

5、Status

log4j 2定义的status级别有8个:ALL,TRACE, DEBUG, INFO, WARN, ERROR ,FATAL,OFF。其实status属性是帮助开发者找错用的,它可以检测log4j 2的配置文件是否有错,也可以检测到死循环的logger。

6、monitorInterval

通过设置monitorInterval属性,即可设置log4j 2自动检测配置文件的时间间隔(单位:秒),最小间隔为5秒。log4j 2检测到配置文件有变化,会重新配置自己。

7、Policihttp://es 配置日志相关策略

SizeBasedTriggeringPolicy:设置日志大小达到一定大小后打包生成压缩文件。

TimeBasedTriggeringPolicy:基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:

interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟。

modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00。

这里将我在项目中常用配置贡献给大家,可以满足大部分需求。

D:/ljzx_log

filepattern="${logPath}/%d{YYYYMMdd}-%i-info.log.zip">

<!--设置每天打包日志一次-->

filepattern="${logPath}/%d{YYYYMMdd}-%i-warn.log.zip">

filepattern="${JnSJIJtlogPath}/%d{YYYYMMdd}-%i-error.log.zip">

smtpUsername="message@lengjing.info" smtpPassword="LENG****1234" smtpHost="mail.lengjing.info" smtpDebug="false"

smtpPort="25" bufferSize="10">

additivity设置事件是否在root logger输出,为了避免重复输出,可以在Logger 标签下设置additivity为”false”。

2、Appender 设置在哪输出日志信息

FileAppender:普通地输出到本地文件

FlumeAppender:将几个不同源的日志汇集、集中到一处。

JMSQueueAppender VS. JMSTopicAppender:与JMS相关的日志输出

RewriteAppender:对日志事件进行掩码或注入信息

RollingFileAppender:对日志文件进行封存(详细)

RoutingAppender:在输出地之间进行筛选路由

SMTPAppender:将LogEvent发送到指定邮件列表

SocketAppender:将LogEvent以普通格式发送到远程主机

SyslogAppender:将LogEvent以RFC 5424格式发送到远程主机

AsynchAppender:将一个LogEvent异步地写入多个不同输出地

ConsoleAppender:将LogEvent输出到命令行

FailoverAppender:维护一个队列,系统将尝试向队列中的Appender依次输出LogEvent,直到有一个成功为止

其中ConsoleAppender、RollingFileAppender和SMTPAppender较为常用。如果想详细了解,可以参考log4j的官方文档

ConsoleAppender将输出写到System.err或System.out。如果想将输出写到System.out,设置Console标签下的target为”SYSTEM_OUT”即可;如果想将输出写到System.err,设置Console标签下的target为”SYSTEM_ERR “即可。

RollingFileAppender跟FileAppender的基本用法一样。但RollingFileAppender可以设置log文件的size(单位:KB/MB/GB)上限、数量上限,当log文件超过设置的size上限,会自动被压缩。RollingFileAppender可以理解为滚动输出日志,如果log4j 2记录的日志达到上限,旧的日志将被删除,腾出的空间用于记录新的日志,DefaultRolloverStrategy 标签的max设置压缩文件的上限(默认值为7)。

SMTPAppender主要用来给指定的E-mail发送log event。

SMTPAppender默认情况下只发送ERROR级别以上的日志,在测试的时候会发现低级别的日志是不会通过邮箱发送的。

3、Layout 设置日志信息的输出格式

layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.SimpleLayout(包含日志讯息的级别和讯息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、执行绪、类别等讯息)

org.apache.log4j.PatterLayout(可以灵活地指定布局格式)

详细配置可以参考官方文档。

4、Filters

Filter可以过滤log事件,并控制log输出,详细配置可以参考官方文档。

例如ThresholdFilter 可以实现单个log级别的过滤功能。

5、Status

log4j 2定义的status级别有8个:ALL,TRACE, DEBUG, INFO, WARN, ERROR ,FATAL,OFF。其实status属性是帮助开发者找错用的,它可以检测log4j 2的配置文件是否有错,也可以检测到死循环的logger。

6、monitorInterval

通过设置monitorInterval属性,即可设置log4j 2自动检测配置文件的时间间隔(单位:秒),最小间隔为5秒。log4j 2检测到配置文件有变化,会重新配置自己。

7、Policihttp://es 配置日志相关策略

SizeBasedTriggeringPolicy:设置日志大小达到一定大小后打包生成压缩文件。

TimeBasedTriggeringPolicy:基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:

interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟。

modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00。

这里将我在项目中常用配置贡献给大家,可以满足大部分需求。

D:/ljzx_log

filepattern="${logPath}/%d{YYYYMMdd}-%i-info.log.zip">

<!--设置每天打包日志一次-->

filepattern="${logPath}/%d{YYYYMMdd}-%i-info.log.zip">

<!--设置每天打包日志一次-->

filepattern="${logPath}/%d{YYYYMMdd}-%i-warn.log.zip">

filepattern="${logPath}/%d{YYYYMMdd}-%i-warn.log.zip">

filepattern="${JnSJIJtlogPath}/%d{YYYYMMdd}-%i-error.log.zip">

filepattern="${JnSJIJtlogPath}/%d{YYYYMMdd}-%i-error.log.zip">

smtpUsername="message@lengjing.info" smtpPassword="LENG****1234" smtpHost="mail.lengjing.info" smtpDebug="false"

smtpPort="25" bufferSize="10">

smtpUsername="message@lengjing.info" smtpPassword="LENG****1234" smtpHost="mail.lengjing.info" smtpDebug="false"

smtpPort="25" bufferSize="10">


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:#yyds干货盘点#Flask 变量规则
下一篇:Python学习笔记|文件操作习题篇(上)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~