ALib C++ Framework
by
Library Version: 2605 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
logtools.cpp
1namespace alib { namespace lox {
2
4
6 const alib::Exception& e,
7 Verbosity verbosity,
8 const NString& domainPrefix,
9 const String& logPrefix
10 ) {
11 Tokenizer tknzr;
12 tknzr.TrimChars= "\r";
13 String1K buf;
16 Formatter& formatter= *Formatter::DEFAULT;
17 formatter.Reset();
18 try
19 {
20 size_t entryNo= 1;
21 lox.Acquire( ALIB_CALLER_NULLED );
22
23 if( domainPrefix.IsNotNull() ) lox.SetDomain( domainPrefix, Scope::ThreadOuter );
24 if( logPrefix .IsNotNull() ) lox.SetPrefix( logPrefix , Scope::ThreadOuter );
25 for ( auto& entry : e ) {
26 formatter.FormatArgs( buf.Reset(), entry );
27
28 lox.Acquire( entry.CI );
29
30 tknzr.Set( buf, '\n' );
31 bool firstLine= true;
32 while( tknzr.HasNext() ) {
33 auto& logables= lox.GetLogableContainer();
34 if( firstLine )
35 logables.Add( "{}{}: {!Q[]}", (entry.Type.Integral() >= 0 ? 'E' : 'I'),
36 entryNo, entry.Type );
37 else
38 logables.Add( " {}" , tknzr.Next() );
39
40 lox.Entry( "", verbosity );
41 firstLine= false;
42 }
43 lox.Release();
44 ++entryNo;
45 }
46 if( domainPrefix.IsNotNull() ) lox.SetDomain( nullptr, Scope::ThreadOuter );
47 if( logPrefix .IsNotNull() ) lox.SetPrefix( nullptr, Scope::ThreadOuter );
48 lox.Release();
49 }
50 catch(alib::Exception& )
51 {
52 lox.Error("Format exception caught while creating formatted output of another exception!\n"
53 "Format output generated so far: ", buf );
54} }
55# include "ALib.Lang.CIMethods.H"
56
57
58}}// namespace [alib::lox]
#define ALIB_CALLER_NULLED
#define ALIB_LOCK_RECURSIVE_WITH(lock)
static threads::RecursiveLock DEFAULT_LOCK
static SPFormatter DEFAULT
static void Exception(Lox &lox, const exceptions::Exception &e, Verbosity verbosity=Verbosity::Error, const NString &domainPrefix="/ERR", const String &logPrefix=A_CHAR(" "))
Definition logtools.cpp:5
This class acts as a container for Loggers and provides a convenient interface to logging.
Definition lox.hpp:13
void DbgDisableBufferReplacementWarning()
Definition tastring.hpp:236
constexpr bool IsNotNull() const
Definition string.hpp:339
void Set(const TString< TChar > &src, TChar delimiter, bool skipEmptyTokens=false)
TSubstring< TChar > & Next(lang::Whitespaces trimming=lang::Whitespaces::Trim, TChar newDelim='\0')
Definition tokenizer.cpp:4
TLocalString< TChar, 8 > TrimChars
Definition tokenizer.hpp:68
Definition alox.cpp:14
strings::TString< nchar > NString
Type alias in namespace #"%alib".
Definition string.hpp:2174
format::Formatter Formatter
Type alias in namespace #"%alib".
strings::util::TTokenizer< character > Tokenizer
Type alias in namespace #"%alib".
strings::TString< character > String
Type alias in namespace #"%alib".
Definition string.hpp:2165
LocalString< 1024 > String1K
Type alias name for #"TLocalString;TLocalString<character,1024>".
exceptions::Exception Exception
Type alias in namespace #"%alib".