Description
Hi together,
I'm happily using log4cplus for some years but now I just noticed, that loggers including %b
in their pattern produce inconsistent output.
I'm for example using the pattern %n%p | %c | %b:%L%n%m%n
and this creates the following exemplary log-file:
WARN | Misc.Hjson | Hjson.h:180
Creating new / missing configuration value 'Active'.
WARN | Misc.Hjson | d:\my\example\path\to\project\misc\hjson.h:180
Creating new / missing configuration value 'Freq'.
Obviously the path is included only in the second call, despite the fact that it's exactly the same template-function that is called from different places here.
Digging a little futher into this issue I found the function get_basename (const log4cplus::tstring& filename)
in patternlayout.cxx
combined with usage of different directory seperators in include-paths is the root cause. Changing the function to something like the following solves the issue for me:
static log4cplus::tstring
get_basename (const log4cplus::tstring& filename)
{
log4cplus::tstring::size_type pos = filename.find_last_of(LOG4CPLUS_TEXT("\\/"));
if (pos != log4cplus::tstring::npos)
return filename.substr(pos+1);
else
return filename;
}
Obviously /
is default seperator on unix-systems, while \\
is on Windows. Another solution would be to use the correct seperators in all #include
-instructions. However I think log4cplus should not enforce this, especially since one can be using same headers for Windows and Unix targets...
Would my could snippet be a valid solution for integration into the library?
Best regards
Jan
Additional information on my system if needed:
- version: 2.0
- operating system, CPU, bitness: Win7
- compiler and its version: VisualStudio 2015