[ 
https://issues.apache.org/jira/browse/KARAF-5877?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jacob Beyner updated KARAF-5877:
--------------------------------
    Description: 
{{LogServiceLog4j2XmlImpl}} will throw an {{org.w3c.dom.DOMException: 
NOT_FOUND_ERR}} when the corresponding log4j2 configuration file has an element 
with children as the last element in the {{<Loggers>}} element. This causes the 
{{log:tail}} command to display the logs and error out immediately.

The reason for this is the {{LogServiceLog4j2XmlImpl.insertIndented}} method. 
It will eventually execute [this 
line|https://github.com/apache/karaf/blob/master/log/src/main/java/org/apache/karaf/log/core/internal/LogServiceLog4j2XmlImpl.java#L159],
 responsible for throwing the error.

This is because the {{loggers}} object is a flat collection of the {{Loggers}} 
element's children, and the {{insertAfter}} Node can be one of those nested 
children instead of a first level child. When {{loggers.insertBefore(node, 
insertAfter.getNextSibling())}} is called, and {{insertAfter}} is not a first 
level child of the {{Loggers}} element, the exception is thrown. [This is 
becuase the {{Node.insertBefore}} method requires the second argument to be a 
direct child of the node calling the 
method|https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#insertBefore(org.w3c.dom.Node,%20org.w3c.dom.Node)].

  was:
{{LogServiceLog4j2XmlImpl}} will throw an {{org.w3c.dom.DOMException: 
NOT_FOUND_ERR}} when trying to append to a nested element within the 
{{<Loggers>}} element. This causes the {{log:tail}} command to display the logs 
and error out immediately.

The reason for this is the {{LogServiceLog4j2XmlImpl.insertIndented}} method. 
It will eventually execute [this 
line|https://github.com/apache/karaf/blob/master/log/src/main/java/org/apache/karaf/log/core/internal/LogServiceLog4j2XmlImpl.java#L159].
 This can throw an error when the last child element within the {{Loggers}} 
element has children of its own.

This is because the {{loggers}} object is a flat collection of all of the 
{{Loggers}} element's children. When {{loggers.insertBefore(node, 
insertAfter.getNextSibling())}} is called, the {{insertAfter}} Node is not be a 
first level child of the {{Loggers}} element. [The {{Node.insertBefore}} method 
requires the second argument to be a direct child of the node calling the 
method|https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#insertBefore(org.w3c.dom.Node,%20org.w3c.dom.Node)],
 resulting in a {{NOT_FOUND_ERR}} when that condition is not satisfied.


> log4j2 appending error when using log4j2 XML configuration
> ----------------------------------------------------------
>
>                 Key: KARAF-5877
>                 URL: https://issues.apache.org/jira/browse/KARAF-5877
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-logging
>    Affects Versions: 4.2.0
>            Reporter: Jacob Beyner
>            Priority: Trivial
>             Fix For: 4.2.0
>
>
> {{LogServiceLog4j2XmlImpl}} will throw an {{org.w3c.dom.DOMException: 
> NOT_FOUND_ERR}} when the corresponding log4j2 configuration file has an 
> element with children as the last element in the {{<Loggers>}} element. This 
> causes the {{log:tail}} command to display the logs and error out immediately.
> The reason for this is the {{LogServiceLog4j2XmlImpl.insertIndented}} method. 
> It will eventually execute [this 
> line|https://github.com/apache/karaf/blob/master/log/src/main/java/org/apache/karaf/log/core/internal/LogServiceLog4j2XmlImpl.java#L159],
>  responsible for throwing the error.
> This is because the {{loggers}} object is a flat collection of the 
> {{Loggers}} element's children, and the {{insertAfter}} Node can be one of 
> those nested children instead of a first level child. When 
> {{loggers.insertBefore(node, insertAfter.getNextSibling())}} is called, and 
> {{insertAfter}} is not a first level child of the {{Loggers}} element, the 
> exception is thrown. [This is becuase the {{Node.insertBefore}} method 
> requires the second argument to be a direct child of the node calling the 
> method|https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html#insertBefore(org.w3c.dom.Node,%20org.w3c.dom.Node)].



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to