blob: 806145ad05569d20fd2e8232396fa49390ef4dfb [file] [log] [blame] [view]
---
id: functions-debug-log-topic
title: Debug with log topic
sidebar_label: "Debug with log topic"
description: Learn to debug functions with log topic in Pulsar.
---
When using Pulsar Functions, you can generate logs predefined in functions to a specified log topic and configure consumers to consume messages from the log topic.
For example, the following function logs either a WARNING-level or INFO-level log based on whether the incoming string contains the word `danger` or not.
```java
import org.apache.pulsar.functions.api.Context;
import org.apache.pulsar.functions.api.Function;
import org.slf4j.Logger;
public class LoggingFunction implements Function<String, Void> {
@Override
public void apply(String input, Context context) {
Logger LOG = context.getLogger();
String messageId = new String(context.getMessageId());
if (input.contains("danger")) {
LOG.warn("A warning was received in message {}", messageId);
} else {
LOG.info("Message {} received\nContent: {}", messageId, input);
}
return null;
}
}
```
As shown in the example, you can get the logger via `context.getLogger()` and assign the logger to the `LOG` variable of `slf4j`, so you can define your desired logs in a function using the `LOG` variable.
Meanwhile, you need to specify the topic that the logs can be produced to. The following is an example.
```bash
bin/pulsar-admin functions create \
--log-topic persistent://public/default/logging-function-logs \
# Other function configs
```
The message published to a log topic contains several properties:
- `loglevel`: the level of the log message.
- `fqn`: the fully qualified function name that pushes this log message.
- `instance`: the ID of the function instance that pushes this log message.