DefaultMergeStrategy - problem merging filters
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia in DefaultMergeStrategy#updateFilterNode e confronta i due rami di merge usando gli esempi di configurazione XML nell’issue. Verifica se i figli del filtro sorgente vengono preservati e se i filtri compositi vengono appiattiti anziché annidati. Il lavoro è completato quando le configurazioni unite conservano tutti i figli di filtro e KeyValuePair con la struttura composita prevista.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
DefaultMergeStrategy (Log4j 2.24.1)
In DefaultMergeStrategy#updateFilterNode I think there is a problem when merging two configurations with filters and the target does not yet contain a CompositeFilter. (in the code below this is the elsecase).
private void updateFilterNode(
final Node target,
final Node targetChildNode,
final Node sourceChildNode,
final PluginManager pluginManager) {
if (CompositeFilter.class.isAssignableFrom(targetChildNode.getType().getPluginClass())) {
final Node node = new Node(targetChildNode, sourceChildNode.getName(), sourceChildNode.getType());
node.getChildren().addAll(sourceChildNode.getChildren());
node.getAttributes().putAll(sourceChildNode.getAttributes());
targetChildNode.getChildren().add(node);
} else {
final PluginType pluginType = pluginManager.getPluginType(FILTERS);
final Node filtersNode = new Node(targetChildNode, FILTERS, pluginType);
final Node node = new Node(filtersNode, sourceChildNode.getName(), sourceChildNode.getType());
node.getAttributes().putAll(sourceChildNode.getAttributes());
final List<Node> children = filtersNode.getChildren();
children.add(targetChildNode);
children.add(node);
final List<Node> nodes = target.getChildren();
nodes.remove(targetChildNode);
nodes.add(filtersNode);
}
}
If I am not mistaken, there is a step missing to add the children of the 'sourceChildNode' to the new node.
I think it should be (see line commented with "<==== ADDED").
else {
final PluginType pluginType = pluginManager.getPluginType(FILTERS);
final Node filtersNode = new Node(targetChildNode, FILTERS, pluginType);
final Node node = new Node(filtersNode, sourceChildNode.getName(), sourceChildNode.getType());
node.getChildren().addAll(sourceChildeNode.getChildren()); // <==== ADDED
node.getAttributes().putAll(sourceChildNode.getAttributes());
final List<Node> children = filtersNode.getChildren();
children.add(targetChildNode);
children.add(node);
final List<Node> nodes = target.getChildren();
nodes.remove(targetChildNode);
nodes.add(filtersNode);
}
}
For example if merging a secondary configuration (source) containing the following filter to a base configuration (target) when the target contains a filter (but not a CompositeFilter):
<Configuration>
<DynamicThresholdFilter key="loginId" defaultThreshold="ERROR">
<KeyValuePair key="alice" value="DEBUG"/>
<KeyValuePair key="bob" value="INFO"/>
</DynamicThresholdFilter>
</Configuration>
I believe all the KeyValuePair children would be dropped during merge with the current code.
In addition, the current code does not account for the possibilty of the sourceChildNode being a CompositeFilter which would result in nested composite-filters. (this applies to both the ifand elsebranches of the original code.
<Configuration>
<CompositeFilter>
<Filter1/>
<Filter2/>
</CompositeFilter>
</Configuration>
<Configuration>
<CompositeFilter>
<Filter3/>
<Filter4/>
</CompositeFilter>
</Configuration>
Would result in:
<Configuration>
<CompositeFilter>
<Filter1/>
<Filter2/>
<CompositeFilter>
<Filter3/>
<Filter4/>
</CompositeFilter>
</CompositeFilter>
</Configuration>
But should probably be:
<Configuration>
<CompositeFilter>
<Filter1/>
<Filter2/>
<Filter3/>
<Filter4/>
</CompositeFilter>
</Configuration>
- Lingua principale
- Java
- Stelle
- 3.6k
- Fork
- 1.8k
- Merge medio
- 5g 6h
- PR unite (30g)
- 24
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/logging-log4j2
-
additivity attributeApertawaiting-for-maintainer
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
apache/logging-log4j2#4475 ·
I maintainer di solito rispondono entro 1 giorno
-
Migrate `log4j-api-test` tests to JUnit 5Forse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertaapi priority: P3 tests waiting-for-maintainer
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
apache/logging-log4j2#4430 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
`Rfc5424Layout` does not escape the `newLineEscape` replacement in SD-PARAM-VALUEForse già presa @lunarbae628 l’ha presa 5 giorni fa. Apertabug layouts priority: P3
apache/logging-log4j2#4464 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
configuration enhancement layouts
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
apache/logging-log4j2#4463 ·
I maintainer di solito rispondono entro 1 giorno
-
`evaluateOnStartup="true"` saves logs under wrong file names after missing scheduled rollForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertaappenders:Rolling bug priority: P1 waiting-for-maintainer
Difficoltà 3/5 1-2 giorni Idoneità per principianti 30/100
apache/logging-log4j2#4449 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/logging-log4j2
Issue simili
-
untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
opensearch-project/opensearch-prometheus-exporter#680 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
-
Good First Issue
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
hiero-ledger/hiero-sdk-java#3059 ·
I maintainer di solito rispondono entro 1 giorno
-
bug live-tv platform:desktop platform:mobile platform:tv
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
fk0u/cleanyourtv-tahoe#102 ·
I maintainer di solito rispondono entro 1 giorno