# Diagnostics (saying something, and silencing something)

> What your app says while it runs, and what the compiler says about it. The first-day mistake is reaching for a print statement — `Log.*` is dual-sided, so one call from a page lands in the browser console AND in `osy logs` under one correlation id spanning client and server.

<!-- id: diagnostics-index · area: diagnostics · stability: stable · html: https://osysharp.com/reference/diagnostics/index/ -->

## Summary        {#summary}
**Two things live here: what your app says at run time, and what the compiler says at build time.**

```osy title="one call, both sides of the wire" test app=diagnostics-index
entity Order {
  [Required, MaxLength(40)] string Code;
  bool Shipped;
}

void ShipOrder(Order order) {
  Log.Information("Order {OrderCode} shipped", order.Code);
  order.Shipped = true;
}
```

## Description    {#description}
**`Log.*` is dual-sided and always available** — no dependency to declare. Called from a page it reaches the
browser console *and* the app's own log, under one correlation id that spans the client call and the server work it
caused, which is what makes `osy logs --tail` the first move when a page misbehaves. Both the template form and an
interpolated string capture searchable fields; the interpolated form is decomposed, not flattened. See
[Log.*](https://osysharp.com/reference/diagnostics/log/).

**A warning you have decided about is silenced where you decided it** — [[SuppressWarning]](https://osysharp.com/reference/diagnostics/suppress-warning/) — not by
turning the rule off globally. A suppression names the rule and sits at the site, so the next reader sees the
decision rather than an absence.

**For what a run actually did, rather than what it said**, the local area has the tools:
[Seeing what happened when your code ran](https://osysharp.com/reference/local/seeing-what-happened/) opens a trace and jumps to the fault, and faults are captured even with tracing off.

## See also   {#see-also}
- [Log.*](https://osysharp.com/reference/diagnostics/log/) — the one logging call, and why it is dual-sided
- [[SuppressWarning]](https://osysharp.com/reference/diagnostics/suppress-warning/) — silencing one rule at one site
- [Seeing what happened when your code ran](https://osysharp.com/reference/local/seeing-what-happened/) — when the log is not enough and you want the run
