fix: prefix variables within macro to avoid scope problems.

This commit is contained in:
Johann Dreo 2021-12-19 14:02:16 +01:00
commit e1bac0e970
5 changed files with 65 additions and 56 deletions

View file

@ -374,6 +374,12 @@ Clutchlog needs `C++-17` with the `filesystem` feature.
You may need to indicate `-std=c++17 -lstdc++fs` to some compilers.
### Variable names within the CLUTCHLOG macro
Calling the `CLUTCHLOG` macro with a message using a variable named `clutchlog__msg` will end in
an error. Avoid this kind of naming for the logger singleton, also.
### Features
What Clutchlog do not provide at the moment (but may in a near future):

View file

@ -98,16 +98,16 @@ namespace fs = std::filesystem;
//! Log a message at the given level.
#ifndef NDEBUG
#define CLUTCHLOG( LEVEL, WHAT ) { \
auto& logger = clutchlog::logger(); \
std::ostringstream msg ; msg << WHAT; \
logger.log(clutchlog::level::LEVEL, msg.str(), CLUTCHLOC); \
auto& clutchlog__logger = clutchlog::logger(); \
std::ostringstream clutchlog__msg ; clutchlog__msg << WHAT; \
clutchlog__logger.log(clutchlog::level::LEVEL, clutchlog__msg.str(), CLUTCHLOC); \
}
#else // not Debug build.
#define CLUTCHLOG( LEVEL, WHAT ) { \
if(clutchlog::level::LEVEL <= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \
auto& logger = clutchlog::logger(); \
std::ostringstream msg ; msg << WHAT; \
logger.log(clutchlog::level::LEVEL, msg.str(), CLUTCHLOC); \
auto& clutchlog__logger = clutchlog::logger(); \
std::ostringstream clutchlog__msg ; clutchlog__msg << WHAT; \
clutchlog__logger.log(clutchlog::level::LEVEL, clutchlog__msg.str(), CLUTCHLOC); \
} \
}
#endif // NDEBUG
@ -115,15 +115,15 @@ namespace fs = std::filesystem;
//! Dump the given container.
#ifndef NDEBUG
#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) { \
auto& logger = clutchlog::logger(); \
logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \
auto& clutchlog__logger = clutchlog::logger(); \
clutchlog__logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \
CLUTCHLOC, FILENAME, CLUTCHDUMP_DEFAULT_SEP); \
}
#else // not Debug build.
#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) { \
if(clutchlog::level::LEVEL <= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \
auto& logger = clutchlog::logger(); \
logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \
auto& clutchlog__logger = clutchlog::logger(); \
clutchlog__logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \
CLUTCHLOC, FILENAME, CLUTCHDUMP_DEFAULT_SEP); \
} \
}
@ -132,18 +132,18 @@ namespace fs = std::filesystem;
//! Call any function if the scope matches.
#ifndef NDEBUG
#define CLUTCHFUNC( LEVEL, FUNC, ... ) { \
auto& logger = clutchlog::logger(); \
clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(scope.matches) { \
auto& clutchlog__logger = clutchlog::logger(); \
clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(clutchlog__scope.matches) { \
FUNC(__VA_ARGS__); \
} \
}
#else // not Debug build.
#define CLUTCHFUNC( LEVEL, FUNC, ... ) { \
if(clutchlog::level::LEVEL <= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \
auto& logger = clutchlog::logger(); \
clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(scope.matches) { \
auto& clutchlog__logger = clutchlog::logger(); \
clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(clutchlog__scope.matches) { \
FUNC(__VA_ARGS__); \
} \
} \
@ -153,18 +153,18 @@ namespace fs = std::filesystem;
//! Run any code if the scope matches.
#ifndef NDEBUG
#define CLUTCHCODE( LEVEL, ... ) { \
auto& logger = clutchlog::logger(); \
clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(scope.matches) { \
auto& clutchlog__logger = clutchlog::logger(); \
clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(clutchlog__scope.matches) { \
__VA_ARGS__ \
} \
}
#else // not Debug build.
#define CLUTCHCODE( LEVEL, CODE ) { \
if(clutchlog::level::LEVEL <= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \
auto& logger = clutchlog::logger(); \
clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(scope.matches) { \
auto& clutchlog__logger = clutchlog::logger(); \
clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \
if(clutchlog__scope.matches) { \
CODE \
} \
} \

View file

@ -152,31 +152,31 @@ $(function() {
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="group__UseMacros.html#ga6f86187e2b35e7e1907d688f504a197d"> 100</a></span>&#160;<span class="preprocessor">#define CLUTCHLOG( LEVEL, WHAT ) { \</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor"> std::ostringstream msg ; msg &lt;&lt; WHAT; \</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor"> logger.log(clutchlog::level::LEVEL, msg.str(), CLUTCHLOC); \</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="preprocessor"> std::ostringstream clutchlog__msg ; clutchlog__msg &lt;&lt; WHAT; \</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor"> clutchlog__logger.log(clutchlog::level::LEVEL, clutchlog__msg.str(), CLUTCHLOC); \</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="preprocessor">}</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#else // not Debug build.</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#define CLUTCHLOG( LEVEL, WHAT ) { \</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor"> if(clutchlog::level::LEVEL &lt;= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor"> std::ostringstream msg ; msg &lt;&lt; WHAT; \</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor"> logger.log(clutchlog::level::LEVEL, msg.str(), CLUTCHLOC); \</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor"> std::ostringstream clutchlog__msg ; clutchlog__msg &lt;&lt; WHAT; \</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor"> clutchlog__logger.log(clutchlog::level::LEVEL, clutchlog__msg.str(), CLUTCHLOC); \</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor">}</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#endif // NDEBUG</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="group__UseMacros.html#ga572e3aa19d8b39e3ed0b9e91961104c2"> 117</a></span>&#160;<span class="preprocessor">#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) { \</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor"> logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor"> clutchlog__logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor"> CLUTCHLOC, FILENAME, CLUTCHDUMP_DEFAULT_SEP); \</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">}</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="preprocessor">#else // not Debug build.</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) { \</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="preprocessor"> if(clutchlog::level::LEVEL &lt;= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="preprocessor"> logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="preprocessor"> clutchlog__logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="preprocessor"> CLUTCHLOC, FILENAME, CLUTCHDUMP_DEFAULT_SEP); \</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor">}</span></div>
@ -184,18 +184,18 @@ $(function() {
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="group__UseMacros.html#ga9f77cee4f853e582262930c9c17f90ae"> 134</a></span>&#160;<span class="preprocessor">#define CLUTCHFUNC( LEVEL, FUNC, ... ) { \</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="preprocessor"> clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor"> if(scope.matches) { \</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="preprocessor"> clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor"> if(clutchlog__scope.matches) { \</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="preprocessor"> FUNC(__VA_ARGS__); \</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="preprocessor">}</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="preprocessor">#else // not Debug build.</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="preprocessor">#define CLUTCHFUNC( LEVEL, FUNC, ... ) { \</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="preprocessor"> if(clutchlog::level::LEVEL &lt;= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="preprocessor"> clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="preprocessor"> if(scope.matches) { \</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="preprocessor"> clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="preprocessor"> if(clutchlog__scope.matches) { \</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="preprocessor"> FUNC(__VA_ARGS__); \</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="preprocessor"> } \</span></div>
@ -204,18 +204,18 @@ $(function() {
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="group__UseMacros.html#gaaf2e85e1153e6c88b458dd49e3c37c73"> 155</a></span>&#160;<span class="preprocessor">#define CLUTCHCODE( LEVEL, ... ) { \</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="preprocessor"> clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor"> if(scope.matches) { \</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="preprocessor"> clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor"> if(clutchlog__scope.matches) { \</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="preprocessor"> __VA_ARGS__ \</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor">}</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="preprocessor">#else // not Debug build.</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="preprocessor">#define CLUTCHCODE( LEVEL, CODE ) { \</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="preprocessor"> if(clutchlog::level::LEVEL &lt;= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor"> clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="preprocessor"> if(scope.matches) { \</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor"> auto&amp; clutchlog__logger = clutchlog::logger(); \</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor"> clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, CLUTCHLOC); \</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="preprocessor"> if(clutchlog__scope.matches) { \</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="preprocessor"> CODE \</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor"> } \</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="preprocessor"> } \</span></div>

View file

@ -116,9 +116,9 @@ Macros</h2></td></tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> { \</div>
<div class="line"> auto&amp; logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, <a class="code" href="group__UseMacros.html#gae8911119d726a43b77f5781cb5a72813">CLUTCHLOC</a>); \</div>
<div class="line"> if(scope.matches) { \</div>
<div class="line"> auto&amp; clutchlog__logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, <a class="code" href="group__UseMacros.html#gae8911119d726a43b77f5781cb5a72813">CLUTCHLOC</a>); \</div>
<div class="line"> if(clutchlog__scope.matches) { \</div>
<div class="line"> __VA_ARGS__ \</div>
<div class="line"> } \</div>
<div class="line">}</div>
@ -159,8 +159,8 @@ Macros</h2></td></tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> { \</div>
<div class="line"> auto&amp; logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</div>
<div class="line"> auto&amp; clutchlog__logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> clutchlog__logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</div>
<div class="line"> <a class="code" href="group__UseMacros.html#gae8911119d726a43b77f5781cb5a72813">CLUTCHLOC</a>, FILENAME, <a class="code" href="group__DefaultConfigMacros.html#ga54d29e956575e1c731eab5406135c5df">CLUTCHDUMP_DEFAULT_SEP</a>); \</div>
<div class="line">}</div>
</div><!-- fragment -->
@ -200,9 +200,9 @@ Macros</h2></td></tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> { \</div>
<div class="line"> auto&amp; logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> clutchlog::scope_t scope = logger.locate(clutchlog::level::LEVEL, <a class="code" href="group__UseMacros.html#gae8911119d726a43b77f5781cb5a72813">CLUTCHLOC</a>); \</div>
<div class="line"> if(scope.matches) { \</div>
<div class="line"> auto&amp; clutchlog__logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> clutchlog::scope_t clutchlog__scope = clutchlog__logger.locate(clutchlog::level::LEVEL, <a class="code" href="group__UseMacros.html#gae8911119d726a43b77f5781cb5a72813">CLUTCHLOC</a>); \</div>
<div class="line"> if(clutchlog__scope.matches) { \</div>
<div class="line"> FUNC(__VA_ARGS__); \</div>
<div class="line"> } \</div>
<div class="line">}</div>
@ -237,9 +237,9 @@ Macros</h2></td></tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> { \</div>
<div class="line"> auto&amp; logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> std::ostringstream msg ; msg &lt;&lt; WHAT; \</div>
<div class="line"> logger.log(clutchlog::level::LEVEL, msg.str(), <a class="code" href="group__UseMacros.html#gae8911119d726a43b77f5781cb5a72813">CLUTCHLOC</a>); \</div>
<div class="line"> auto&amp; clutchlog__logger = <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a>(); \</div>
<div class="line"> std::ostringstream clutchlog__msg ; clutchlog__msg &lt;&lt; WHAT; \</div>
<div class="line"> clutchlog__logger.log(clutchlog::level::LEVEL, clutchlog__msg.str(), <a class="code" href="group__UseMacros.html#gae8911119d726a43b77f5781cb5a72813">CLUTCHLOC</a>); \</div>
<div class="line">}</div>
</div><!-- fragment -->
<p>Log a message at the given level. </p>

View file

@ -171,7 +171,8 @@ Output Configuration</h2>
<p>The default log format is <code>"[{name}] {level_letter}:{depth_marks} {msg}\t\t\t\t\t{func} @ {file}:{line}\n"</code>, it can be overriden at compile time by defining the <code>CLUTCHLOG_DEFAULT_FORMAT</code> macro.</p>
<p>The default format of the first line of comment added with the dump macro is <code>"# [{name}] {level} in {func} (at depth {depth}) @ {file}:{line}"</code>. It can be edited with the <code>format_comment</code> method. If it is set to an empty string, then no comment line is added. The default can be modified at compile time with <code>CLUTCHDUMP_DEFAULT_FORMAT</code>. By default, the separator between items in the container is a new line. To change this behaviour, you can change <code>CLUTCHDUMP_DEFAULT_SEP</code> or call the low-level <code>dump</code> method.</p>
<p>The mark used with the <code>{depth_marks}</code> tag can be configured with the <code>depth_mark</code> method, and its default with the <code>CLUTCHLOG_DEFAULT_DEPTH_MARK</code> macro: </p><div class="fragment"><div class="line">log.depth_mark(<a class="code" href="group__DefaultConfigMacros.html#ga45c4c964fad4ad1641d5c9c28c4645b9">CLUTCHLOG_DEFAULT_DEPTH_MARK</a>); <span class="comment">// Defaults to &quot;&gt;&quot;.</span></div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md7"></a>
</div><!-- fragment --><p>By default, clutchlog removes 5 levels of the calls stack, so that your <code>main</code> entrypoint corresponds to a depth of zero. You can change this behaviour by defining the <code>CLUTCHLOG_STRIP_CALLS</code> macro.</p>
<h2><a class="anchor" id="autotoc_md7"></a>
Output style</h2>
<p>The output can be colored differently depending on the log level. </p><div class="fragment"><div class="line"><span class="comment">// Print error messages in bold red:</span></div>
<div class="line">log.style(clutchlog::level::error, <span class="comment">// First, the log level.</span></div>
@ -268,6 +269,8 @@ Limitations</h1>
</div><!-- fragment --><h3>Dependencies</h3>
<p>Some colors/styles may not be supported by some exotic terminal emulators.</p>
<p>Clutchlog needs <code>C++-17</code> with the <code>filesystem</code> feature. You may need to indicate <code>-std=c++17 -lstdc++fs</code> to some compilers.</p>
<h3>Variable names within the CLUTCHLOG macro</h3>
<p>Calling the <code>CLUTCHLOG</code> macro with a message using a variable named <code>clutchlog__msg</code> will end in an error. Avoid this kind of naming for the logger singleton, also.</p>
<h3>Features</h3>
<p>What Clutchlog do not provide at the moment (but may in a near future):</p>
<ul>