log4j2的高并發(fā)死鎖問(wèn)題配置優(yōu)化方式
更新時(shí)間:2021年12月22日 11:38:12 作者:遇水石
這篇文章主要介紹了log4j2的高并發(fā)死鎖問(wèn)題配置優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
log4j2高并發(fā)死鎖問(wèn)題配置優(yōu)化
Maven中pom.xml引用
<log4j2.version>2.7</log4j2.version>
版本以上
<!-- log4j2 高并發(fā)造成死鎖 -->
<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>
配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!--日志級(jí)別以及優(yōu)先級(jí)排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,這個(gè)用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置,當(dāng)設(shè)置成trace時(shí),你會(huì)看到log4j2內(nèi)部各種詳細(xì)輸出-->
<!--monitorInterval:Log4j能夠自動(dòng)檢測(cè)修改配置 文件和重新配置本身,設(shè)置間隔秒數(shù)-->
<configuration status="WARN" monitorInterval="30">
<!--先定義所有的appender-->
<appenders>
<!--這個(gè)輸出控制臺(tái)的配置-->
<!-- <console name="Console" target="SYSTEM_OUT">
輸出日志的格式
<PatternLayout charset="GBK" pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console> -->
<!--文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,這個(gè)也挺有用的,適合臨時(shí)測(cè)試用-->
<!-- <File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File> -->
<!-- 這個(gè)會(huì)打印出所有的info及以下級(jí)別的信息,每次大小超過(guò)size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
<!-- ${sys:user.home} 當(dāng)前用戶目錄,但創(chuàng)建文件夾沒(méi)權(quán)限失敗的情況 -->
<RollingRandomAccessFile name="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">
<!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
<Filters>
<!-- 禁止error日志進(jìn)入 純的info日志-->
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="15">
<Delete basePath="/logs/RcsDataSys" maxDepth="2">
<IfFileName glob="*/RcsDataSys-debug*.log" />
<IfLastModified age="3d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile >
<RollingRandomAccessFile name="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" >
<!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch)-->
<Filters>
<!-- 禁止error日志進(jìn)入 純的info日志-->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<DefaultRolloverStrategy max="3">
<Delete basePath="/logs/RcsDataSys" maxDepth="2">
<IfFileName glob="*/RcsDataSys-info*.log" />
<IfLastModified age="7d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile >
<RollingRandomAccessFile name="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">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認(rèn)為最多同一文件夾下7個(gè)文件,這里設(shè)置了20 -->
<DefaultRolloverStrategy max="2"/>
</RollingRandomAccessFile >
<RollingRandomAccessFile name="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">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="3">
<Delete basePath="/logs/RcsDataSys" maxDepth="2">
<IfFileName glob="*/RcsDataSys-error*.log" />
<IfLastModified age="3d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile >
</appenders>
<!--然后定義logger,只有定義了logger并引入的appender,appender才會(huì)生效-->
<loggers>
<!--過(guò)濾掉spring和mybatis的一些無(wú)用的DEBUG信息-->
<logger name="org.springframework" level="INFO"></logger>
<logger name="org.mybatis" level="INFO"></logger>
<logger name="org.apache.ibatis" level="INFO"></logger>
<logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger" additivity="false"></logger>
<asyncRoot level="DEBUG" includeLocation="true">
<appender-ref ref="RollingRandomAccessFile-RcsDataSys-Debug"/>
<appender-ref ref="RollingRandomAccessFile-RcsDataSys-Info"/>
<appender-ref ref="RollingRandomAccessFile-RcsDataSys-Error"/>
</asyncRoot>
<logger name="druid.sql.Statement" level="info" additivity="false">
</logger>
<logger name="druid.sql.ResultSet" level="info" additivity="false">
</logger>
<logger name="com.alibaba.druid" level="info" additivity="false">
</logger>
<logger name="org.quartz" level="info" additivity="false">
</logger>
</loggers>
</configuration>
log4j2.x簡(jiǎn)單使用文檔
簡(jiǎn)單總結(jié)log4j2.x的使用過(guò)程。
1.項(xiàng)目中引入兩個(gè)jar包
log4j-core-2.0-beta9.jarlog4j-api-2.0-beta9.jar
2.指定日志配置文件位置
//指定日志的配置器文件
static{
System.setProperty("log4j.configurationFile", "./log4j2.xml");
}
3.簡(jiǎn)單的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!--這個(gè)會(huì)打印出所有的信息,每次大小超過(guò)size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔-->
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</RollingFile>
</appenders>
<loggers>
<logger name="com.klaus.tcp.synchronous.TcpSocketN" level="debug" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFile"/>
</logger>
<root level="error">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFile"/>
</root>
</loggers>
</configuration>
4.獲取Logger對(duì)象后即可寫(xiě)日志了
log = LogManager.getLogger(TcpSocketN.class.getName()); log.error(e.getMessage());
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java去除重復(fù)對(duì)象的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇java去除重復(fù)對(duì)象的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Java中main函數(shù)的String[]?args用法舉例詳解
這篇文章主要給大家介紹了關(guān)于Java中main函數(shù)的String[]?args用法的相關(guān)資料,JAVA類中main函數(shù)的參數(shù)String[]?args指的是運(yùn)行時(shí)給main函數(shù)傳遞的參數(shù),文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
Java內(nèi)存溢出實(shí)現(xiàn)原因及解決方案
這篇文章主要介紹了Java內(nèi)存溢出實(shí)現(xiàn)原因及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
java并發(fā)學(xué)習(xí)之Executor源碼解析
這篇文章主要為大家介紹了java并發(fā)學(xué)習(xí)之Executor源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
JavaWeb Session失效時(shí)間設(shè)置方法
這篇文章主要介紹了JavaWeb Session失效時(shí)間設(shè)置方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
Idea如何關(guān)閉或開(kāi)啟引用提示Usages和Annotations
這篇文章主要介紹了Idea如何關(guān)閉或開(kāi)啟引用提示Usages和Annotations問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
關(guān)于IDEA無(wú)法預(yù)覽Markdown文件的解決思路
在IntelliJ IDEA中,有時(shí)Markdown文件無(wú)法預(yù)覽可能是因?yàn)槲募P(guān)聯(lián)設(shè)置不正確或配置信息錯(cuò)誤,首先,檢查IDE的File Types設(shè)置,確保.md和.markdown后綴已正確注冊(cè),其次,對(duì)照官方配置信息,調(diào)整Markdown設(shè)置2024-09-09

