[ https://issues.apache.org/jira/browse/LOG4J2-2738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17007081#comment-17007081 ]
Carter Kozak commented on LOG4J2-2738: -------------------------------------- I agree with [~rpopma] that we should provide a more insightful message in this case, but I don't think we should allow nesting access to an appender control because it would require every appender implementation to handle nested calls. Consider an appender which receives an event (e.g. log.info("a {} b", parameter)), and writes bytes to a file, but prior to completing the write, toString is called on parameter which logs again (e.g. log.info("c")). This would result in the following: {noformat} <pattern prefix: time, level> a <pattern prefix: time, level> c parameterValue b{noformat} Where we would expect the following lines (in either order I suppose): {noformat} <pattern prefix: time, level> a parameterValue b <pattern prefix: time, level> c{noformat} Perhaps we should reduce the severity of the status-logger logging in this case from ERROR to WARN or even INFO in addition to improving the diagnostic message? > Message "ERROR Recursive call to appender" needs more diagnostic information. > ----------------------------------------------------------------------------- > > Key: LOG4J2-2738 > URL: https://issues.apache.org/jira/browse/LOG4J2-2738 > Project: Log4j 2 > Issue Type: Bug > Components: Core > Affects Versions: 2.12.1 > Reporter: Dan Armbrust > Assignee: Ralph Goers > Priority: Minor > Attachments: Log4JRecurseTest.java, log4j2.xml > > > The class AppenderControl has logic that is intended to detect recursive > calls to an appender. > > {code:java} > // code placeholder > @PerformanceSensitive > private boolean isRecursiveCall() { > if (recursive.get() != null) { > appenderErrorHandlerMessage("Recursive call to appender "); > return true; > } > return false; > } > {code} > However, the logic behind this is flawed, leading to erroneous ERROR messages > being printed on the console. > In my use case, I have a log message being written, utilizing the > ParameterizedMessage APIs. When log4j formats my message, it calls the > toString method on the object being passed in. If that toString() call > results in another log message being written, log4j logs this error, which I > believe to be erroneous. Its not recursive... its just another log message > that happens to be triggered by the construction of the first log message. > This wouldn't lead to a recursive loop. > This should probably be implemented with a depth counter, and only error if > it really does look recursive (deeper than 10 calls, or some such value). > Also, the error logged should REALLY include a stack trace, so this isn't > such a PITA to track down if someone really does have a recursive logging > call. > -- This message was sent by Atlassian Jira (v8.3.4#803005)