Skip to content

What is Logdy?

Logdy is a multi-purpose DevOps tool that enhances productivity in the terminal.

Unix philosophy

Logdy is a single-binary that you add to your PATH so it's available just like any other tool: grep, awk, sed, jq. No installations, no deployments, no compilations. It works locally, so it's also secure.

bash
# use with any shell command
$ tail -f file.log | logdy

For who?

  • software engineers,
  • game developers,
  • site reliability engineers,
  • sys admins,
  • data scientists

and other professions that spend time with terminal logs or terminal output.

How it works?

Logdy improves productivity by recording the output of the processes, whether that's standard output or a file, and routes it to a web UI.

The web UI is served by Logdy on a specific port and accessible on a local host. The UI is a reactive, low-latency web application that automatically generates filters and allows you to browse and search through the logs.

bash
# use with any shell command
$ tail -f file.log | logdy 

# run with your your app
$ node app.js | logdy
$ py script.py | logdy 
$ go run main.go | logdy

# devops enabled
$ kubectl logd -f nginx | logdy

# Logdy has couple of run modes, 'follow' new lines for multiple files
$ logdy follow file1.log file2.log file3.log

Hackability with TypeScript

You can filter, parse, transform messages lines by writing TypeScript code within the browser (and it never leaves the browser too!). This gives you the ability to express any logic you can think ofm without diving into intrisics of tools like awk, sed, jq or grep.

ts
(line: Message): Message | void => {
    if(line.json_content.last_name){
        // masking PII
        line.json_content.last_name = line.json_content.last_name.substring(0, 3)+"..."
    }
    return line;
}

Embed into Golang app

You can also use Logdy as a library in your Golang based project, navigate to this chapter in the documentation for more details.

Use cases

There are many use cases for Logdy, a few are listed on a blog and in the docs: