log4j2的高并发死锁问题配置如何优化

log4j2的高并发死锁问题配置如何优化

这篇文章给大家分享的是有关log4j2的高并发死锁问题配置如何优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

log4j2高并发死锁问题配置优化

Maven中pom.xml引用

<log4j2.version>2.7</log4j2.version>

版本以上

log4j2的高并发死锁问题配置如何优化

<!--log4j2高并发造成死锁--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j2.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j2.version}</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version></dependency><!--https://mvnrepository.com/artifact/com.lmax/disruptor--><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.3.6</version></dependency>

配置如下

<?xmlversion="1.0"encoding="UTF-8"?><!--日志级别以及优先级排序:OFF>FATAL>ERROR>WARN>INFO>DEBUG>TRACE>ALL--><!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--><!--monitorInterval:Log4j能够自动检测修改配置文件和重新配置本身,设置间隔秒数--><configurationstatus="WARN"monitorInterval="30"><!--先定义所有的appender--><appenders><!--这个输出控制台的配置--><!--<consolename="Console"target="SYSTEM_OUT">输出日志的格式<PatternLayoutcharset="GBK"pattern="[%d{yyyy-MM-ddHH:mm:ss:SSS}][%p]-%l-%m%n"/></console>--><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--><!--<Filename="log"fileName="log/test.log"append="false"><PatternLayoutpattern="%d{yyyy-MM-ddHH:mm:ss.SSS}%-5level%class{36}%L%M-%msg%xEx%n"/></File>--><!--这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><!--${sys:user.home}当前用户目录,但创建文件夹没权限失败的情况--><RollingRandomAccessFilename="RollingRandomAccessFile-RcsDataSys-Debug"fileName="/logs/RcsDataSys/RcsDataSys-debug.log"filePattern="/logs/RcsDataSys/$${date:yyyy-MM}/RcsDataSys-debug-%d{yyyy-MM-dd}-%i.log"immediateFlush="true"Append="true"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><Filters><!--禁止error日志进入纯的info日志--><ThresholdFilterlevel="info"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="debug"onMatch="ACCEPT"onMismatch="DENY"/></Filters><PatternLayoutpattern="[%d{yyyy-MM-ddHH:mm:ss:SSS}][%p]-%l-%m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicysize="50MB"/></Policies><DefaultRolloverStrategymax="15"><DeletebasePath="/logs/RcsDataSys"maxDepth="2"><IfFileNameglob="*/RcsDataSys-debug*.log"/><IfLastModifiedage="3d"/></Delete></DefaultRolloverStrategy></RollingRandomAccessFile><RollingRandomAccessFilename="RollingRandomAccessFile-RcsDataSys-Info"fileName="/logs/RcsDataSys/RcsDataSys-info.log"filePattern="/logs/RcsDataSys/$${date:yyyy-MM}/RcsDataSys-info-%d{yyyy-MM-dd}-%i.log"immediateFlush="true"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><Filters><!--禁止error日志进入纯的info日志--><ThresholdFilterlevel="error"onMatch="DENY"onMismatch="NEUTRAL"/><ThresholdFilterlevel="info"onMatch="ACCEPT"onMismatch="DENY"/></Filters><PatternLayoutpattern="[%d{yyyy-MM-ddHH:mm:ss:SSS}][%p]-%l-%m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicysize="100MB"/></Policies><DefaultRolloverStrategymax="3"><DeletebasePath="/logs/RcsDataSys"maxDepth="2"><IfFileNameglob="*/RcsDataSys-info*.log"/><IfLastModifiedage="7d"/></Delete></DefaultRolloverStrategy></RollingRandomAccessFile><RollingRandomAccessFilename="RollingRandomAccessFile-RcsDataSys-Warn"fileName="/logs/RcsDataSys/RcsDataSys-warn.log"filePattern="/logs/RcsDataSys/$${date:yyyy-MM}/RcsDataSys-warn-%d{yyyy-MM-dd}-%i.log"immediateFlush="true"><ThresholdFilterlevel="warn"onMatch="ACCEPT"onMismatch="DENY"/><PatternLayoutpattern="[%d{yyyy-MM-ddHH:mm:ss:SSS}][%p]-%l-%m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicysize="100MB"/></Policies><!--DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20--><DefaultRolloverStrategymax="2"/></RollingRandomAccessFile><RollingRandomAccessFilename="RollingRandomAccessFile-RcsDataSys-Error"fileName="/logs/RcsDataSys/RcsDataSys-error.log"filePattern="/logs/RcsDataSys/$${date:yyyy-MM}/RcsDataSys-error-%d{yyyy-MM-dd}-%i.log"immediateFlush="true"><ThresholdFilterlevel="error"onMatch="ACCEPT"onMismatch="DENY"/><PatternLayoutpattern="[%d{yyyy-MM-ddHH:mm:ss:SSS}][%p]-%l-%m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicysize="50MB"/></Policies><DefaultRolloverStrategymax="3"><DeletebasePath="/logs/RcsDataSys"maxDepth="2"><IfFileNameglob="*/RcsDataSys-error*.log"/><IfLastModifiedage="3d"/></Delete></DefaultRolloverStrategy></RollingRandomAccessFile></appenders><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--><loggers><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><loggername="org.springframework"level="INFO"></logger><loggername="org.mybatis"level="INFO"></logger><loggername="org.apache.ibatis"level="INFO"></logger><loggername="org.apache.ibatis.logging.jdbc.BaseJdbcLogger"additivity="false"></logger><asyncRootlevel="DEBUG"includeLocation="true"><appender-refref="RollingRandomAccessFile-RcsDataSys-Debug"/><appender-refref="RollingRandomAccessFile-RcsDataSys-Info"/><appender-refref="RollingRandomAccessFile-RcsDataSys-Error"/></asyncRoot><loggername="druid.sql.Statement"level="info"additivity="false"></logger><loggername="druid.sql.ResultSet"level="info"additivity="false"></logger><loggername="com.alibaba.druid"level="info"additivity="false"></logger><loggername="org.quartz"level="info"additivity="false"></logger></loggers></configuration>

