v0.42.0 - AfterGlow v2 Logger (2026-03-25)¶
What Changed?¶
This release introduces the v2 AfterGlow logger module (src/v2/afterglow.ts).
The new logger adopts a singleton design — all logs from a single GAS execution are accumulated in one globalLogger instance.
It also adds CategoryLogger as a lightweight facade for category-scoped logging, replacing the named registry approach in v1.
What's New¶
Main Feature: AfterGlow v2 Logger¶
What it does:
A lightweight buffered logging system for GAS and JavaScript.
Logs are stored as Ember entries in memory and can be exported as a BareFrame for analysis.
Supports lazy (in-memory only) and eager (immediate output) modes with level filtering.
How to use it:
- Get the singleton logger via
getLogger() - Optionally configure it with
logger.configure() - Log messages using
info,warn,error, ordebug - Export logs as a
BareFramewithtoDataFrame()
Code example:
TypeScript
import { getLogger, getCategoryLogger, clearLogs } from './afterglow';
// Configure and log
const logger = getLogger();
logger.configure({ logLevel: 'debug', logMode: 'eager' });
logger.info('Application started');
logger.warn('High memory usage', { values: [85, 'percent'], category: 'perf' });
logger.error('Database error', { category: 'database' });
// Category-scoped logging
const authLogger = getCategoryLogger('auth');
authLogger.info('User logged in', { values: ['user123'] });
// Export logs as BareFrame
const df = logger.toDataFrame();
const errors = df.filter(row => row.level === 'error');
Added¶
src/v2/afterglow.ts— v2 AfterGlow logger moduleAfterGlowclass withlog,info,warn,error,debug,configure,toMap,toDataFrame,clearmethodsCategoryLoggerclass for category-scoped logging withlog,info,warn,error,debugmethodsgetLogger()— returns the global singletonAfterGlowinstanceclearLogs()— clears all logs from the global singletongetCategoryLogger(category)— creates aCategoryLoggerwrapping the global singletonEmberinterface — structured log entry typeEmberOptions,LoggerOptionsinterfacesLogLevel,LogModetype aliases
Changed¶
AfterGlow.configure(options)replaces the removedapplyLoggerOptions()andconfigureLogger()functionsvaluesfield intoMap()is serialized as JSON string forCell[]type compatibility- Caller detection in
_getCallerName()now skips internal frames by matchingafterglow.tsin the stack trace
Is It Safe to Upgrade?¶
- Breaking Changes: No (v2 is additive; v1
src/afterglow/is unchanged) - Backward Compatible: Yes
v1 afterglow (src/afterglow/) remains unchanged. The v2 module is a new addition in src/v2/afterglow.ts.
Release Details¶
- Date: 2026-03-25
- Version: v0.42.0
- gaslamp: version 93
- pilotlamp: version 50
- Files Changed: 179
- Commits:
0be41f0docs: update README and CLAUDE.md to reflect v2 AfterGlow modulecd3472cdocs(afterglow): update docstrings with accurate descriptions and examples0380887refactor(afterglow): replace applyLoggerOptions/configureLogger with AfterGlow.configure()c4f6dc7docs(afterglow): add @since 0.42.0 to all public API symbols in v2b795114feat(afterglow): add v2 AfterGlow logger modulecb3fa11docs(api): regenerate TypeDoc API reference1aa738fdocs(flamewright): add @deprecated Since 0.42.0 to symbols migrated to src/v2/flame.ts4f125bfdocs(dataframe): update @deprecated tags to Since 0.42.0 and BareFrame5238217docs: rename DataFrameV2 to BareFrame in guides and getting-started
Known Issues¶
_getCallerName()may return"unknown"in bundled GAS environments where filename information is absent from the stack trace.- v2 AfterGlow is not yet exported from
src/v2/index.ts— direct import fromsrc/v2/afterglow.tsis required.
Next Steps¶
- Export v2 AfterGlow from
src/v2/index.tsand register insrc/index.tsfor GAS global namespace - Write
__tests__/v2/afterglow.test.tsfor v2 AfterGlow coverage