[ https://issues.apache.org/jira/browse/CASSANDRA-6720?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bill Mitchell updated CASSANDRA-6720: ------------------------------------- Attachment: (was: 2014-02-17-22-05.txt) > Implment support for Log4j DOMConfigurator for Cassandra damon > -------------------------------------------------------------- > > Key: CASSANDRA-6720 > URL: https://issues.apache.org/jira/browse/CASSANDRA-6720 > Project: Cassandra > Issue Type: Improvement > Components: Config, Core > Reporter: Nikolai Grigoriev > Priority: Trivial > > Currently CassandraDaemon explicitly uses PropertyConfigurator to load log4j > settings if "log4j.defaultInitOverride" is set to true, which is done by > default. This does not allow to use log4j XML configuration file because it > requires using of DOMConfigurator, in the similar fashion. The only way to > use it is to change the value of "log4j.defaultInitOverride" property in the > startup script. > Here is the background why I think it might be useful to support the XML > configuration, even if you hate XML ;) > I wanted to ship my Cassandra logs to Logstash and I have been using > SocketAppender. But then I have discovered that any issue with Logstash log4j > server result in significant performance degradation for Cassandra as the > logger blocks. I was able to easily reproduce the problem with a separate > test. It seems that the obvious solution was to use AsyncAppender before > SocketAppender, that eliminates the blocking. However, AsyncAppender can be > only confgured via DOMConfigurator, at least in Log4j 1.2. > I think it does not hurt to make a little change to support both > configuration types, in a way similar to Spring's Log4jConfigurer: > {code} > public static void initLogging(String location, long refreshInterval) > throws FileNotFoundException { > String resolvedLocation = > SystemPropertyUtils.resolvePlaceholders(location); > File file = ResourceUtils.getFile(resolvedLocation); > if (!file.exists()) { > throw new FileNotFoundException("Log4j config file [" + > resolvedLocation + "] not found"); > } > if > (resolvedLocation.toLowerCase().endsWith(XML_FILE_EXTENSION)) { > > DOMConfigurator.configureAndWatch(file.getAbsolutePath(), refreshInterval); > } > else { > > PropertyConfigurator.configureAndWatch(file.getAbsolutePath(), > refreshInterval); > } > } > I would be happy to submit the change unless there are any objections. > {code} -- This message was sent by Atlassian JIRA (v6.1.5#6160)