This is already provided by ``` #define LOG4CXX_LOCATION ::log4cxx::spi::LocationInfo() #include <log4cxx/logger.h> ```
On Sun, Jan 2, 2022 at 12:38 PM Robert Middleton <rmiddle...@apache.org> wrote: > The full path is already in the compiled code anyway, this would > simply add the ability to get the filename from the full path(so > another member to the LocationInfo class). I can see certain > circumstances where it is useful to have the full path, for example > when you have two files named the same(please don't do this). > > That does bring up a good point though, is that if you don't want > location info compiled in, we should have a preprocessor macro that > will compile out all of the location info data. We can already > compile out log messages of certain levels, so hiding the location is > just a natural extension of that. > > -Robert Middleton > > On Sat, Jan 1, 2022 at 7:50 PM Stephen Webb <swebb2...@gmail.com> wrote: > > > > I prefer option 2 if it is possible. > > > > I do not think it is useful to have the full path name (of the build > > directory) in shipped binaries. > > > > On Sun, Jan 2, 2022 at 7:11 AM Robert Middleton <rmiddle...@apache.org> > > wrote: > > > > > PR #75 adds a new option for displaying the short filename of the log > > > location, which is probably a good idea to have, as in my experience, > > > the whole path of the file is not that useful, especially when the > > > binary is from a build server where the path is something like > > > /var/lib/jenkins/project-name/src/main/directory/foo.cpp. > > > > > > The current PR does this with some string manipulation at runtime, and > > > is different from the const char* that is currently used, so it > > > doesn't fit that well with the rest of the class. Since C++11 we can > > > now do constexpr functions, so we should be able to do this at compile > > > time(assuming you have optimizations turned on of course). > > > > > > We can do this one of several ways: > > > 1. Take the PR as is(use strings and calculate at runtime) > > > 2. Create a constexpr function that we control to calculate the > > > filename at compile time as either an offset into the filename or a > > > separate const char*. The advantage to this is that it doesn't > > > require any other libraries for pre-C++17 compilers. > > > 3. Use std::string_view(for C++17) or boost::string_view(pre-c++17). > > > The following would work for this solution: > > > std::string_view str{"/foo/bar/what.cpp"}; > > > const int location = str.find_last_of( '/' ) + 1; > > > printf( "fullPath: %s\n", str.data() ); > > > printf( "fileName: %s\n", &str[location] ); > > > > > > Does anybody have a preference or a better way to do it? I'm inclined > > > to go with (3), since that does provide a good fallback for compilers > > > that don't support C++17, and only requires boost for older compilers. > > > > > > -Robert Middleton > > > >