Metadata-Version: 2.4
Name: log-surgeon-ffi
Version: 0.1.0b11
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Rust
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Logging
Classifier: Topic :: System :: Monitoring
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: MacOS :: MacOS X
Summary: Python FFI bindings for log-surgeon: high-performance parsing of unstructured logs into structured data
Keywords: logging,log-parsing,log-analysis,structured-data,performance,observability
Author-email: y-scope <info@yscope.com>
License: Apache License 2.0
Requires-Python: >=3.9
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Bug Tracker, https://github.com/y-scope/log-surgeon/issues
Project-URL: Homepage, https://github.com/y-scope/log-surgeon

# log-surgeon-ffi

Python bindings for [log-surgeon](https://github.com/y-scope/log-surgeon), a
high-performance library for parsing unstructured logs into structured data.

This package ships with type stubs, so IDEs like PyCharm and VS Code provide
autocompletion, parameter hints, and inline documentation out of the box.

## Installation

```bash
pip install log-surgeon-ffi
```

## Quick start

```python
from log_surgeon import Parser

parser = Parser()
parser.add_variable_pattern(
    "timestamp",
    r"(?<hours>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2})",
)
parser.add_variable_pattern("level", r"(?<level>INFO|WARN|ERROR)")
parser.compile()

parser.set_input_stream("10:30:00 INFO starting up")

while True:
    event = parser.next_log_event()
    if event is None:
        break
    print(f"log type: {event.log_type}")
    print(f"message:  {event.message}")
    for var in event.variables:
        print(f"  {var.name}: {var.text}")
        for name, values in var.captures.items():
            print(f"    {name}: {values}")
```

Output:

```text
log type: %timestamp% %level% starting up
message:  10:30:00 INFO starting up
  timestamp: 10:30:00
    hours: ['10']
    minutes: ['30']
    seconds: ['00']
  level: INFO
    level: ['INFO']
```

## Development

To develop the FFI bindings, refer to the
[log-surgeon contributing guide](https://github.com/y-scope/log-surgeon/blob/main/rust/CONTRIBUTING.md).

