ITK  5.3.0
Insight Toolkit
itkThreadLogger.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * https://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef itkThreadLogger_h
19 #define itkThreadLogger_h
20 
21 #include "itkLogger.h"
22 #include <mutex>
23 #include <atomic>
24 
25 #include <string>
26 #include <queue>
27 #include <thread>
28 
29 namespace itk
30 {
41 class ITKCommon_EXPORT ThreadLogger : public Logger
42 {
43 public:
44  using Self = ThreadLogger;
45  using Superclass = Logger;
48 
50  itkTypeMacro(ThreadLogger, Logger);
51 
53  itkNewMacro(Self);
54 
56 
58 
59  using DelayType = unsigned int;
60 
62  typedef enum
63  {
68  FLUSH
69  } OperationType;
70 
74  void
75  SetPriorityLevel(PriorityLevelEnum level) override;
76 
80  PriorityLevelEnum
81  GetPriorityLevel() const override;
82 
83  void
84  SetLevelForFlushing(PriorityLevelEnum level) override;
85 
86  PriorityLevelEnum
87  GetLevelForFlushing() const override;
88 
92  virtual void
93  SetDelay(DelayType delay);
94 
98  virtual DelayType
99  GetDelay() const;
100 
102  void
103  AddLogOutput(OutputType * output) override;
104 
105  void
106  Write(PriorityLevelEnum level, std::string const & content) override;
107 
108  void
109  Flush() override;
110 
111 protected:
113  ThreadLogger();
114 
116  ~ThreadLogger() override;
117 
119  void
120  PrintSelf(std::ostream & os, Indent indent) const override;
121 
122  void
123  ThreadFunction();
124 
125 private:
126  void
127  InternalFlush();
128 
129  using OperationContainerType = std::queue<OperationType>;
130 
131  using MessageContainerType = std::queue<std::string>;
132 
133  using LevelContainerType = std::queue<PriorityLevelEnum>;
134 
135  using OutputContainerType = std::queue<OutputType::Pointer>;
136 
137  std::thread m_Thread;
138 
139  std::atomic<bool> m_TerminationRequested;
140 
142 
144 
146 
148 
149  mutable std::mutex m_Mutex;
150 
152 
153 }; // class ThreadLogger
154 } // namespace itk
155 
156 #endif // itkThreadLogger_h
itk::LoggerBase::PriorityLevelEnum
LoggerBaseEnums::PriorityLevel PriorityLevelEnum
Definition: itkLoggerBase.h:94
itk::ThreadLogger::SET_LEVEL_FOR_FLUSHING
Definition: itkThreadLogger.h:65
itk::ThreadLogger::m_MessageQ
MessageContainerType m_MessageQ
Definition: itkThreadLogger.h:143
itk::ThreadLogger::ADD_LOG_OUTPUT
Definition: itkThreadLogger.h:66
itk::Logger
Used for logging information during a run.
Definition: itkLogger.h:36
itk::LoggerBaseEnums::PriorityLevel
PriorityLevel
Definition: itkLoggerBase.h:43
itk::LoggerBase::OutputType
MultipleLogOutput::OutputType OutputType
Definition: itkLoggerBase.h:92
itk::ThreadLogger::SET_PRIORITY_LEVEL
Definition: itkThreadLogger.h:64
itk::SmartPointer< Self >
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::ThreadLogger::m_LevelQ
LevelContainerType m_LevelQ
Definition: itkThreadLogger.h:145
itk::LightObject
Light weight base class for most itk classes.
Definition: itkLightObject.h:55
itk::LogOutput
Represents an output stream.
Definition: itkLogOutput.h:39
itk::ThreadLogger::m_Delay
DelayType m_Delay
Definition: itkThreadLogger.h:151
itk::ThreadLogger::m_Thread
std::thread m_Thread
Definition: itkThreadLogger.h:137
itk::ThreadLogger::LevelContainerType
std::queue< PriorityLevelEnum > LevelContainerType
Definition: itkThreadLogger.h:133
itk::ThreadLogger::m_OperationQ
OperationContainerType m_OperationQ
Definition: itkThreadLogger.h:141
itk::ThreadLogger::OperationContainerType
std::queue< OperationType > OperationContainerType
Definition: itkThreadLogger.h:129
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnnulusOperator.h:24
itk::ThreadLogger::m_OutputQ
OutputContainerType m_OutputQ
Definition: itkThreadLogger.h:147
itk::ThreadLogger
Providing logging service as a separate thread.
Definition: itkThreadLogger.h:41
itk::ThreadLogger::OutputContainerType
std::queue< OutputType::Pointer > OutputContainerType
Definition: itkThreadLogger.h:135
itk::ThreadLogger::m_TerminationRequested
std::atomic< bool > m_TerminationRequested
Definition: itkThreadLogger.h:139
itk::ThreadLogger::m_Mutex
std::mutex m_Mutex
Definition: itkThreadLogger.h:149
itk::LoggerBase
Used for logging information during a run.
Definition: itkLoggerBase.h:81
itk::ThreadLogger::MessageContainerType
std::queue< std::string > MessageContainerType
Definition: itkThreadLogger.h:131
itk::ThreadLogger::DelayType
unsigned int DelayType
Definition: itkThreadLogger.h:59
itkLogger.h
itk::ThreadLogger::WRITE
Definition: itkThreadLogger.h:67