---
name: "log4c_appender.h"
section: "3"
platform: "linux"
package: "liblog4c-doc"
version: "1.2.4-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/log4c_appender.h"
---

# log4c\_appender.h(3)

Implement this interface for your own strategies for printing log statements.

## NAME

appender.h - Implement this interface for your own strategies for printing log statements.

## SYNOPSIS

`#include <log4c/defs.h>`\
 `#include <log4c/layout.h>`\
 `#include <stdio.h>`\

### Data Structures

struct **log4c\_appender\_type**\
 log4c appender type class

### Macros

\#define **log4c\_appender\_type\_define**(a\_type)\

### Typedefs

typedef struct \_\_log4c\_appender **log4c\_appender\_t**\
 typedef struct **log4c\_appender\_type** **log4c\_appender\_type\_t**\
 log4c appender type class

### Functions

const **log4c\_appender\_type\_t** \* **log4c\_appender\_type\_get** (const char \*a\_name)\
 const **log4c\_appender\_type\_t** \* **log4c\_appender\_type\_set** (const **log4c\_appender\_type\_t** \*a\_type)\
 **log4c\_appender\_t** \* **log4c\_appender\_get** (const char \*a\_name)\
 **log4c\_appender\_t** \* **log4c\_appender\_new** (const char \*a\_name)\
 void **log4c\_appender\_delete** (**log4c\_appender\_t** \*a\_appender)\
 const char \* **log4c\_appender\_get\_name** (const **log4c\_appender\_t** \*a\_appender)\
 const **log4c\_appender\_type\_t** \* **log4c\_appender\_get\_type** (const **log4c\_appender\_t** \*a\_appender)\
 const **log4c\_layout\_t** \* **log4c\_appender\_get\_layout** (const **log4c\_appender\_t** \*a\_appender)\
 void \* **log4c\_appender\_get\_udata** (const **log4c\_appender\_t** \*a\_appender)\
 const **log4c\_appender\_type\_t** \* **log4c\_appender\_set\_type** (**log4c\_appender\_t** \*a\_appender, const **log4c\_appender\_type\_t** \*a\_type)\
 void \* **log4c\_appender\_set\_udata** (**log4c\_appender\_t** \*a\_appender, void \*a\_udata)\
 const **log4c\_layout\_t** \* **log4c\_appender\_set\_layout** (**log4c\_appender\_t** \*a\_appender, const **log4c\_layout\_t** \*a\_layout)\
 int **log4c\_appender\_open** (**log4c\_appender\_t** \*a\_appender)\
 int **log4c\_appender\_append** (**log4c\_appender\_t** \*a\_appender, **log4c\_logging\_event\_t** \*a\_event)\
 int **log4c\_appender\_close** (**log4c\_appender\_t** \*a\_appender)\
 void **log4c\_appender\_print** (const **log4c\_appender\_t** \*a\_appender, FILE \*a\_stream)\
 void **log4c\_appender\_types\_free** (void)\
 void **log4c\_appender\_types\_print** (FILE \*fp)\

## Detailed Description

Implement this interface for your own strategies for printing log statements.

**Todo**

the appender interface needs a better configuration system depending on the layout type. The udata field is a just a trick.

## Macro Definition Documentation

### #define log4c\_appender\_type\_define(a\_type)

Helper macro to define static appender types.

**Parameters**

*a\_type* the log4c\_appender\_type\_t object to define

**Warning**

needs GCC support: otherwise this macro does nothing

**Deprecated**

This macro, and the static initialialization of appenders in general, is deprecated. Use rather the **log4c\_appender\_type\_set()** function to initialize your appenders before calling log4c\_init()

## Typedef Documentation

### typedef struct \_\_log4c\_appender log4c\_appender\_t

log4c appender class

### typedef struct log4c\_appender\_type log4c\_appender\_type\_t

log4c appender type class Attributes description:

- •

  `name` appender type name

- •

  `open`

- •

  `append`

- •

  `close`

## Function Documentation

### int log4c\_appender\_append (log4c\_appender\_t \* this, log4c\_logging\_event\_t \* a\_event)

log in appender specific way.

**Parameters**

*a\_appender* the log4c\_appender object \
 *a\_event* the **log4c\_logging\_event\_t** object to log.

