---
name: "SD_CRIT"
section: "3"
platform: "linux"
package: "libsystemd-dev"
version: "257.13-1~deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/sd-daemon"
---

# SD\_CRIT(3)

APIs for new-style daemons

Part of [sd-daemon(3)](/sd-daemon/3.md).

## NAME

sd-daemon, SD\_EMERG, SD\_ALERT, SD\_CRIT, SD\_ERR, SD\_WARNING, SD\_NOTICE, SD\_INFO, SD\_DEBUG - APIs for new-style daemons

## SYNOPSIS

```
#include <systemd/sd-daemon.h>
```

**pkg-config --cflags --libs libsystemd**

## DESCRIPTION

sd-daemon.h is part of [**libsystemd**(3)](/libsystemd/3.md) and provides APIs for new-style daemons, as implemented by the [**systemd**(1)](/systemd/1.md) service manager.

See [**sd\_listen\_fds**(3)](/sd_listen_fds/3.md), [**sd\_notify**(3)](/sd_notify/3.md), [**sd\_booted**(3)](/sd_booted/3.md), [**sd\_is\_fifo**(3)](/sd_is_fifo/3.md), [**sd\_watchdog\_enabled**(3)](/sd_watchdog_enabled/3.md) for more information about the functions implemented. In addition to these functions, a couple of logging prefixes are defined as macros:

```
#define SD_EMERG   "<0>"  /* system is unusable */
#define SD_ALERT   "<1>"  /* action must be taken immediately */
#define SD_CRIT    "<2>"  /* critical conditions */
#define SD_ERR     "<3>"  /* error conditions */
#define SD_WARNING "<4>"  /* warning conditions */
#define SD_NOTICE  "<5>"  /* normal but significant condition */
#define SD_INFO    "<6>"  /* informational */
#define SD_DEBUG   "<7>"  /* debug-level messages */
```

These prefixes are intended to be used in conjunction with stderr-based logging (or stdout-based logging) as implemented by systemd. If a systemd service definition file is configured with *StandardError=journal* or *StandardError=kmsg* (and similar with *StandardOutput=*), these prefixes can be used to encode a log level in lines printed. This is similar to the kernel **printk()**-style logging. See **klogctl**(2) for more information.

The log levels are identical to [**syslog**(3)](/syslog/3.md)'s log level system. To use these prefixes simply prefix every line with one of these strings. A line that is not prefixed will be logged at the default log level SD\_INFO.

**Example 1. Hello World**

A daemon may log with the log level NOTICE by issuing this call:

```
fprintf(stderr, SD_NOTICE "Hello World!\n");
```

## NOTES

Functions described here are available as a shared library, which can be compiled against and linked to with the **libsystemd** [**pkg-config**(1)](/pkg-config/1.md) file.

The code described here uses [**getenv**(3)](/getenv/3.md), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not call [**setenv**(3)](/setenv/3.md) from a parallel thread. It is recommended to only do calls to **setenv()** from an early phase of the program when no other threads have been started.

## SEE ALSO

[**systemd**(1)](/systemd/1.md), [**sd\_listen\_fds**(3)](/sd_listen_fds/3.md), [**sd\_notify**(3)](/sd_notify/3.md), [**sd\_booted**(3)](/sd_booted/3.md), [**sd\_is\_fifo**(3)](/sd_is_fifo/3.md), [**sd\_watchdog\_enabled**(3)](/sd_watchdog_enabled/3.md), [**daemon**(7)](/daemon/7.md), [**systemd.service**(5)](/systemd.service/5.md), [**systemd.socket**(5)](/systemd.socket/5.md), [**fprintf**(3)](/fprintf/3.md), [**pkg-config**(1)](/pkg-config/1.md)
