On Feb 19, 2012, at 11:20 AM, Hari Shreedharan wrote:

> 
> 
>> On 2012-02-19 16:30:08, Ralph Goers wrote:
>>> I have a suspicion that if you actually try to use this from an application 
>>> via a configuration file you won't be able to. I don't see any setter 
>>> methods for the host and port.
> 
> The reason I didn't put setters for host and port are that the AvroClient 
> object can be created only if know the hostname and port. So the constructor 
> needs these arguments. If the hostname and port change because the config 
> changes, the application can simply create a new object of the 
> Log4jAppender(resetting the port and hostname using setters will have the 
> same effect - since internally we would be doing the same thing, by replacing 
> the protocolClient). For example this would be how the setter would look:
> 
> public synchronized void setHostnameAndPort(String hostname, int port){
>    this.hostname = hostname;
>    this.port = port
>    protocolClient = null;     //This basically to make sure a new AvroClient 
> is created, considering the new setting.
> }


I think you are missing the point.  Have you tried creating a log4j.xml or 
log4j.properties and declaring the FlumeAvroAppender in it to see if it will 
work? The vast majority of Log4j users do not programmatically declare their 
appenders. To require that makes the Appender almost useless.

FWIW, I've written a Flume appender (for OG) for Logback for my employer but I 
haven't published it anywhere. I've also written a FlumeAvroAppender for Log4j 
2 for both OG and NG.  See 
http://people.apache.org/~rgoers/log4j2/manual/appenders.html#FlumeAvroAppender.
  Feel free to review the code - the NG source is at 
https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk/log4j2-flume-ng/. 
Any suggestions you have would be most welcome.

Ralph

Reply via email to