【问题标题】:Custom Storm logback appender for Topology用于拓扑的自定义 Storm logback appender
【发布时间】:2015-04-13 16:38:16
【问题描述】:

我有一个风暴拓扑,我想将拓扑中发生的某些事件记录到一个单独的日志文件中。我正在尝试在storm/logback/cluster.xml 中创建一个自定义附加程序,用于记录这些事件。这是我的 cluster.xml sn-p 正在设置所有内容:

<appender name="A2" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${storm.home}/logs/custom-logger/cl-log.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>${storm.home}/logs/${logfile.name}.%i</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>9</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>100MB</maxFileSize>
    </triggeringPolicy>

    <encoder>
      <pattern>%d{yyyy-MM-dd_HH:mm:ss} %c{1} [%p] %m$n</pattern>
    </encoder>
</appender>

<logger name="custom-logger" additivity="false">
   <level value="INFO" />
   <appender-ref ref="A2"/>
</logger>

我正在使用基本的 WordCountTopology 来测试示例。这是我尝试写入日志文件的代码的 sn-p

public static class WordCount extends BaseBasicBolt {

    private static final org.slf4j.Logger CUSTOM_LOGGER = 
           LoggerFactory.getLogger("custom-logger");
    Map<String, Integer> counts = new HashMap<String, Integer>();

    public void execute(Tuple tuple, BasicOutputCollector collector) {
      String word = tuple.getString(0);
      Integer count = counts.get(word);
      if (count == null)
        count = 0;
      count++;
      counts.put(word, count);

      CUSTOM_LOGGER.info("Emitting word[" + word + "] count["+ count + "]");
      collector.emit(new Values(word, count));
    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
      declarer.declare(new Fields("word", "count"));
    }
}

无论我做什么,我似乎都无法让这些日志显示在 custom-logger cl-log.log 文件中。这甚至可以在 Storm 中使用 logback 将特定事件记录到特定文件吗?任何帮助,将不胜感激。

【问题讨论】:

    标签: slf4j logback apache-storm


    【解决方案1】:

    为了完整起见,我确实让它工作了。我在本地部署我的拓扑,因此没有发生日志记录。一旦我将我的拓扑部署到集群,上面的日志记录功能就开始工作了。

    【讨论】:

    • 你知道如何配置本地模式的登录吗?
    • 您是如何将系统日志与拓扑日志分开的?
    • @Mani 通过创建上面的附加程序,您可以通过创建私有静态最终 org.slf4j.Logger CUSTOM_LOGGER = LoggerFactory.getLogger("custom-logger"); 来精确控制您记录的内容。
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多