rclUE
logUtilities.h
Go to the documentation of this file.
1 
17 #pragma once
18 
19 
20 
21 // UE
22 
23 #include "HAL/UnrealMemory.h"
24 
25 #include "Kismet/GameplayStatics.h"
26 
27 #include "Kismet/KismetSystemLibrary.h"
28 
29 
30 
31 // Ref "Misc/GeneratedTypeName.h"
32 
33 #if defined(_MSC_VER) && !defined(__clang__)
34 
35 #define RCLUE_FUNC_LOG __FUNCSIG__
36 
37 #else
38 
39 #define RCLUE_FUNC_LOG __PRETTY_FUNCTION__
40 
41 #endif
42 
43 
44 
46 
47 #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
48 
49 
50 
51 // clang-format off
52 
53 // to avoid change line by clang-format. Doxygen can't handle constant macro with multiple lines.
54 
65 #define __LOG_INFO__ FString(__FILENAME__).Append(TEXT("@")).Append(FString::FromInt(__LINE__)).Append(TEXT(", ")).Append(RCLUE_FUNC_LOG)
66 
67 // clang-format on
68 
69 
70 
83 #define UE_LOG_WITH_INFO(CategoryName, Verbosity, ...) \
84 
85  { \
86 
87  UE_LOG(CategoryName, Verbosity, TEXT("[%s] %s"), *__LOG_INFO__, *FString::Printf(__VA_ARGS__)); \
88 
89  }
90 
91 
92 
105 #define UE_LOG_WITH_INFO_SHORT(CategoryName, Verbosity, ...) \
106 
107  { \
108 
109  FString UE_LOG_WITH_INFO_Temp1, UE_LOG_WITH_INFO_Temp2; \
110 
111  FString(RCLUE_FUNC_LOG) \
112 
113  .Split( \
114 
115  TEXT("("), &UE_LOG_WITH_INFO_Temp1, &UE_LOG_WITH_INFO_Temp2, ESearchCase::CaseSensitive, ESearchDir::FromStart); \
116 
117  UE_LOG_WITH_INFO_Temp1.Split( \
118 
119  TEXT(" "), &UE_LOG_WITH_INFO_Temp1, &UE_LOG_WITH_INFO_Temp2, ESearchCase::CaseSensitive, ESearchDir::FromEnd); \
120 
121  UE_LOG(CategoryName, Verbosity, TEXT("[%s@%d] %s"), *UE_LOG_WITH_INFO_Temp2, __LINE__, *FString::Printf(__VA_ARGS__)); \
122 
123  }
124 
125 
126 
139 #define UE_LOG_WITH_INFO_NAMED(CategoryName, Verbosity, ...) \
140 
141  { \
142 
143  UE_LOG_WITH_INFO(CategoryName, Verbosity, TEXT("[%s] %s"), *GetName(), *FString::Printf(__VA_ARGS__)); \
144 
145  }
146 
147 
148 
161 #define UE_LOG_WITH_INFO_SHORT_NAMED(CategoryName, Verbosity, ...) \
162 
163  { \
164 
165  UE_LOG_WITH_INFO_SHORT(CategoryName, Verbosity, TEXT("[%s] %s"), *GetName(), *FString::Printf(__VA_ARGS__)); \
166 
167  }
168 
169 
170 
181 #define UE_LOG_THROTTLE(InRate, InLastHit, ...) \
182 
183  { \
184 
185  float UE_LOG_THROTTLE_Now = UGameplayStatics::GetTimeSeconds(GetWorld()); \
186 
187  if (InLastHit + InRate <= UE_LOG_THROTTLE_Now) \
188 
189  { \
190 
191  InLastHit = UE_LOG_THROTTLE_Now; \
192 
193  UE_LOG(__VA_ARGS__); \
194 
195  } \
196 
197  }
198 
199 
200 
211 #define UE_LOG_WITH_INFO_THROTTLE(InRate, InLastHit, ...) \
212 
213  { \
214 
215  float UE_LOG_WITH_INFO_THROTTLE_Now = UGameplayStatics::GetTimeSeconds(GetWorld()); \
216 
217  if (InLastHit + InRate <= UE_LOG_WITH_INFO_THROTTLE_Now) \
218 
219  { \
220 
221  InLastHit = UE_LOG_WITH_INFO_THROTTLE_Now; \
222 
223  UE_LOG_WITH_INFO(__VA_ARGS__); \
224 
225  } \
226 
227  }
228 
229 
230 
241 #define UE_LOG_WITH_INFO_SHORT_THROTTLE(InRate, InLastHit, ...) \
242 
243  { \
244 
245  float UE_LOG_WITH_INFO_THROTTLE_Now = UGameplayStatics::GetTimeSeconds(GetWorld()); \
246 
247  if (InLastHit + InRate <= UE_LOG_WITH_INFO_THROTTLE_Now) \
248 
249  { \
250 
251  InLastHit = UE_LOG_WITH_INFO_THROTTLE_Now; \
252 
253  UE_LOG_WITH_INFO_SHORT(__VA_ARGS__); \
254 
255  } \
256 
257  }
258 
259 
260 
271 #define UE_LOG_WITH_INFO_NAMED_THROTTLE(InRate, InLastHit, ...) \
272 
273  { \
274 
275  float UE_LOG_WITH_INFO_NAMED_THROTTLE_Now = UGameplayStatics::GetTimeSeconds(GetWorld()); \
276 
277  if (InLastHit + InRate <= UE_LOG_WITH_INFO_NAMED_THROTTLE_Now) \
278 
279  { \
280 
281  InLastHit = UE_LOG_WITH_INFO_NAMED_THROTTLE_Now; \
282 
283  UE_LOG_WITH_INFO_NAMED(__VA_ARGS__); \
284 
285  } \
286 
287  }
288 
289 
290 
301 #define UE_LOG_WITH_INFO_SHORT_NAMED_THROTTLE(InRate, InLastHit, ...) \
302 
303  { \
304 
305  float UE_LOG_WITH_INFO_NAMED_THROTTLE_Now = UGameplayStatics::GetTimeSeconds(GetWorld()); \
306 
307  if (InLastHit + InRate <= UE_LOG_WITH_INFO_NAMED_THROTTLE_Now) \
308 
309  { \
310 
311  InLastHit = UE_LOG_WITH_INFO_NAMED_THROTTLE_Now; \
312 
313  UE_LOG_WITH_INFO_SHORT_NAMED(__VA_ARGS__); \
314 
315  } \
316 
317  }
318 
__LOG_INFO__
#define __LOG_INFO__
Log info joint with ,
Definition: logUtilities.h:65