[logback-user] java.net.UnknownHostException in ch.qos.logback.core.util.ContextUtil on startup

Marshall Pierce marshall at mpierce.org
Tue Sep 25 07:17:44 CEST 2012


I get the following (and other statuses) printed to stdout on startup on a box running inside Amazon VPC. 

04:55:44,918 |-ERROR in ch.qos.logback.core.util.ContextUtil at 5328f6ee - Failed to get local hostname java.net.UnknownHostException: ip-10-0-4-173: ip-10-0-4-173
	at java.net.UnknownHostException: ip-10-0-4-173: ip-10-0-4-173
	at 	at java.net.InetAddress.getLocalHost(InetAddress.java:1426)
	at 	at ch.qos.logback.core.util.ContextUtil.getLocalHostName(ContextUtil.java:32)
	at 	at ch.qos.logback.core.util.ContextUtil.addHostNameAsProperty(ContextUtil.java:41)
	at 	at ch.qos.logback.classic.joran.action.ConfigurationAction.begin(ConfigurationAction.java:56)
	at 	at ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:276)
	at 	at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:148)
	at 	at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:130)
	at 	at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
	at 	at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:157)
	at 	at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:143)
	at 	at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:106)
	at 	at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:56)
	at 	at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
	at 	at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148)
	at 	at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
	at 	at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:54)
	at 	at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
	at 	at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
	at 	at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
	at 	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
	at 	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)

This is, unfortunately, breaking the tool that is running this code since it uses stdout to pipe data to other processes. (Seehttp://jira.qos.ch/browse/LOGBACK-292 for more on the fact that statuses are output to stdout even in the case of this automatic error-triggered output.)

My config file is:

<configuration>

 <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
     <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
   </encoder>
   <target>System.err</target>
 </appender>

 <root level="WARN">
   <appender-ref ref="STDERR"/>
 </root>
</configuration>

This config works, and all of the other statuses are just INFO's. 

I'm not using the hostname anywhere, and I do not care about it at all, so it's unfortunate that Logback seems to insist on complaining about it when I'm not actually using it.

The "HOSTNAME" property is set presumably so that the property can be used during configuration. 

ContextBase#getProperty(String) already has a special case in it:

public String getProperty(String key) {
   if (CONTEXT_NAME_KEY.equals(key))
     return getName();

   return (String) this.propertyMap.get(key);
}

What do you think about having another special case added to getProperty to lazy-load the hostname?


More information about the Logback-user mailing list