log4j2.x简单使用文档

简单总结log4j2.x的使用过程。

1.项目中引入两个jar包

  • log4j-core-2.0-beta9.jar

  • log4j-api-2.0-beta9.jar

2.指定日志配置文件位置

//指定日志的配置器文件static{System.setProperty("log4j.configurationFile","./log4j2.xml");}

3.简单的配置文件

<?xmlversion="1.0"encoding="UTF-8"?><configurationstatus="OFF"><appenders><Consolename="Console"target="SYSTEM_OUT"><PatternLayoutpattern="%d{yyyy-MM-ddHH:mm:ss.SSS}[%t]%-5level%logger{36}-%msg%n"/></Console><!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFilename="RollingFile"fileName="logs/app.log"filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayoutpattern="%d{yyyy-MM-ddHH:mm:ss.SSS}%-5level%class{36}%L%M-%msg%xEx%n"/><SizeBasedTriggeringPolicysize="50MB"/></RollingFile></appenders><loggers><loggername="com.klaus.tcp.synchronous.TcpSocketN"level="debug"additivity="false"><appender-refref="Console"/><appender-refref="RollingFile"/></logger><rootlevel="error"><appender-refref="Console"/><appender-refref="RollingFile"/></root></loggers></configuration>

4.获取Logger对象后即可写日志了

log=LogManager.getLogger(TcpSocketN.class.getName());log.error(e.getMessage());

感谢各位的阅读!关于“log4j2的高并发死锁问题配置如何优化”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2021-12-22 21:56:23
收藏
分享
海报
0 条评论
37
上一篇:log4j2异步日志输出方式有几种 下一篇:python中如何实现递归方法
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码