El proyecto springboot integra log4j2 en un paquete jar, importa el archivo externo log4j2 y no se puede imprimir el registro en ejecución

El proyecto springboot integra log4j2 en un paquete jar, importa el archivo externo log4j2 y no se puede imprimir el registro en ejecución

Descripción del problema

Debido a que ya hay archivos log4j2 en el proyecto, también se incluyen en el jar escrito. El archivo log4j2 externo se introduce en application.yml. Cuando se inicia el proyecto, el registro se puede imprimir, pero cuando el archivo de registro alcanza el valor especificado o la fecha Después de la reversión, el proyecto no se registrará

Análisis de causa

log4j2 usa programación de complementos. Cuando se compila el paquete log4j2, o se compila el paquete que contiene el complemento log4j2, la información del complemento que se cargará se colocará en META-INF/org/apache/logging/log4j/ core/config/plugins/ Log4j2Plugins.dat (incluido el complemento nativo logj42 oficial), y luego, cuando se inicie el proyecto, log4j2 escaneará el archivo de información del complemento en el directorio META-INF de cada paquete jar, y luego cargar el complemento. Pero cuando el proyecto se empaqueta en un paquete jar, si hay un archivo Log4j2Plugins.dat en dos paquetes jar diferentes, habrá un problema, uno de los archivos se sobrescribirá con el otro, lo que dará como resultado un archivo cuando se inicie el proyecto. El complemento no se puede cargar normalmente, lo que genera un error.

problema resuelto

Elimine el archivo log4j2 en el proyecto para asegurarse de que no haya ningún archivo log4j2 en el contenedor.

Adjunte la configuración de log4j2

<?xml version="1.0" encoding="UTF-8"?>

<Configuration status="warn" name="MyApp" monitorInterval="60">
  <properties>
        <property name="LOG_HOME">/var/log/koal</property>
		<property name="LOG_FILE">ipsec-rms</property>
        <property name="FILE_NAME">ipsec-rms</property>
    </properties>
  <Appenders>
    <!--Console:日志输出到控制台标准输出 -->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout charset="UTF-8" pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    <RollingFile name="RollingFile" fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/${LOG_FILE}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log">
	   <!--
	   onMatch="ACCEPT" 表示匹配该级别及以上
	   onMismatch="DENY" 表示不匹配该级别以下的
	   -->
      <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
	  <!--
	  格式化输出:
	  %d 	输出时间
	  %L	输出行号
	  %m或%msg或%message  输出日志信息
	  %t或%tn或%thread或%threadName	 输出线程id
	  %-5level  输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
	  -->
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%L] - %msg%n" />
      <Policies>
	     <!--
		 TimeBasedTriggeringPolicy基于时间的触发策略:
		 该策略主要是完成周期性的log文件封存工作。有两个参数:interval,integer型,指定两次封存动作之间的时间间隔。这个配置需要和filePattern结合使用,filePattern日期格式精确到哪一位,interval也精确到哪一个单位。
		 注意filePattern中配置的文件重命名规则是%d{
    
    yyyy-MM-ddHH-mm-ss}-%i,最小的时间粒度是ss,即秒钟。TimeBasedTriggeringPolicy默认的size是1,结合起来就是每1秒钟生成一个新文件。如果改成%d{
    
    yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件-->
        <TimeBasedTriggeringPolicy/>
        <SizeBasedTriggeringPolicy size="20MB"/>
      </Policies>
      <!-- 最多同一文件夹下5个文件开始覆盖-->
	  <DefaultRolloverStrategy max="5">
	       <!-- 
		   Delete 删除策略
		   maxDepth要访问的目录的最大级别数。值为0表示仅访问起始文件,除非安全管理器拒绝。Integer.MAX_VALUE的值指示应访问所有级别。
		   默认值为1,表示仅指定基本路径中的文件。-->
		 <Delete basePath="${LOG_HOME}/${LOG_FILE}/$${date:yyyy-MM}/" maxDepth="2">
			<IfFileName glob="*.log" />
			<!--!Note: 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用
			另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
			<!--30天-->
			<IfLastModified age="30d" />
		 </Delete>
      </DefaultRolloverStrategy>
    </RollingFile>
    <Syslog name="SYSLOG" host="127.0.0.1" port="514" protocol="UDP"/>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="RollingFile"/>
      <AppenderRef ref="SYSLOG"/>
    </Root>
  </Loggers>
</Configuration>





Supongo que te gusta

Origin blog.csdn.net/sunrj_niu/article/details/128033321
Recomendado
Clasificación