// Portage UE 5.5 - lot L3 (journalisation). Voir Docs/Migration/04_Cahier_Des_Charges.md. // // Sous-systeme d'instance de jeu : cree et detruit avec GI, sans aucune modification de // Blueprint. Il n'altere aucun message existant (les comparaisons A/B avec la build 4.27 // reposent sur ces messages) ; il AJOUTE : // - au demarrage, un resume : versions, modules de donnees presents, fichiers par type ; // - en fin de session, un bilan : volume de journal par categorie et verbosite, et les // signatures d'avertissements/erreurs les plus frequentes, dedoublonnees. #pragma once #include "CoreMinimal.h" #include "Containers/Ticker.h" #include "Subsystems/GameInstanceSubsystem.h" #include "LPSessionLogSubsystem.generated.h" class FLPLogCounter; UCLASS() class LIFEPLAY_API ULPSessionLogSubsystem : public UGameInstanceSubsystem { GENERATED_BODY() public: virtual void Initialize(FSubsystemCollectionBase& Collection) override; virtual void Deinitialize() override; /** Ecrit le bilan courant sans attendre la fin de session (console : LifePlay.LogSummary). */ UFUNCTION(BlueprintCallable, Category = "LifePlay|Log") void LogSessionSummary() const; private: void LogStartupSummary() const; /** * Diagnostic (lot L5) : ecrit dans le journal le contenu des variables de l'instance de * jeu (GI) nommees sur la ligne de commande, par exemple -LPDumpVars=MeshSexRace,LegacyPercentage. * Un tableau est ecrit element par element. Sans l'option, ne fait rien. */ void DumpRequestedVariables(const TCHAR* When) const; /** * Diagnostic (lot L5) : avec -LPTraceScriptEx= -LPTraceLocals=, a chaque * exception de script Blueprint dont la description contient (3 premieres * seulement, -LPTraceMax=N pour changer), ecrit la pile d'appel et les variables locales * du cadre dont le nom ou le type de structure contient l'un des mots. * Lot L7i : -LPTraceFunctions= ne retient que les exceptions levees dans ces fonctions ; * -LPTraceDepth=N ecrit aussi les variables locales des N cadres appelants ; * -LPTraceGIVars= ecrit ces variables de l'instance de jeu a chaque releve. * Sans l'option, rien n'est branche : le moteur garde son comportement de journal normal. */ void StartScriptExceptionTrace(); /** * Diagnostic (lot L7i) : avec -LPDumpOnLog=, chaque fois qu'une ligne du journal contient * (au plus une fois toutes les 5 s, -LPDumpMax=N releves, 20 par defaut), ecrit 1,5 s plus * tard les proprietes nommees par -LPDumpPaths= a partir de l'instance de jeu (GI) : un * chemin "PlayerCharacter.Race" suit la propriete objet PlayerCharacter puis lit Race. * Sans l'option, rien n'est branche. */ void StartLogTriggeredDump(); void DumpPaths(int32 Index, const FString& Line) const; FDelegateHandle ScriptExceptionHandle; TSharedPtr Counter; TSharedPtr Trigger; TArray DumpPathList; FTSTicker::FDelegateHandle EveryHandle; double StartTime = 0.0; };