启动 Tomcat 中嵌入的 elasticsearch 时创建了意外的 transaction.log 文件

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

我正在使用 elasticsearch-transport-wares 到 运行 嵌入在 Tomcat 中的 Elasticsearch。

无论 path.logs 的值在 elasticsearch.yml 中是什么,一个空的 transaction.log 文件总是在我 运行 启动我的 Tomcat.

当我启动一个非嵌入式 Elasticsearch 服务器时,我没有看到在任何地方创建任何 transaction.log 文件...

我的问题是:

  1. 你知道这个空 transaction.log 文件的用途是什么吗?
  2. 如何配置 elasticsearch 以选择必须存储此文件的位置(例如 path.logs 来决定 elasticsearch 日志的存储位置)?

因此,当我的服务器从没有写权限的路径启动时,我得到了这个堆栈跟踪(记录为 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)

您可以更改 elasticsearch.yml 文件中的 path.logs 设置,然后将 elasticsearch.yml 配置文件添加到 WAR 的 /WEB-INF 文件夹中,然后它将被拾起。

你应该可以开始了。

至于 transaction.log 文件,您确定它不是您在 Log4J 配置中配置的文件吗?