Open Kilda Java Documentation
LoggerBolt.java
Go to the documentation of this file.
1 /* Copyright 2017 Telstra Open Source
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 package org.openkilda.wfm.topology.utils;
17 
18 import org.apache.storm.task.OutputCollector;
19 import org.apache.storm.task.TopologyContext;
20 import org.apache.storm.topology.OutputFieldsDeclarer;
21 import org.apache.storm.topology.base.BaseRichBolt;
22 import org.apache.storm.tuple.Tuple;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25 import org.slf4j.event.Level;
26 
27 import java.util.Map;
28 
32 public class LoggerBolt extends BaseRichBolt {
33 
34  private static Logger logger = LoggerFactory.getLogger(LoggerBolt.class);
35  public Level level = Level.DEBUG;
36  public String watermark = "";
37  private OutputCollector _collector;
38 
39  private void log(Level level, String format, Object[] argArray) {
40  switch (level) {
41  case TRACE:
42  logger.trace(format, argArray);
43  break;
44  case DEBUG:
45  logger.debug(format, argArray);
46  break;
47  case INFO:
48  logger.info(format, argArray);
49  break;
50  case WARN:
51  logger.warn(format, argArray);
52  break;
53  case ERROR:
54  logger.error(format, argArray);
55  break;
56  }
57 
58  }
59 
60  public LoggerBolt withLevel(Level level) {
61  this.level = level;
62  return this;
63  }
64 
66  this.watermark = watermark;
67  return this;
68  }
69 
70  @Override
71  public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
72  _collector = collector;
73  }
74 
75  @Override
76  public void execute(Tuple tuple) {
77  System.out.println("this = " + this);
78 
79  // No way to do dynamic log level with SLF4J
80  // https://stackoverflow.com/questions/2621701/setting-log-level-of-message-at-runtime-in-slf4j
81  // https://jira.qos.ch/browse/SLF4J-124
82 
83  log(level, "\n{}: fields: {} :: values: {}",
84  new Object[] {watermark, tuple.getFields(), tuple.getValues()});
85 
86  _collector.ack(tuple);
87  }
88 
89  @Override
90  public void declareOutputFields(OutputFieldsDeclarer declarer) {
91  }
92 }
93 
94 
95 
void prepare(Map conf, TopologyContext context, OutputCollector collector)
Definition: LoggerBolt.java:71
void declareOutputFields(OutputFieldsDeclarer declarer)
Definition: LoggerBolt.java:90
LoggerBolt withWatermark(String watermark)
Definition: LoggerBolt.java:65