On perspective, pixel density, and why there is no spoon.


Most people open a log file looking for a specific thing. They find what they expected, or they don’t find it and conclude the answer isn’t there.

The log file isn’t the constraint. The question is.


Every log line is a system telling you something about what it was doing at a specific moment. What it received, what it decided, what it returned, how long it took, what state it was in. Something broke — find the stack trace. Set up a monitor — get notified when error rate exceeds a threshold. These are legitimate uses. They are also the least interesting thing you can do with a log.

The meaning of any individual line is narrow. The aggregate shows the shape, density, and rhythm. The monitoring use case is table stakes. What I am interested in is everything else.


Before I parse a log, before I query, before I grep, before I analyze, I look at it. The shape of it. How many lines wrap in a typical response? What does a healthy transaction look like visually? What is the character density of a normal operation versus an abnormal one?

The shape of data is information before you have parsed it.

A response that generates three lines of log output and a response that generates forty lines are telling you something different before you have read either of them. A cluster of entries that are visually heavier, more output, more wrapping, more density, stands out from the surrounding baseline the way a dark region stands out in a grayscale image.

I am colorblind. I spent years in art working exclusively in pencil and charcoal because I was more comfortable reading value and contrast than color. The ability to read density and shape before reading content turns out to be an unusually useful thing to bring to a log.

You do not need to be colorblind to develop this. You need to train yourself to look before you read. The shape will tell you where to look before the content tells you what you found.


The same log file looks completely different depending on how you approach it.

Scale. An anomaly invisible in a daily aggregate becomes obvious in per-second resolution. A pattern invisible in per-second resolution reveals itself when you step back to weekly trends. Choosing the resolution is not a technical decision, it is a perceptual one. Most teams pick one level and stay there. The interesting things often live at a different one.

Grouping. Raw log lines are undifferentiated. The moment you group them, by endpoint, by user agent, by region, by response code, by session, you create a new object to look at with new shape and new contrast. Different groupings reveal different things. There is no single correct grouping. There is only the grouping that makes the thing you are looking for visible.

Filtering. People filter to reduce noise before they have understood what the noise is telling them. Sometimes the noise is the signal. Filter last, not first: look at the full shape, find where the density concentrates, then filter to interrogate that region.

Empty space. When I was investigating a pattern of 401 errors, the first thing I noticed was where they weren’t. They weren’t distributed across the user base. They weren’t correlated with load. The absence was the signal. Grouping by user agent revealed the errors were concentrated in browser calls. The regional distribution found the misbehaving plugin active in certain deployment configurations. The answer was in the logs, in the space where normal traffic should have been and wasn’t.


There is no log. There is only what you bring to it.

That is either liberating or terrifying, depending on your relationship to open-ended problems.

I find it liberating. The data is always richer than the question you started with. The answer is in there. You just have to find the right lens.