8#if !defined(ALIB_C20_MODULES) || ((ALIB_C20_MODULES != 0) && (ALIB_C20_MODULES != 1))
9# error "Configuration MACRO ALIB_C20_MODULES has to be given to the compiler as either 0 or 1"
24 module ALib.ALox.Impl;
28 import ALib.Containers.List;
31 import ALib.EnumRecords;
32 import ALib.EnumRecords.Bootstrap;
33 import ALib.Variables;
35 import ALib.Camp.Base;
67 #if ALIB_DEBUG && !ALIB_DEBUG_ASSERTION_PRINTABLES
69 "Instances of class ALox must not be created. Use singleton alib::ALOX" )
93#if !ALOX_DBG_LOG && ALOX_DBG_LOG_CI
94# pragma message ( "Warning: ALox configuration macro mismatch: ALOX_DBG_LOG_CI is true, while ALOX_DBG_LOG is false." )
96#if !ALOX_REL_LOG && ALOX_REL_LOG_CI
97# pragma message ( "Warning: ALox configuration macro mismatch: ALOX_REL_LOG_CI is true, while ALOX_REL_LOG is false" )
106#if !ALIB_CAMP_OMIT_DEFAULT_RESOURCES
109 "Var0" ,
A_CHAR(
"1|ALOX/NO_IDE_LOGGER|" "B" ) ,
110 "Var1" ,
A_CHAR(
"2|ALOX/CONSOLE_TYPE|" "S" ) ,
111DOX_MARKER([DOX_VARIABLES_REPLACEMENTS1])
112"Var2",
A_CHAR(
"3|ALOX/%2/VERBOSITY_WITH_%1|ALOXV"),
113DOX_MARKER([DOX_VARIABLES_REPLACEMENTS1])
114 "Var3" ,
A_CHAR(
"4|ALOX/GLOBAL_SOURCE_PATH_TRIM_RULES|" "S" ) ,
115 "Var4" ,
A_CHAR(
"5|ALOX/%1/SOURCE_PATH_TRIM_RULES|" "S" ) ,
116 "Var5" ,
A_CHAR(
"6|ALOX/%1/DOMAIN_SUBSTITUTION|" "SV;" ) ,
117 "Var6" ,
A_CHAR(
"7|ALOX/%1/PREFIXES|" "S" ) ,
118 "Var7" ,
A_CHAR(
"8|ALOX/%1/DUMP_STATE_ON_EXIT|" "S" ) ,
119 "Var8" ,
A_CHAR(
"20|ALOX/%1/AUTO_SIZES|" "ALOXAS" ) ,
120 "Var9" ,
A_CHAR(
"21|ALOX/%1/FORMAT|" "ALOXFMI" ) ,
121 "Var10",
A_CHAR(
"22|ALOX/%1/FORMAT_DATE_TIME|" "ALOXFDT" ) ,
122 "Var11",
A_CHAR(
"23|ALOX/%1/FORMAT_MULTILINE|" "ALOXFML" ) ,
123 "Var12",
A_CHAR(
"24|ALOX/%1/FORMAT_TIME_DIFF|" "ALOXFTD" ) ,
124 "Var13",
A_CHAR(
"25|ALOX/%1/FORMAT_OTHER|" "ALOXFO" ) ,
125 "Var14",
A_CHAR(
"26|ALOX/%1/REPLACEMENTS|" "ALOXSR" ) ,
126 "Var15",
A_CHAR(
"27|ALOX/CONSOLE_LIGHT_COLORS|" "ALOXCLP" ) ,
127 "Var16",
A_CHAR(
"28|ALOX/CODEPAGE|" "I" ) ,
130 "Var_D1",
A_CHAR(
"false"),
131 "Var_D2",
A_CHAR(
"default"),
132 "Var_D8",
A_CHAR(
"none, verbosity=info, domain=/ALOX"),
137 "Var_D21",
A_CHAR(
"%SF:%SL:%A3%SM %A3[%TC +%TL][%tN][%D]%A1#%# %V: ")
139 "Var_D21",
A_CHAR(
"[%TC +%TL][%tN][%D]%A1#%# %V: ")
141 A_CHAR(
",[ERR],[WRN], ,[***]") ,
145 "Var_D21A",
A_CHAR(
"%SF:%SL:%A3%SM %A3[%TC +%TL][%tN][%D]%A1#%#: %V")
147 "Var_D21A",
A_CHAR(
"[%TC +%TL][%tN][%D]%A1#%#:%V")
149 A_CHAR(
",\033c0,\033c3,,\033c8,\033[0m" ) ,
151 "Var_D22",
A_CHAR(
"yyyy-MM-dd,HH:mm:ss, Days ") ,
152 "Var_D23",
A_CHAR(
"2,ALox: Multi-line message follows: ,> ,,nulled,\\r") ,
155 "Var_D24",
A_CHAR(
"1000" ",--- " ", ns" ", \u00B5s" )
156 A_CHAR(
", ms" ", s" ", m" ", h" ", days" ) ,
158 "Var_D25",
A_CHAR(
"---, ---, 3"),
160 "Var_D28",
A_CHAR(
"65001"),
164 "Var_C1",
A_CHAR(
"If true, the creation of an additional, ide-specific debug logger is suppressed." ),
166 "Var_C2",
A_CHAR(
"Influences the type of console logger to be created by method" "\n"
167 "Lox::CreateConsoleLogger which is also used by Log::AddDebugLogger" "\n"
168 "Possible values are: default, plain, ansi, and windows." ),
170 "Var_C3",
A_CHAR(
"The verbosities of logger \"%2\" in lox \"%1\". Supports wildcards for domain paths." "\n"
171 " Format: [ExportAll ;] [[*]domainpath[*] = Verbosity] [;...] " ),
173 "Var_C4",
A_CHAR(
"Defines global source path trim rules (applicable for all Lox instances)." "\n"
174 " Format: [ [*]sourcepath [, inclusion, trimoffset, sensitivity, replacement] ] [;...]" ),
176 "Var_C5",
A_CHAR(
"Defines source path trim rules for Lox \"%1\". " "\n"
177 " Format: [ [*]sourcepath [, inclusion, trimoffset, sensitivity, replacement] ] [;...]" ),
179 "Var_C7",
A_CHAR(
"Prefix strings for log domains of lox \"%1\".\n"
180 " Format: [ [*]domainpath[*] = prefixstring [, inclusion] ] [;...]" ),
182 "Var_C8",
A_CHAR(
"Log information about lox \"%1\" on exit. Comma separated list of arguments define" "\n"
183 "verbosity, domain and content of output. Possible values content arguments are:" "\n"
184 " All, " "Basic, " "Version, " "SPTR, " "Loggers, " "Domains, " "InternalDomains" "\n"
185 " ScopeDomains, " "DSR, " "PrefixLogables" "Once, " "LogData, " "ThreadMappings, " "\n"
186 " CompilationFlags." " If NONE is given nothing is dumped." ),
188 "Var_C20",
A_CHAR(
"Detected field sizes and tabulator positions of the meta-information portion and the " "\n"
189 "those of the log output, separated by ';'. (These is a generated and temporary values)."),
191 "Var_C21",
A_CHAR(
"Meta info format of logger \"%1\", including signatures for verbosity strings and" "\n"
192 "astring added to the end of each log statement." "\n"
193 " Format: MetaInfo,Error,Warning,Info,Verbose,MsgSuffix"),
195 "Var_C22",
A_CHAR(
"Date and time format of logger \"%1\"." "\n"
196 " Format: Date,Time,ElapsedDays"),
198 "Var_C23",
A_CHAR(
"Multi-line format of logger \"%1\"." "\n"
199 " Format: Mode,Headline,Prefix,Suffix,Delimiter,DelimiterReplacement"),
201 "Var_C24",
A_CHAR(
"Time difference entities of logger \"%1\"." "\n"
202 " Format: Minimum,None,Nanos,Micros,Millis,Secs,Mins,Hours, Days"),
204 "Var_C25",
A_CHAR(
"Specifies three further format values: 1. A replacement string if no file name is available, \n"
205 "2. A replacement string if no method name is available and 3. The minimum digits of the\n"
208 "Var_C26",
A_CHAR(
"Pairs of search and replacement strings for text logger \"%1\"." "\n"
209 " Format: [search,replacement] [,...]"),
211 "Var_C27",
A_CHAR(
"Evaluated by colorful loggers that dispose of light and dark colors. Those may adjust" "\n"
212 "their foreground and background color accordingly. If not given, under Windows OS the right" "\n"
213 "value is detected. Otherwise the value defaults to \"foreground\". In some occasions, the" "\n"
214 "(detected or set) runtime environment might also indicate a different default value." "\n"
215 "Possible values are 'Auto', Foreground', 'Background' and 'Never'."),
218 "Var_C28",
A_CHAR(
"Code page used by class WindowsConsoleLogger. Defaults to 65001." "\n"
219 "(Only used on Windows OS)" ),
223 "Verbosity",
A_CHAR(
"0,Off,1,"
231 "Scope",
A_CHAR(
"0,Global,1,"
238 "StateInfo",
A_CHAR(
"0" "," "NONE" ",1,"
239 "1" "," "Basic" ",1,"
240 "2" "," "Version" ",1,"
241 "^9" "," "LogData" ",4,"
242 "4" "," "Loggers" ",1,"
244 "8" "," "Domains" ",1,"
245 "^4" "," "InternalDomains" ",1,"
246 "0x100000" "," "SPTR" ",2,"
247 "^5" "," "ScopeDomains" ",1,"
248 "^7" "," "PrefixLogables" ",1,"
249 "^8" "," "Once" ",1,"
250 "^10" "," "ThreadMappings" ",1,"
251 "^21" "," "CompilationFlags" ",1,"
252 "0xFFFFFFFF" "," "All" ",1" ),
254 "LCU",
A_CHAR(
"0,Auto,1,"
262 "VVEA",
A_CHAR(
"ExportAll" ),
263 "TLFmtExc",
A_CHAR(
"\nAn exception occurred during formatting ALox logables:\n" ),
265 "CFG_SECT_CMT_ALOX",
A_CHAR(
"@>'/// '@HL-Settings controlling ALox log output.\n@HL-"),
267 "CFG_SECT_CMT_ALOX/LOG",
A_CHAR(
"@>'/// '@HL-Settings of the Lox-instance used with debug-logging.\n@HL-"),
268 "CFG_SECT_CMT_ALOX/DEBUG_LOGGER",
A_CHAR(
"@>'/// '@HL-Settings of the debug-logger.\n@HL-"),
277DOX_MARKER([DOX_VARIABLES_DEFINETYPE3])
284DOX_MARKER([DOX_VARIABLES_DEFINETYPE3])
299 ColorfulLoggerParameters::
300 LightColorUsage >( *
this,
"LCU" );
335namespace alib {
namespace strings {
339 int pathLevel= int( scope - Scope::Path );
346 target <<
'+' << pathLevel;
352 target._(
'(' )._( src.Second );
361 auto& cvVerbosities= data->As<alib::lox::CVVerbosities>();
363 cvVerbosities.ExportAll=
false;
367 esc.UnescapeTokens(results, src,
A_CHAR(
";"));
368 cvVerbosities.Clear();
369 for(
auto& it : results ) {
374 cvVerbosities.ExportAll=
true;
377 cvVerbosities.Add( value );
382 auto& cvVerbosities= data->As<alib::lox::CVVerbosities>();
384 if( cvVerbosities.ExportAll)
385 dest << exportAllKeyWord <<
" ;" <<
NEW_LINE;
387 if( !cvVerbosities.IsEmpty())
388 for(
auto it= cvVerbosities.begin() ;; ) {
389 esc.Escape(*it, dest,
A_CHAR(
";"));
391 if( ++it == cvVerbosities.end() )
#define ALIB_ASSERT_ERROR(cond, domain,...)
#define Log_RemoveDebugLogger()
BootstrapPhases GetBootstrapState()
SharedConfiguration config
Camp(const NCString &resourceCategory)
void Bootstrap() override
Implementation of #"Camp::Bootstrap;*".
void Shutdown(ShutdownPhases phase) override
static textlogger::TextLogger * DEBUG_LOGGER
The debug logger created by AddDebugLogger.
This class acts as a container for Loggers and provides a convenient interface to logging.
const String & GetResource(const NString &name)
NCString ResourceCategory
SPResourcePool resourcePool
Shared pointer to the resource pool.
TSubstring & Trim(const TCString< TChar > &whiteSpaces=CStringConstantsTraits< TChar >::DefaultWhitespaces())
void Bootstrap(camp::Camp &camp, const NString &name, character innerDelim=',', character outerDelim=',')
const RecordsTraits< TEnum >::Type & GetRecord(TEnum element)
@ Left
Chooses left alignment.
@ Exclude
Chooses exclusion.
void shutdownLoxes()
Internal lox management.
TMonoAllocator< lang::HeapAllocator > GLOBAL_ALLOCATOR
strings::TField< nchar > NField
Type alias in namespace alib.
@ Final
The final initialization phase. Here, camps are initializing their custom setup.
strings::util::TStringVector< character, MonoAllocator > StringVectorMA
Type alias in namespace alib.
constexpr CString NEW_LINE
A zero-terminated string containing the new-line character sequence.
lox::ALoxCamp ALOX
The singleton instance of ALib Camp class #"ALoxCamp".
strings::TAString< nchar, lang::HeapAllocator > NAString
Type alias in namespace alib.
variables::Configuration Configuration
Type alias in namespace alib.
ShutdownPhases
Termination levels usable with #"alib_mod_bs_camps;Bootstrapping ALib Camps".
@ Destruct
The main phase of termination that destructs everything.
lox::Lox Lox
Type alias in namespace alib.
strings::util::StringEscaper StringEscaper
Type alias in namespace alib.
strings::TString< character > String
Type alias in namespace alib.
boxing::Pair< T, U > Pair
Type alias in namespace alib.
strings::TSubstring< character > Substring
Type alias in namespace alib.
characters::nchar nchar
Type alias in namespace alib.
constexpr NCString NDEFAULT_WHITESPACES
A zero-terminated string of default whitespace characters.
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace alib.
monomem::TLocalAllocator< 4 > LocalAllocator4K
Type alias in namespace alib. Allocates 4kB of stack memory.
lox::Scope Scope
Type alias in namespace alib.
void operator()(TAString< TChar > &target, const TAppendable &src)
#define ALIB_VARIABLES_REGISTER_TYPE(CPPName)