gpt4 book ai didi

slf4j - 用于拓扑的自定义 Storm logback appender

转载 作者:行者123 更新时间:2023-12-04 15:21:34 25 4
gpt4 key购买 nike

我有一个 Storm 拓扑,我想将拓扑中发生的某些事件记录到单独的日志文件中。我正在尝试在 Storm/logback/cluster.xml 中创建一个自定义 appender,它将用于记录这些事件。这是我的 cluster.xml 片段,它正在设置一切:

<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 来测试示例。这是我尝试写入日志文件的代码片段
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 - 用于拓扑的自定义 Storm logback appender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29610551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com