logo SERENITY
Game Systems Foundation
Search Results for

    Show / Hide Table of Contents

    Namespace Serenity.Logging.Infrastructure.Editor.Builder

    Classes

    CreateLoggingProfileWindow

    Step-by-step window for creating or updating the Logging aggregate's console sink, file sink, optional structured sink (plus its backend), and profile in one run. Mirrors Serenity.SystemConfiguration.Infrastructure.Editor.Builder.CreateSystemConfigurationSettingsWindow's shape: the window only collects input and renders results, LoggingProfileCreator does the actual validation and generation work.

    LoggingProfileCreator

    Generates (or updates) the assets the Logging aggregate needs to boot with a working default logger: the UnityConsoleLogSettings sink, the UnityFileLogSettings sink, the optional UnityStructuredLogSettings sink (plus its shared backend asset, authored through the same StructuredBackendAuthoringFactory engine GameSave/GameProgress use), and a UnityLogProfile wired to whichever sink(s) are enabled. Today the only tool that creates any of these is the one-shot Setup Assistant (console/file settings only, via generic recipe assets) — this is the first dedicated creation wizard for the aggregate, and the first ever for UnityLogProfile, which otherwise has no authoring tool at all.

    Resolution differs per asset, matching how the runtime actually discovers each one: UnityConsoleLogInstaller/Serenity.EventDispatcher.Installation.Installers.UnityFileLogInstaller each fall back to UnityAssetUtils.LoadAllFromAnyBlocking<T> over the module:logging label and use the first match — so the two sink settings are project-wide singletons (ambiguity is a warning, never an error), resolved the same way Serenity.SystemConfiguration.Infrastructure.Editor.Builder.SystemConfigurationSettingsCreator resolves its own settings asset, through the shared SettingsAssetAuthoring engine. UnityStructuredLogSettings resolves the SAME way while the composition root's StructuredLogSettings list is empty — UnitySerenityInstaller.InstallStructuredLogService then runs the same zero-config Addressables-label pass — so this wizard authors it with the identical singleton-resolution/ambiguity-warning behavior as Console/File, even though the runtime also supports N structured instances once the list is populated by hand. UnityLogProfile is different: UnitySerenityInstaller.LogProfile is assigned directly on the composition root, and the shipped project already carries two of them side by side (EditorLogProfile, StandaloneLogProfile) — so a profile resolves by Id within OutputFolderPath, the same by-Id-in-folder pattern Serenity.AssetPrefetcher.Infrastructure.Editor.Builder.PrefetchPolicyCreator uses for its N PrefetchPolicyProfile rows.

    DefaultLoggerKey uses the literal "console"/"file"/"structured"(:"{Id}") keys, not an assembly-qualified type name — even though the two profiles shipped with the project (EditorLogProfile, StandaloneLogProfile) use AQN strings. UnitySerenityInstaller.GetLogServiceFromKeyOrTypeName recognizes all of them directly, but a literal key survives a class rename or namespace move that would silently break an AQN-based profile; a wizard-authored profile should not carry a value that can bit-rot.

    CreateLoggingProfileWindow only collects input and renders results; every asset mutation lives here.

    LoggingProfileCreator.Input

    Everything needed to create or update the console sink, the file sink, and the profile.

    LoggingProfileCreator.Result

    Outcome of a Create(Input) call.

    Enums

    LoggingProfileCreator.DefaultLoggerChoice

    In this article
    © 2026 Serenity. All Rights Reserved