Notifications
In the config.yaml under the notifications section you can configure the following notification services:
notifications:
ntfy: ...
apprise: ...
webhook: ...You can also set all three notification services at the same time.
In this section only yaml configuration is shown. Environment variables are also supported and can be found here.
INFO
All notification settings can also be applied individually per container or per keyword/regex pattern (see containers section).
ntfy
ntfy is a simple, self-hostable notification service.
See full configuration example below
Configuration Options
| Name | Required | Description |
|---|---|---|
| Connection Settings | ||
url | ✅ | The URL of your ntfy instance |
topic | ✅ | The topic name for ntfy |
| Authentication | ||
token | ❌ | Token for ntfy authentication |
username | ❌ | Username for ntfy authentication (requires password) |
password | ❌ | Password for ntfy authentication (requires username) |
| Message Options | ||
priority | ❌ | Message priority from 1 (low) to 5 (high), defaults to 3 |
tags | ❌ | Comma-separated tags/emojis for the notification (e.g., warning,fire) |
icon | ❌ | Icon URL to display with the notification (defaults to LoggiFly logo) |
click | ❌ | URL to open when the notification is clicked |
markdown | ❌ | Enable markdown formatting in message (true/false), defaults to false |
| Advanced | ||
actions | ❌ | List of action buttons to add to the notification (see section below) |
headers | ❌ | Custom HTTP headers as key-value pairs (see section below) |
ntfy actions
You can add up to 3 interactive action buttons to your notifications using ntfy actions.
Details
Supported Action Types:
| Action Type | Description |
|---|---|
view | Opens a URL when clicked |
http | Sends an HTTP request when clicked |
broadcast | Sends an Android broadcast intent (Android only) |
Here is how to configure each action type:
ntfy:
actions:
- action: "view" # required
label: "View Container" # required
url: "https://example.com/view" # required
clear: false # optional, defaults to falsentfy:
actions:
- action: "http" # required
label: "Restart Service" # required
url: "https://example.com/restart" # required
method: "POST" # optional, defaults to POST
headers: # optional
Authorization: "Bearer token"
X-Custom-Header: "value"
body: "{\"service\": \"web\"}" # optional
clear: false # optional, defaults to falsentfy:
actions:
- action: "broadcast" # required
label: "Take Action" # required
intent: "io.heckel.ntfy.USER_ACTION" # optional, defaults to io.heckel.ntfy.USER_ACTION
extras: # optional
action: "custom_action"
value: "123"
clear: false # optional, defaults to falseCustom ntfy headers
You can also set custom headers to send with the request.
Example ntfy headers
headers:
At: "tomorrow, 10am" # ntfy delay feature. send the notification at 10am tomorrow
X-Custom-Header: "Test123" # custom headerFull example
notifications:
ntfy:
url: http://your-ntfy-server # Required. The URL of your ntfy instance
topic: loggifly # Required. the topic for ntfy
# authentication options
token: ntfy-token # ntfy token in case you need authentication
username: john # ntfy Username + Password in case you need authentication
password: password # ntfy Username + Password in case you need authentication
# optional settings
priority: 3 # ntfy priority (1-5)
tags: kite,mag # ntfy tags/emojis
icon: https://example.com/icon.png # ntfy icon
click: https://example.com/click # ntfy click
markdown: true # ntfy markdown
actions: # ntfy actions
- action: "view"
label: "View"
url: "https://example.com/view"
headers: # add headers if needed
Authorization: "Bearer token"
X-Custom-Header: "Test123"Message length
Set settings.max_message_length to control message length (default: 20,000 characters; 0 disables this limit). ntfy itself also has a message limit, that when exceeded will send the message as an attachment. To avoid the message being lost when LoggiFly attaches a log file (due to attach_logfile: true), the accompanying text is additionally limited to 1,000 characters. The log file itself is not shortened.
Apprise
Apprise allows you to send notifications to a wide variety of services using a simple URL-based configuration.
See which services are supported here.
Configuration Options
| Name | Required | Description |
|---|---|---|
url | ✅ | Any Apprise-compatible URL (e.g., discord://webhook-url, mailto://user:pass@gmail.com, slack://token) |
Example
notifications:
apprise:
url: "discord://webhook-url"Multiple destinations
Separate multiple Apprise URLs with commas in the same url string. Notifications are sent to all configured destinations. The same syntax works with APPRISE_URL.
notifications:
apprise:
url: "discord://WEBHOOK_ID/WEBHOOK_TOKEN,tgram://BOT_TOKEN/CHAT_ID"Message length and overflow
LoggiFly applies the global settings.max_message_length limit before calling Apprise. Destination limits, formatting and splitting are handled by Apprise.
To control oversized messages, configure overflow in each destination URL:
| URL option | Behavior |
|---|---|
overflow=split | Split long text into multiple messages according to the destination's limits. Recommended when retaining more content is important. |
overflow=truncate | Shorten text to the destination's limit. |
overflow=upstream | Leave destination overflow handling to the provider; it may accept, shorten or reject the message. |
notifications:
apprise:
url: "discord://WEBHOOK_ID/WEBHOOK_TOKEN?overflow=split"If a URL already contains query parameters, append &overflow=split instead of ?overflow=split. These options do not undo shortening already performed by the global LoggiFly limit.
Apprise's base default is upstream; individual notification services may differ.
Custom Webhooks
Send notification data to your own custom endpoint for integration into custom workflows. LoggiFly will send all data in JSON format.
Configuration Options
| Name | Required | Description |
|---|---|---|
url | ✅ | The URL of your custom webhook endpoint |
headers | ❌ | Custom HTTP headers as key-value pairs (e.g., for authentication) |
Example
notifications:
webhook:
url: https://custom.endpoint.com/post
headers:
Authorization: "Bearer token"
X-Custom-Header: "Test123"INFO
The webhook always sends title and message in the JSON payload. For non-system notifications, it also sends info_fields which are these always available template fields and log_fields.json which is just the whole json log entry if the log is in json format (see json templating) and log_fields.regex (see regex templating).
WARNING
The webhook feature may be expanded on in the future and can be subject to change.