You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Louis Bergelson (Jira)" <ji...@apache.org> on 2022/09/19 21:38:00 UTC
[jira] [Updated] (LOG4J2-3602) Don't output ERROR level stacktrace in getLogger() call when there is no network available
[ https://issues.apache.org/jira/browse/LOG4J2-3602?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Louis Bergelson updated LOG4J2-3602:
------------------------------------
Description:
If there is no network adaptor trying to get a new logger using `LogManager.getLogger()` results in an ERROR level log message with a full stacktrace. This seems unintentional and undesirable.
Here's an example of the output:
{quote}ERROR Could not determine local host name java.net.UnknownHostException: de2c81c88ddc: de2c81c88ddc: Temporary failure in name resolution
at java.net.InetAddress.getLocalHost(InetAddress.java:1506)
at org.apache.logging.log4j.core.util.NetUtils.getLocalHostname(NetUtils.java:54)
at org.apache.logging.log4j.core.LoggerContext.lambda$setConfiguration$0(LoggerContext.java:620)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:620)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:699)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:716)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:270)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
at org.broadinstitute.hellbender.utils.Utils.<clinit>(Utils.java:72)
at org.broadinstitute.hellbender.Main.<clinit>(Main.java:45)
Caused by: java.net.UnknownHostException: de2c81c88ddc: Temporary failure in name resolution
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324)
at java.net.InetAddress.getLocalHost(InetAddress.java:1501)
...13 more
{quote}
I believe this is unintentional because the associated code has a general catch for all potential exceptions which logs a DEBUG level message in case of failure. However the call to `NetUtils.getLocalHostname()` actually does it's own error handling and very verbose logging.
The relevant call is here at LoggerContext.java line 613
{{try {}}
{{ map.computeIfAbsent("hostName", s -> NetUtils.getLocalHostname());}}
{{} catch (final Exception ex) {}}
{{ LOGGER.debug("Ignoring {}, setting hostName to 'unknown'", ex.toString());}}
{{ map.putIfAbsent("hostName", "unknown");}}
{{}}}
The problematic logging statement is in NetUtils.getLocalHostname() line 77:
{{} catch (final UnknownHostException uhe) {}}
{{ ...}}
{{ LOGGER.error("Could not determine local host name", uhe);}}
{{ return UNKNOWN_LOCALHOST;}}
{{}}}
was:
If there is no network adaptor trying to get a new logger using `LogManager.getLogger()` results in an ERROR level log message with a full stacktrace. This seems unintentional and undesirable.
Here's an example of the output:
{quote}ERROR Could not determine local host name java.net.UnknownHostException: de2c81c88ddc: de2c81c88ddc: Temporary failure in name resolution
at java.net.InetAddress.getLocalHost(InetAddress.java:1506)
at org.apache.logging.log4j.core.util.NetUtils.getLocalHostname(NetUtils.java:54)
at org.apache.logging.log4j.core.LoggerContext.lambda$setConfiguration$0(LoggerContext.java:620)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:620)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:699)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:716)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:270)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
at org.broadinstitute.hellbender.utils.Utils.<clinit>(Utils.java:72)
at org.broadinstitute.hellbender.Main.<clinit>(Main.java:45)
Caused by: java.net.UnknownHostException: de2c81c88ddc: Temporary failure in name resolution
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324)
at java.net.InetAddress.getLocalHost(InetAddress.java:1501)
...13 more
{quote}
I believe this is unintentional because the associated code has a general catch for all potential exceptions which logs a DEBUG level message in case of failure. However the call to `NetUtils.getLocalHostname()` actually does it's own error handling and very verbose logging.
The relevant call is here at LoggerContext.java line 613
{{try {}}
{{ map.computeIfAbsent("hostName", s -> NetUtils.getLocalHostname());}}
{{} catch (final Exception ex) {}}
{{ LOGGER.debug("Ignoring {}, setting hostName to 'unknown'", ex.toString());}}
{{ map.putIfAbsent("hostName", "unknown");}}
{{}}}
> Don't output ERROR level stacktrace in getLogger() call when there is no network available
> ------------------------------------------------------------------------------------------
>
> Key: LOG4J2-3602
> URL: https://issues.apache.org/jira/browse/LOG4J2-3602
> Project: Log4j 2
> Issue Type: Improvement
> Components: Core
> Affects Versions: 2.17.1, 2.17.2
> Environment: In this case software was running in a docker container with localhost `–network none` set.
> Reporter: Louis Bergelson
> Priority: Trivial
>
> If there is no network adaptor trying to get a new logger using `LogManager.getLogger()` results in an ERROR level log message with a full stacktrace. This seems unintentional and undesirable.
> Here's an example of the output:
> {quote}ERROR Could not determine local host name java.net.UnknownHostException: de2c81c88ddc: de2c81c88ddc: Temporary failure in name resolution
> at java.net.InetAddress.getLocalHost(InetAddress.java:1506)
> at org.apache.logging.log4j.core.util.NetUtils.getLocalHostname(NetUtils.java:54)
> at org.apache.logging.log4j.core.LoggerContext.lambda$setConfiguration$0(LoggerContext.java:620)
> at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
> at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:620)
> at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:699)
> at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:716)
> at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:270)
> at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
> at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
> at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
> at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
> at org.broadinstitute.hellbender.utils.Utils.<clinit>(Utils.java:72)
> at org.broadinstitute.hellbender.Main.<clinit>(Main.java:45)
> Caused by: java.net.UnknownHostException: de2c81c88ddc: Temporary failure in name resolution
> at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
> at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929)
> at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324)
> at java.net.InetAddress.getLocalHost(InetAddress.java:1501)
> ...13 more
> {quote}
>
> I believe this is unintentional because the associated code has a general catch for all potential exceptions which logs a DEBUG level message in case of failure. However the call to `NetUtils.getLocalHostname()` actually does it's own error handling and very verbose logging.
>
> The relevant call is here at LoggerContext.java line 613
> {{try {}}
> {{ map.computeIfAbsent("hostName", s -> NetUtils.getLocalHostname());}}
> {{} catch (final Exception ex) {}}
> {{ LOGGER.debug("Ignoring {}, setting hostName to 'unknown'", ex.toString());}}
> {{ map.putIfAbsent("hostName", "unknown");}}
> {{}}}
>
> The problematic logging statement is in NetUtils.getLocalHostname() line 77:
>
> {{} catch (final UnknownHostException uhe) {}}
> {{ ...}}
> {{ LOGGER.error("Could not determine local host name", uhe);}}
> {{ return UNKNOWN_LOCALHOST;}}
> {{}}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)