From ecede42501072134bd87157a1f18f937d8e0f1c2 Mon Sep 17 00:00:00 2001 From: Dayo Lawal Date: Thu, 17 Jun 2021 13:31:19 -0500 Subject: [PATCH] Fixing logging and cleaning up AzQtApplication Signed-off-by: Dayo Lawal --- .../Application/AzQtApplication.cpp | 3 +- .../Application/AzQtApplication.h | 13 ++--- .../Application/AzQtTraceLogger.cpp | 49 +++++++++++++++++++ .../Application/AzQtTraceLogger.h | 12 ++--- .../Code/Source/MaterialEditorApplication.h | 2 +- 5 files changed, 60 insertions(+), 19 deletions(-) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.cpp index ff0154f5e9..67c72f6e5d 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.cpp @@ -13,13 +13,14 @@ #include #include // This should be the first include to make sure Windows.h is defined with NOMINMAX +#include namespace AzQtComponents { AzQtApplication::AzQtApplication(int& argc, char** argv) : QApplication(argc, argv) - , m_impl(new AzQtTraceLogger) + , m_traceLogger(new AzQtTraceLogger) { // Use a common Qt settings path for applications that don't register their own application name if (QApplication::applicationName().isEmpty()) diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.h b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.h index cf180ff1cc..32221836c1 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.h +++ b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtApplication.h @@ -14,13 +14,8 @@ #include -#include -#include -#include -#include -#include #include - +#include namespace AzQtComponents { @@ -28,14 +23,14 @@ namespace AzQtComponents : public QApplication { public: - AzQtApplication(int& argc, char** argv); + AzQtApplication(int& argc, char** argv); + private: AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING - AZStd::unique_ptr m_impl; + AZStd::unique_ptr m_traceLogger; AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING }; - } // namespace AzQtComponents diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.cpp index 46e8ba8782..f5fddf3689 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.cpp @@ -12,8 +12,21 @@ #include +#include +#include + namespace AzQtComponents { + AzQtTraceLogger::AzQtTraceLogger() + { + AZ::Debug::TraceMessageBus::Handler::BusConnect(); + } + + AzQtTraceLogger::~AzQtTraceLogger() + { + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); + } + bool AzQtTraceLogger::OnOutput(const char* window, const char* message) { if (m_logFile) @@ -26,5 +39,41 @@ namespace AzQtComponents } return false; } + + void AzQtTraceLogger::WriteStartupLog() + { + using namespace AzFramework; + + AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); + AZ_Assert(fileIO != nullptr, "FileIO should be running at this point"); + + // There is no log system online so we have to create your own log file. + char resolveBuffer[AZ_MAX_PATH_LEN] = { 0 }; + fileIO->ResolvePath("@user@", resolveBuffer, AZ_MAX_PATH_LEN); + + // Note: @log@ hasn't been set at this point + AZStd::string logDirectory; + StringFunc::Path::Join(resolveBuffer, "log", logDirectory); + fileIO->SetAlias("@log@", logDirectory.c_str()); + + fileIO->CreatePath("@root@"); + fileIO->CreatePath("@user@"); + fileIO->CreatePath("@log@"); + + AZStd::string logPath; + StringFunc::Path::Join(logDirectory.c_str(), "MaterialEditor.log", logPath); + + m_logFile.reset(aznew LogFile(logPath.c_str())); + if (m_logFile) + { + m_logFile->SetMachineReadable(false); + for (const LogMessage& message : m_startupLogSink) + { + m_logFile->AppendLog(LogFile::SEV_NORMAL, message.window.c_str(), message.message.c_str()); + } + m_startupLogSink = {}; + m_logFile->FlushLog(); + } + } } // namespace AzQtComponents diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.h b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.h index f94ce5c809..505da253c5 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.h +++ b/Code/Framework/AzQtComponents/AzQtComponents/Application/AzQtTraceLogger.h @@ -20,14 +20,8 @@ namespace AzQtComponents class AzQtTraceLogger : private AZ::Debug::TraceMessageBus::Handler { public: - AzQtTraceLogger() - { - AZ::Debug::TraceMessageBus::Handler::BusConnect(); - } - ~AzQtTraceLogger() - { - AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); - } + AzQtTraceLogger(); + ~AzQtTraceLogger(); protected: ////////////////////////////////////////////////////////////////////////// @@ -35,6 +29,8 @@ namespace AzQtComponents bool OnOutput(const char* window, const char* message) override; ////////////////////////////////////////////////////////////////////////// + void WriteStartupLog(); + struct LogMessage { public: diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/MaterialEditorApplication.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/MaterialEditorApplication.h index f6ad0010d8..f5431ddd96 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/MaterialEditorApplication.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/MaterialEditorApplication.h @@ -99,7 +99,7 @@ namespace MaterialEditor ////////////////////////////////////////////////////////////////////////// // AZ::Debug::TraceMessageBus::Handler overrides... bool OnOutput(const char* window, const char* message) override; - ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// void CompileCriticalAssets();