This repository has been archived on 2026-10-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/manual/basics/messages-and-logs.html
T
2026-09-15 01:12:50 +08:00

357 lines
21 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Messages and Logs | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Messages and Logs | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="messages-and-logs">Messages and Logs</h1>
<p>Where a message lands decides how long it lasts and who else can see it, and that is usually more
useful than what it said at the time. The toasts and the footer belong to one browser and are gone
at its next reload; the four session message lists and the day's log file are held by the service.
Picking the right surface is most of the difference between a specific question and a vague one.</p>
<h2 id="where-a-message-can-land">Where a message can land</h2>
<p>The application has several places to put a message, and they do not carry the same things.</p>
<ul>
<li><strong>A toast</strong> — bottom right, for a few seconds, then gone. The only surface that interrupts, and
the only one that keeps nothing itself.</li>
<li><strong>The footer's latest line, and the recent list behind it</strong> — a toast is copied here before it is
shown, so this list is the toast's afterlife. Two kinds never arrive: a toast carrying neither
message nor caption, and the notices Tool House, the <strong>Spindle Capability</strong> editor and the
Controller panels raise, which are shown once and not kept. A small number of status lines go the
other way — written straight here, and never toasted at all.</li>
<li><strong>The footer's session strip</strong> — the middle of the bar, drawn once a run has produced something
and empty until then.</li>
<li><strong>The footer's background zone</strong> — the right end, drawn only while one of the <strong>Project</strong> menu's
operations is in flight — <strong>Close Project</strong> included — naming the operation and the path it is
working on.</li>
<li><strong>The Session Messages panel</strong> — on the Execution page, four lists kept by the service.</li>
<li><strong>The Log Viewer</strong> — the file the service itself writes for the current day.</li>
</ul>
<p>The footer summarises; it does not hold. Everything a run reports also goes into one of the panel's
four lists, and the panel is where it stays.</p>
<h2 id="messages-a-project-load-raises">Messages a project load raises</h2>
<p>Opening or re-reading a project can report holes in it — a referenced STL missing from disk, or a
runner configuration the file names that would not load, leaving the project on a default one.
<strong>None of these fail the load.</strong> The project opens, the body that needed the missing file simply
comes up without its geometry, and the action still reports success. The message is the only thing
that says otherwise.</p>
<p>Two neighbouring cases go elsewhere. A mesh-geometry <code>.wct</code> file a raw geometry names but that is not
there raises nothing here at all, because the load never opens it; the first word about it comes when
the meshed geometry is next needed, and that message belongs to the run, so it lands in the Session
Messages panel like any other. A side file the project names as a reference — the machine chain, the
spindle capability, a material, a cutting parameter set — is the opposite case: a missing one fails
the load outright, and that arrives as an error rather than as one of the messages described here.
See <a href="projects.html">Projects</a>.</p>
<p>These messages then take a path of their own, and it has a consequence worth knowing before that
path is relied on. A project file operation runs outside any session, so the panel's four lists —
which belong to the service, and are where everything a <em>run</em> reports stays — never see them. Instead the first five
errors and warnings are toasted, anything past that goes straight to the footer's recent list, and
one more toast says how many did not get their own. Anything milder than a warning is not surfaced in
the window at all.</p>
<p>That leaves the footer's recent list holding the only copy in the window, and that list is the
browser's: <strong>a reload empties it</strong>. So read the messages when a project opens with pieces missing, or
read <a href="#the-service-log">the service log</a>, which has them either way. The Session Messages panel will
not.</p>
<h2 id="the-footer">The footer</h2>
<p>The left region is this browser's own record and nothing else's. The list behind the latest line is
newest first, capped at a hundred entries, emptied by its <strong>Clear</strong> button — which takes the latest
line back to <em>Ready</em> with it — and by a reload, and written down nowhere — nothing about it survives closing the tab. Each entry keeps the wording it
was raised in, so switching the language leaves the list as a mixture while the panel's lists
re-render at once. The frame page describes the regions themselves: see
<a href="the-app-window.html">The Application Window</a>.</p>
<p><strong>Nothing marks the list as having something new in it.</strong> The button carries no badge and no dot,
deliberately, because a toast has already drawn attention once. The consequence is the failure this
page exists to prevent: a message that never toasted at all, or one whose few seconds expired while
the window was behind something else, is invisible until that menu is opened by hand. Opening it after an action
that seemed to do nothing is the cheapest check available.</p>
<p>The middle strip is the other way round — the service pushes it, so every connected browser sees the
same run activity, and each browser keeps its own short ring of the last entries behind it. What it
last showed stays on the bar after the run has ended; a project change is what empties the ring and
takes the strip away with it. A cursor line carries <code>Sn</code> and the sentence index it sits on; a
message line carries whatever anchor the message supplies. Two limits are worth knowing: the strip
mirrors the newest message across three of the four lists — nothing from <strong>NC Manipulation</strong> reaches
it — and it is sampled rather than recorded. There is no refresh interval to tune: the service
sends the newest message and, while that send is still on its way to the browsers, keeps only the
newest of whatever arrives behind it, so a message that lands inside that window is replaced before
it was ever sent and never appears on the strip at all. The cursor line is thinned the same way
under a fast run. The lists on the service drop nothing.</p>
<h2 id="the-session-message-panel">The session message panel</h2>
<p>The panel sits on the Execution page, in the middle column, below the 3D Rendering Canvas. Its
header row reads <strong>Session Messages</strong> and stays visible when the panel is collapsed, so a grey strip
with that name on it is the panel, shut.</p>
<p><strong>The whole column can be switched off, and nothing on the page says so.</strong> The column quick-toggles
at the right-hand end of the menu bar include one whose tooltip reads <em>Toggle the Execution canvas &amp;
messages column</em>; with it off, neither the panel nor its header row is drawn, and the page simply
looks like it has fewer parts. That choice is the browser's and survives a reload. The expanded or
collapsed state of the panel itself is not: it is kept by the service, and is therefore the same for
every browser that opens the page afterwards.</p>
<p>Four tabs, each a separate list:</p>
<table>
<thead>
<tr>
<th>Tab</th>
<th>What it holds</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Shell</strong></td>
<td>The session's own lifecycle and routine progress — what began, what finished, what was refused. It is empty outside a session, because the list is created with the session.</td>
</tr>
<tr>
<td><strong>NC Diagnostics</strong></td>
<td>What the NC pipeline reported while playing a program.</td>
</tr>
<tr>
<td><strong>Step Diagnostics</strong></td>
<td>What was reported against a machining step rather than against program text.</td>
</tr>
<tr>
<td><strong>NC Manipulation</strong></td>
<td>What converting a played program to NC, or optimising one, reported. Each such run clears the list before it starts filling it again.</td>
</tr>
</tbody>
</table>
<p>A tab shows a small count badge only once its list has something in it, so an empty sink is a tab
with nothing beside its name.</p>
<p>Where a message carries a position, the row shows it in a monospaced anchor column: a step
diagnostic names its step, and its block as well when it has one; an NC diagnostic names the block's
position in execution order, and its tooltip adds the source file and line where the diagnostic
carries them. <strong>Not every NC diagnostic has one</strong> — a complaint about the pipeline rather than about
a particular block has no anchor to show, and shell messages never have one. A run of consecutive
identical messages arrives already folded into a single row with a multiplier badge. A row with more
behind its one line carries a chevron; clicking it opens what the message brought with it, with a
<strong>Copy</strong> of its own.</p>
<p>Each tab filters independently: a <strong>Severity</strong> list, a <strong>Category</strong> list, a <em>Filter text…</em> box, and
a <strong>Reset</strong>. The badge at the right of that toolbar reads two numbers separated by a slash, and they
count different things — rows currently shown on the left, raw messages on the right, so folding
alone makes them differ, and on a long session the left number stops at the most recent thousand
rows while the right goes on counting. That badge is also the tab's connection indicator: it is
outlined green only while the connection behind that list is up, and its tooltip names the state.
<strong>Export</strong> writes the tab's filtered rows to a CSV file.</p>
<div class="IMPORTANT">
<h5>Important</h5>
<p>Two different controls on this screen answer to <strong>Reset</strong>, and only one of them is labelled with
it. The labelled one sits in each tab's filter toolbar and clears that tab's three filters and
nothing else. The other is the transport group's eject button, which carries no text at all and
reads <strong>Reset</strong> only in its tooltip; it ends the session and empties three of the four lists —
<strong>Shell</strong>, <strong>NC Diagnostics</strong> and <strong>Step Diagnostics</strong>. Only <strong>NC Manipulation</strong> is left standing,
and the same is true of a project change: opening, reloading, creating or closing a project
empties the same three and leaves that one alone. It is the list to read for what the last
conversion or optimisation said, long after the run that produced it has been reset away.</p>
</div>
<p><strong>The lists are the service's, not the browser's.</strong> They survive a reload, a move to another screen
and a second tab opened on the same service, and two browsers watching the same run read the same
four lists.</p>
<p>That is also what makes collapsing the panel harmless. Collapsing it takes it down entirely rather
than hiding it, and all four connections drop with it. Nothing is lost, because nothing was being
held here. What does not come back is the arrangement: re-expanding builds the panel fresh, on the
first tab, with every tab's severity, category and text filters back at their defaults.</p>
<h2 id="the-service-log">The service log</h2>
<p><strong>Show Log</strong>, near the right-hand end of the menu bar, opens the Log Viewer at <code>/preference/log</code>.
Its tooltip reads <em>View the application log</em>, and the page it opens is titled <strong>Log Viewer</strong>.</p>
<p>The viewer shows one file: the one the service is writing for the current day. There is no way to
reach an earlier day's file from this page.</p>
<ol>
<li>Read the header row for what is on screen — the day the file covers, the time it was last
fetched, and how many lines came back. The pane opens at the end of the file, which is where the
newest lines are, and stays at the end through later fetches unless it has been scrolled away
from the bottom.</li>
<li>Press <strong>Refresh</strong> for a fresh copy, or switch <strong>Auto</strong> on and choose an interval — two, five, ten
or thirty seconds — to have it re-fetched on its own.</li>
<li>Take the text with <strong>Copy</strong>, or the whole file with <strong>Download</strong>. Both are unavailable while
there is nothing loaded.</li>
</ol>
<p><strong>Switch Auto off before leaving the page.</strong> Moving to another screen does not stop it: the page is
kept alive behind the one on screen and goes on re-fetching at its interval. Reloading the browser
stops it, and so does a project change, because both rebuild the page area from scratch.</p>
<p>An empty file and a missing file look almost alike and are not the same thing. Both show <em>No log
file for today.</em>, and both hide the line count entirely — no count is drawn at all rather than one
reading zero, so the caption simply being absent is itself the signal that nothing came back. The
day badge is what separates them: when the file exists, the day comes from the service's own clock;
when there is no file at all, it comes from the browser's clock in UTC, which need not name the same
day — before eight in the morning in Taipei it names the day before. The service itself never
leaves the file empty: the day's file comes into being with its first line already in it, so an
empty file is one that something outside the service emptied.</p>
<p>A fetch that fails replaces the pane with the reason and a <strong>Retry</strong> button, and posts the reason to
the footer under the viewer's own name — one of the few lines that reaches the footer without ever
having been a toast.</p>
<p>The Log Viewer at <code>/preference/log</code>, on a service that has been running for a while. The header
carries the page name, the day the file covers, when it was last loaded and its line count, then the
<strong>Auto</strong> toggle — off here — beside its interval, and <strong>Refresh</strong>, <strong>Copy</strong> and <strong>Download</strong>. The
lines in view are the service's own connection traffic for a whole screen: everything a page
connects — the four message tabs among them — arrives in one block and leaves in another once the
page is left, and most of what lies between is the rendering canvas being set up and reporting
frames.</p>
<p><img src="messages-and-logs-img/log-viewer.en.png" alt="The Log Viewer: a header row with a day badge, a last-loaded time, a line count, an Auto toggle switched off beside a 5 s interval, and Refresh, Copy and Download at the right; below it a dark monospaced pane, scrolled to the end of the file, whose lines record a screen's connections arriving together, the four message lists among them, then a stretch of canvas rendering and frame compression, then the same connections leaving together"></p>
<p>This is the log of the <strong>service</strong>, not of the browser. A message seen in the footer reaches it only
if the service also recorded it, and much of what it holds was never shown anywhere in the
application.</p>
<h2 id="which-surface-answers-which-question">Which surface answers which question</h2>
<table>
<thead>
<tr>
<th>To find out</th>
<th>Read</th>
</tr>
</thead>
<tbody>
<tr>
<td>what the last action reported</td>
<td>the footer's latest line</td>
</tr>
<tr>
<td>what was reported while another screen was open</td>
<td>the recent list behind it — the only copy the window keeps</td>
</tr>
<tr>
<td>where a run has got to</td>
<td>the footer's session strip</td>
</tr>
<tr>
<td>whether one of the Project menu's operations is still running</td>
<td>the footer's background zone</td>
</tr>
<tr>
<td>what the session itself started, finished or refused</td>
<td>the <strong>Shell</strong> tab</td>
</tr>
<tr>
<td>why a program did not do what its text says</td>
<td>the <strong>NC Diagnostics</strong> tab</td>
</tr>
<tr>
<td>why a move behaved the way it did</td>
<td>the <strong>Step Diagnostics</strong> tab</td>
</tr>
<tr>
<td>what the last conversion or optimisation reported</td>
<td>the <strong>NC Manipulation</strong> tab, which a reset does not clear</td>
</tr>
<tr>
<td>why a project opened with pieces missing</td>
<td>the footer's recent list, or the Log Viewer — <strong>not</strong> the Session Messages panel</td>
</tr>
<tr>
<td>what the service recorded, shown or not</td>
<td>the Log Viewer</td>
</tr>
</tbody>
</table>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Basics</a> — the rest of what is true on every screen</li>
<li><a href="the-app-window.html">The Application Window</a> — the footer's three regions, and the menu bar Show Log sits on</li>
<li><a href="preferences.html">Preferences</a> — the Preference menu that Show Log is not an entry of, and what else the service keeps for everyone on it</li>
<li><a href="projects.html">Projects</a> — the actions behind the footer's background zone, and what a project change clears</li>
<li><a href="../run/when-something-goes-wrong.html">When Something Goes Wrong</a> — using these lists on a run that did not do what was expected</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>