On Sat, Jan 01, 2022 at 08:38:43PM -0500, Robert Middleton 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.

Current log4cxx is reproducible [1] as in reproducible-builds.org, and one
part of checking reproducibilty is to build in different location, it
looks like that current log4cxx does NOT embed the complete path.

So a wish from the Debian mainainer:
It would be nice to retain reproduciblity when implementing this feature...

A happy new year!

-- 
tobi

 
[1] 
https://tests.reproducible-builds.org/debian/rb-pkg/unstable/amd64/log4cxx.html
(0.12.1 is currently not reproducible due to something doxygen is doing, but
the library package is.)

> -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
> > >

Reply via email to