# File

The *File* output plugin lets you write the data received through the input plugin to file.

## Configuration parameters

The plugin supports the following configuration parameters:

| Key       | Description                                                                                                                                           | Default    |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| `Path`    | Directory path to store files. If not set, Fluent Bit will write the files on it's own positioned directory. Available in Fluent Bit 1.4.6 and later. | *none*     |
| `File`    | Set filename to store the records. If not set, the filename will be the `tag` associated with the records.                                            | *none*     |
| `Format`  | The [format](#format) of the file content.                                                                                                            | `out_file` |
| `Mkdir`   | Recursively create output directory if it doesn't exist. Permissions set to `0755`.                                                                   | *none*     |
| `Workers` | The number of [workers](https://docs.fluentbit.io/manual/4.0/administration/multithreading#outputs) to perform flush operations for this output.      | `1`        |

## Format

This plugin uses the following formats:

### `out_file`

Output `time`, `tag`, and `json` records. There are no configuration parameters for `out_file`.

```
tag: [time, {"key1":"value1", "key2":"value2", "key3":"value3"}]
```

### Plain

Output the records as JSON (without additional `tag` and `timestamp` attributes). There are no configuration parameters for plain format.

```json
{"key1":"value1", "key2":"value2", "key3":"value3"}
```

### CSV

Output the records in CSV format. CSV mode supports an additional configuration parameter.

| Key         | Description                                                                                                                                                              |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Delimiter` | The character to separate each data. Accepted values: `\t` (or `tab`), (`space`), or `,` (`comma`). Other values are ignored and will use default silently. Default: `,` |

```
time[delimiter]"value1"[delimiter]"value2"[delimiter]"value3"
```

### LTSV

Output the records in LTSV format. LTSV mode supports an additional configuration parameter.

| Key               | Description                                                 |
| ----------------- | ----------------------------------------------------------- |
| `Delimiter`       | The character to separate each pair. Default: `t` (`TAB`)   |
| `Label_Delimiter` | The character to separate label and the value. Default: `:` |

```
field1[label_delimiter]value1[delimiter]field2[label_delimiter]value2\n
```

### Template

Output the records using a custom format template.

| Key      | Description                                    |
| -------- | ---------------------------------------------- |
| Template | The format string. Default: `{time} {message}` |

This accepts a formatting template and fills placeholders using corresponding values in a record.

For example, if you set up the configuration like the following:

{% tabs %}
{% tab title="fluent-bit.yaml" %}

```yaml
pipeline:
  inputs:
    - name: mem

  outputs:
    - name: file
      match: '*'
      format: template
      template: '{time} used={Mem.used} free={Mem.free} total={Mem.total}'
```

{% endtab %}

{% tab title="fluent-bit.conf" %}

```
[INPUT]
  Name mem

[OUTPUT]
  Name file
  Match *
  Format template
  Template {time} used={Mem.used} free={Mem.free} total={Mem.total}
```

{% endtab %}
{% endtabs %}

You will get the following output:

```
1564462620.000254 used=1045448 free=31760160 total=32805608
```

## Get started

You can run the plugin from the command line or through the configuration file.

### Command line

From the command line you can let Fluent Bit count up a data with the following options:

```shell
fluent-bit -i cpu -o file -p path=output.txt
```

### Configuration file

In your main configuration file append the following:

{% tabs %}
{% tab title="fluent-bit.yaml" %}

```yaml
pipeline:
  inputs:
    - name: cpu
      tag: cpu

  outputs:
    - name: file
      match: '*'
      path: output_dir
```

{% endtab %}

{% tab title="fluent-bit.conf" %}

```
[INPUT]
  Name cpu
  Tag  cpu

[OUTPUT]
  Name  file
  Match *
  Path  output_dir
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fluentbit.io/manual/4.0/data-pipeline/outputs/file.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