**Bug**

is this the right place to open an appender ?

### int log4c\_appender\_close (log4c\_appender\_t \* a\_appender)

closes the appender

**Parameters**

*a\_appender* the log4c\_appender\_t object

**Returns**

zero if successful, -1 otherwise

### void log4c\_appender\_delete (log4c\_appender\_t \* a\_appender)

Destructor for log4c\_appender\_t.

### log4c\_appender\_t \* log4c\_appender\_get (const char \* a\_name)

Get a pointer to an existing appender.

**Parameters**

*a\_name* the name of the appender to return.

**Returns**

a pointer to an existing appender, or NULL if no appender with the specfied name exists.

### const log4c\_layout\_t \* log4c\_appender\_get\_layout (const log4c\_appender\_t \* a\_appender)

**Parameters**

*a\_appender* the log4c\_appender\_t object

**Returns**

the appender layout

### const char \* log4c\_appender\_get\_name (const log4c\_appender\_t \* a\_appender)

**Parameters**

*a\_appender* the log4c\_appender\_t object

**Returns**

the appender name

### const log4c\_appender\_type\_t \* log4c\_appender\_get\_type (const log4c\_appender\_t \* a\_appender)

**Parameters**

*a\_appender* the log4c\_appender\_t object

**Returns**

the appender operations

### void \* log4c\_appender\_get\_udata (const log4c\_appender\_t \* a\_appender)

**Parameters**

*a\_appender* the log4c\_appender\_t object

**Returns**

the appender user data

### log4c\_appender\_t \* log4c\_appender\_new (const char \* a\_name)

Constructor for log4c\_appender\_t.

### int log4c\_appender\_open (log4c\_appender\_t \* a\_appender)

opens the appender.

**Parameters**

*a\_appender* the log4c\_appender\_t object

### void log4c\_appender\_print (const log4c\_appender\_t \* a\_appender, FILE \* a\_stream)

prints the appender on a stream

**Parameters**

*a\_appender* the log4c\_appender\_t object \
 *a\_stream* the stream

### const log4c\_layout\_t \* log4c\_appender\_set\_layout (log4c\_appender\_t \* a\_appender, const log4c\_layout\_t \* a\_layout)

sets the appender layout

**Parameters**

*a\_appender* the log4c\_appender\_t object \
 *a\_layout* the new appender layout

**Returns**

the previous appender layout

### const log4c\_appender\_type\_t \* log4c\_appender\_set\_type (log4c\_appender\_t \* a\_appender, const log4c\_appender\_type\_t \* a\_type)

sets the appender type

**Parameters**

*a\_appender* the log4c\_appender\_t object \
 *a\_type* the new appender type

**Returns**

the previous appender type

### void \* log4c\_appender\_set\_udata (log4c\_appender\_t \* a\_appender, void \* a\_udata)

sets the appender user data

**Parameters**

*a\_appender* the log4c\_appender\_t object \
 *a\_udata* the new appender user data

**Returns**

the previous appender user data

### const log4c\_appender\_type\_t \* log4c\_appender\_type\_get (const char \* a\_name)

Get a pointer to an existing appender type.

**Parameters**

*a\_name* the name of the appender type to return. \

**Returns**

a pointer to an existing appender type, or NULL if no appender type with the specified name exists.

### const log4c\_appender\_type\_t \* log4c\_appender\_type\_set (const log4c\_appender\_type\_t \* a\_type)

Use this function to register an appender type with log4c. Once this is done you may refer to this type by name both programmatically and in the log4c configuration file.

**Parameters**

*a\_type* a pointer to the new appender type to set.

**Returns**

a pointer to the previous appender type of same name.

Example code fragment:

```
const log4c_appender_type_t log4c_appender_type_s13_file = {
  "s13_file",
  s13_file_open,
  s13_file_append,
  s13_file_close,
};
 log4c_appender_type_set(&log4c_appender_type_s13_file);
```

### void log4c\_appender\_types\_free (void)

free all appender types

### void log4c\_appender\_types\_print (FILE \* fp)

prints all the current registered appender types on a stream

**Parameters**

*fp* the stream

## Author

Generated automatically by Doxygen for log4c from the source code.
