Search code examples
elasticsearchelasticsearch-plugin

Unexpected transaction.log file created when starting elasticsearch embedded in Tomcat


I'm using elasticsearch-transport-wares to run an Elasticsearch embedded in Tomcat.

Whatever the value of path.logs is in the elasticsearch.yml, an empty transaction.log file is always created at the path where I run the command to start my Tomcat.

When I start a not embedded Elasticsearch server I didn't see any transaction.log file created anywhere...

My question is:

  1. Do you know what is the purpose of this empty transaction.log file ?
  2. How can I configure elasticsearch the choose where this file must be stored (such like path.logs to decide where your elasticsearch logs are stored) ?

Consequently when my server is started from a path with no write permission, I got this stacktrace (log as INFO):

2016-01-28 10:26:15,174 | INFO  | Initializing elasticsearch Node 'node' [o.a.c.c.C.[.[.[/es-embedded]<localhost-startStop-1>] 
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: transaction.log (Permission denied)
  at java.io.FileOutputStream.open0(Native Method)
  at java.io.FileOutputStream.open(FileOutputStream.java:270)
  at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
  at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
  at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
  at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:207)
  at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
  at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
  at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
  at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
  at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
  at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
  at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672)
  at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516)
  at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
  at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
  at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
  at org.apache.log4j.Logger.getLogger(Logger.java:104)
  at org.elasticsearch.common.logging.log4j.Log4jESLoggerFactory.newInstance(Log4jESLoggerFactory.java:39)
  at org.elasticsearch.common.logging.ESLoggerFactory.newInstance(ESLoggerFactory.java:74)
  at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:66)
  at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:122)
  at org.elasticsearch.common.MacAddressProvider.<clinit>(MacAddressProvider.java:32)
  at org.elasticsearch.common.TimeBasedUUIDGenerator.<clinit>(TimeBasedUUIDGenerator.java:41)
  at org.elasticsearch.common.Strings.<clinit>(Strings.java:48)
  at org.elasticsearch.common.settings.ImmutableSettings.<init>(ImmutableSettings.java:73)
  at org.elasticsearch.common.settings.ImmutableSettings$Builder.build(ImmutableSettings.java:1142)
  at org.elasticsearch.node.NodeBuilder.settings(NodeBuilder.java:89)
  at org.elasticsearch.wares.NodeServlet.init(NodeServlet.java:111)
  at javax.servlet.GenericServlet.init(GenericServlet.java:158)
  at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)
  at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)
  at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
  at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5267)
  at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5557)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
  at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
  at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at java.lang.Thread.run(Thread.java:745)

Solution

  • You can change the path.logs settings in the elasticsearch.yml file and then add your elasticsearch.yml configuration file inside the /WEB-INF folder of your WAR and it will be picked up.

    You should be good to go.

    As for the transaction.log file, are you sure it's not a file that you have configured in your Log4J configuration?