F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
ActiveTextLogger.cpp
Go to the documentation of this file.
1 // \copyright
2 // Copyright 2009-2015, by the California Institute of Technology.
3 // ALL RIGHTS RESERVED. United States Government Sponsorship
4 // acknowledged.
5 
7 #include <Fw/Types/Assert.hpp>
8 #include <Fw/Logger/Logger.hpp>
9 #include <ctime>
10 
11 namespace Svc {
12 
13  // ----------------------------------------------------------------------
14  // Initialization/Exiting
15  // ----------------------------------------------------------------------
16 
19  m_log_file()
20  {
21 
22  }
23 
25  {
26 
27  }
28 
29  // ----------------------------------------------------------------------
30  // Handlers to implement for typed input ports
31  // ----------------------------------------------------------------------
32 
33  void ActiveTextLogger::TextLogger_handler(NATIVE_INT_TYPE portNum,
34  FwEventIdType id,
35  Fw::Time &timeTag,
36  const Fw::LogSeverity& severity,
37  Fw::TextLogString &text)
38  {
39 
40  // Currently not doing any input filtering
41  // TKC - 5/3/2018 - remove diagnostic
42  if (Fw::LogSeverity::DIAGNOSTIC == severity.e) {
43  return;
44  }
45 
46  // Format the string here, so that it is done in the task context
47  // of the caller. Format doc borrowed from PassiveTextLogger.
48  const char *severityString = "UNKNOWN";
49  switch (severity.e) {
51  severityString = "FATAL";
52  break;
54  severityString = "WARNING_HI";
55  break;
57  severityString = "WARNING_LO";
58  break;
60  severityString = "COMMAND";
61  break;
63  severityString = "ACTIVITY_HI";
64  break;
66  severityString = "ACTIVITY_LO";
67  break;
69  severityString = "DIAGNOSTIC";
70  break;
71  default:
72  severityString = "SEVERITY ERROR";
73  break;
74  }
75  // Overflow is allowed and truncation accepted
77  (void) intText.format("EVENT: (%" PRI_FwEventIdType ") (%" PRI_FwTimeBaseStoreType ":%" PRIu32 ",%" PRIu32 ") %s: %s\n",
78  id, static_cast<FwTimeBaseStoreType>(timeTag.getTimeBase()), timeTag.getSeconds(), timeTag.getUSeconds(),
79  severityString, text.toChar());
80 
81  // Call internal interface so that everything else is done on component thread,
82  // this helps ensure consistent ordering of the printed text:
83  this->TextQueue_internalInterfaceInvoke(intText);
84  }
85 
86  // ----------------------------------------------------------------------
87  // Internal interface handlers
88  // ----------------------------------------------------------------------
89 
90  void ActiveTextLogger::TextQueue_internalInterfaceHandler(const Fw::InternalInterfaceString& text)
91  {
92 
93  // Print to console:
94  Fw::Logger::log(text);
95 
96  // Print to file if there is one:
97  (void) this->m_log_file.write_to_log(text.toChar(), text.length()); // Ignoring return status
98 
99  }
100 
101  // ----------------------------------------------------------------------
102  // Helper Methods
103  // ----------------------------------------------------------------------
104 
105  bool ActiveTextLogger::set_log_file(const char* fileName, const U32 maxSize, const U32 maxBackups)
106  {
107  FW_ASSERT(fileName != nullptr);
108 
109  return this->m_log_file.set_log_file(fileName, maxSize, maxBackups);
110  }
111 
112 
113 } // namespace Svc
Definition: Time.hpp:9
#define PRI_FwEventIdType
Definition: FpConfig.h:104
PlatformIntType NATIVE_INT_TYPE
Definition: BasicTypes.h:55
#define PRI_FwTimeBaseStoreType
Definition: FpConfig.h:80
static void log(const char *format,...)
log a formated string with supplied arguments
Definition: Logger.cpp:21
TimeBase getTimeBase() const
Definition: Time.cpp:143
const char * toChar() const
ActiveTextLogger(const char *compName)
Component constructor.
T e
The raw enum value.
Software diagnostic events.
Less important informational events.
An activity related to commanding.
A less serious but recoverable event.
U32 getSeconds() const
Definition: Time.cpp:135
SizeType length() const
Get length of string.
Definition: StringBase.cpp:121
A serious but recoverable event.
virtual ~ActiveTextLogger()
Component destructor.
Enum representing event severity.
Auto-generated base for ActiveTextLogger component.
U32 FwEventIdType
Definition: FpConfig.h:103
FormatStatus format(const CHAR *formatString,...)
write formatted string to buffer
Definition: StringBase.cpp:55
bool set_log_file(const char *fileName, const U32 maxSize, const U32 maxBackups=10)
Set log file and max size.
Definition: LogFile.cpp:81
Important informational events.
U32 getUSeconds() const
Definition: Time.cpp:139
bool set_log_file(const char *fileName, const U32 maxSize, const U32 maxBackups=10)
Set log file and max size.
A fatal non-recoverable event.
bool write_to_log(const char *const buf, const U32 size)
Write the passed buf to the log if possible.
Definition: LogFile.cpp:40
void TextQueue_internalInterfaceInvoke(const Fw::InternalInterfaceString &text)
Internal interface base-class function for TextQueue.
#define FW_ASSERT(...)
Definition: Assert.hpp:14