Según la pauta de vulnerabilidades de seguridad de Apache Log4j, actualicé el jar 2.17.0 en mi aplicación.
Los archivos de registro posteriores a la actualización no se generan.
Spring version : 5.3.13 Log4j version : 2.17.0 java : 1.8Consulte el siguiente log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration monitorInterval="1"> <Properties> <Property name="log-path">${appconfig:log_path}</Property> <Property name="log-name">${appconfig:filename}</Property> <Property name="archive-days">${appconfig:archive_days}</Property> <Property name="file-level">${appconfig:file_level}</Property> <Property name="console-level">${appconfig:console_level}</Property> </Properties> <Appenders> <Routing name="route-log"> <Routes pattern="${ctx:routingLogFile}"> <Route> <RollingFile name="default-log" fileName="${log-path}/${log-name}.log" filePattern="${log-path}/${date:yyyy-MM}/${log-name}.%d{MM-dd-yyyy}-%i.log.gz" append="true"> <PatternLayout pattern="%d{MM/dd/yyyy HH:mm:ss.SSS z} %X{machine-name} %X{app-name} [%t] %-5level %logger{36}:%-3L - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="150 MB"/> </Policies> <DefaultRolloverStrategy max="1000"> <Delete basePath="${log-path}/" maxDepth="2"> <IfFileName glob="/${log-name}*.log.gz" /> <IfLastModified age="${archive-days}" /> </Delete> </DefaultRolloverStrategy> </RollingFile > </Route> </Routes> </Routing> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d{ISO8601} %-5level %30.30logger{1.}:%-3L - %m%n%throwable" /> </Console> </Appenders> <Loggers> <Logger name="org.springframework" level="ERROR"/> <Logger name="org.apache" level="ERROR"/> <Root level="${file-level}" additivity="false"> <AppenderRef ref="route-log" /> <AppenderRef ref="STDOUT" /> </Root> </Loggers> </Configuration>Estoy utilizando la búsqueda a continuación, para obtener el nombre del archivo de registro, la ruta del archivo de registro, el nivel de registro, los días de archivo de la tabla.
import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.lookup.AbstractLookup; import org.apache.logging.log4j.core.lookup.StrLookup; import org.appconfig.properties.ApplicationProperties; import org.springframework.util.StringUtils; @Plugin(name = "appconfig", category = StrLookup.CATEGORY) public class AppLog4JConfigDatabaseLookup extends AbstractLookup { public String lookup(final LogEvent event, final String key) { if (key.equalsIgnoreCase("filename")) { return ApplicationProperties.getLogFilename(); } if (key.equalsIgnoreCase("log_path")) { return ApplicationProperties.getLogPath(); } if (key.equalsIgnoreCase("file_level")) { return ApplicationProperties.getFileLogLevel(); } if (key.equalsIgnoreCase("console_level")) { return ApplicationProperties.getConsoleLogLevel(); } if (key.equalsIgnoreCase("app_name")) { return ApplicationProperties.getAppName(); } if (key.equalsIgnoreCase("archive_days")) { return ApplicationProperties.getLogArchiveDays(); } return key; } }Consulte la clase de servicio dada a continuación.
public class LoaderJob extends SchedulerAdapterJob { @Autowired private FileLoaderJob fileLoaderJob; private static final Logger LOGGER = LogManager.getLogger(LoaderJob.class); @Override public void executeJob(JobExecutionContext jobExecutionContext) { ThreadContext.put("routingLogFile","LOADER_LOGS"); try { fileLoaderJob.execute(); } catch (Exception e) { LOGGER.error("Exception in "+getJobName()+" : "+ e.getMessage()); throw e; } finally { ThreadContext.remove("routingLogFile"); } } }funcionaba bien con 2.16.0, no funcionaba en 2.17.0. Cualquier solución sería apreciada.
Según la pauta de Apache, debe agregar dos $ en el patrón de rutas. Pero en su log4j2.xml contiene solo uno
Consulte el siguiente enlace: https://logging.apache.org/log4j/log4j-2.2/faq.html