I know it's not directly related, but any general purpose algorithm that
captures to memory buffers needs an overflow to disk mechanism - every time
a ByteArrayOutputStream is used for this, some guy with a *huge* output
from his build gets an OOM.

It's nice you're looking into this issue. As for the actual question of
logger implementations, I prefer trivial problems like trying to determine
that P=NP.

Kristian


2015-05-28 8:39 GMT+02:00 Anders Hammar <and...@hammar.net>:

> I agree with Jason, it would be better to keep this outside of core (the
> core distro).
>
> /Anders
>
> On Thu, May 28, 2015 at 5:21 AM, Jason van Zyl <ja...@takari.io> wrote:
>
> > I honestly don't think an optional feature relying on an optional
> > dependency belongs in the core itself.
> >
> > On May 27, 2015, at 10:34 PM, Igor Fedorenko <i...@ifedorenko.com>
> wrote:
> >
> > > There are three semi-related parts to my implementation
> > >
> > > 1. SLF4J MDC management, basically setting and removing project
> > > attributes in a thread-local map. Truly reliable implementation will
> > > need to be coded in all Builders. Alternatively, it should be possible
> > > to use existing lifecycle callbacks to implement mostly reliable
> lib/ext
> > > extension.
> > >
> > > 2. Install and configure System out/err and java.util.logging bridges.
> > > This can be implemented as lib/ext extension using existing callbacks
> > >
> > > 3. Custom logback appenders and configuration that provide
> "interesting"
> > > behaviour using SLF4J MDC. These too can be implemented of the core.
> > >
> > > Keeping all this in the core will allow marginally more reliable SLF4J
> > > MDC management implementation and I also think will make it more likely
> > > for other developers to help with the implementation. It will also
> serve
> > > as a working example for adding support for other logging framework.
> But
> > > I agree, this does not have to be implemented in the core so I'll try
> to
> > > rework my implementation as lib/ext extension.
> > >
> > > --
> > > Regards,
> > > Igor
> > >
> > > On Wed, May 27, 2015, at 06:40 PM, Jason van Zyl wrote:
> > >>
> > >> On May 27, 2015, at 3:55 PM, Igor Fedorenko <i...@ifedorenko.com>
> > wrote:
> > >>
> > >>> So I went ahead and implemented these changes, including working (but
> > >>> not terribly well tested) logback appenders to buffer-and-group
> project
> > >>> console log messages and create per-project build.log files.
> > >>>
> > >>
> > >> What changes were required in the core?
> > >>
> > >>> Does anyone see a problem if I check in these appenders in maven core
> > >>> source tree or you prefer me to keep them elsewhere?
> > >>>
> > >>
> > >> If it's required to alter the distribution to install logback in order
> > to
> > >> use the appenders then I think elsewhere is more appropriate. As they
> > >> won't be used by the standard version of Maven so I don't think it
> > >> belongs in core along with the other modules. Maven shared is probably
> > >> fine.
> > >>
> > >>> Just to be clear, I do not propose to "hardware" maven to logback
> and I
> > >>> do not propose to include logback support in maven distribution. I
> want
> > >>> to introduce new maven-ext-logback module, which users will be able
> to
> > >>> use to customize their maven distributions very much the same way
> they
> > >>> need to do it now to use any of the advanced logging frameworks.
> > >>>
> > >>> --
> > >>> Regards,
> > >>> Igor
> > >>>
> > >>> On Tue, May 26, 2015, at 03:38 PM, Igor Fedorenko wrote:
> > >>>> I spent some time looking into this, and I think project-level
> logging
> > >>>> will require several semi-related changes.
> > >>>>
> > >>>> * As Ralph pointed out, Maven needs to use SLF4J MDC to associate
> log
> > >>>> messages with individual projects being built. This is required to
> > >>>> enable any project-related logging approach and I plan to submit
> this
> > >>>> change in next couple of days.
> > >>>>
> > >>>> * Another problem is use of non-slf4j logging techniques by Maven
> > >>>> plugins. Direct use of System out/err and java.util.logging are two
> > >>>> obvious problems and I plan to change maven to "bridge" these to
> > slf4j.
> > >>>>
> > >>>> * The old log4j 1.x logging and commons-logging need to be bridged
> to
> > >>>> slf4j too. I can make this change in maven, but this is not strictly
> > >>>> necessary because it can be done from lib/ext extension too.
> > >>>>
> > >>>> The rest really depends on whether we can agree on single "advanced"
> > >>>> logging backend and if we need to support several logging
> > >>>> configurations. I think we've found three viable project-level
> logging
> > >>>> approaches: buffered console output, better logging pattern and my
> > >>>> original target/build.log idea. Unless somebody really wants to
> > restart
> > >>>> logback-vs-log4j discussion, I suggest we postpone this decision and
> > >>>> instead implement project-level logging as out-of-core extensions.
> > >>>>
> > >>>> Does this make sense?
> > >>>>
> > >>>> --
> > >>>> Regards,
> > >>>> Igor
> > >>>>
> > >>>> On Tue, May 26, 2015, at 01:13 PM, Ralph Goers wrote:
> > >>>>> If you use the SLF4J MDC - which is supported by Logback, Log4j 1.x
> > and
> > >>>>> 2.x - you can include anything stored in the MDC on every line of
> log
> > >>>>> output.  Just use %X to include all MDC items or %MDC{key} to
> > include the
> > >>>>> specific key.  This would require storing the value(s) at the
> > beginning
> > >>>>> of every thread.
> > >>>>>
> > >>>>> If you include %t in the pattern than every log line should include
> > the
> > >>>>> threadId.
> > >>>>>
> > >>>>> If you are saying that the log lines include newlines in them that
> > should
> > >>>>> still be OK. The only way the lines should be mangled is if each
> > thread
> > >>>>> somehow has its own instance of the logging framework and they are
> > all
> > >>>>> configured to write to the same file.
> > >>>>>
> > >>>>> Ralph
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>>> On May 25, 2015, at 7:28 AM, Igor Fedorenko <i...@ifedorenko.com>
> > wrote:
> > >>>>>>
> > >>>>>> Yes, thread-id will help to some degree, but maven uses multiline
> > log
> > >>>>>> messages quite often and these will still be mangled and
> unreadable.
> > >>>>>> Per-project build log files is the only solution I found to
> preserve
> > >>>>>> readable logs. Also, each project build is mostly independent from
> > the
> > >>>>>> rest and I find reading self-contain per-project log files much
> > easier.
> > >>>>>>
> > >>>>>> --
> > >>>>>> Regards,
> > >>>>>> Igor
> > >>>>>>
> > >>>>>> On Mon, May 25, 2015, at 10:21 AM, Sean Busbey wrote:
> > >>>>>>> In multithreaded builds we could add a thread ID to each output
> > line.
> > >>>>>>> That
> > >>>>>>> would make it easier to read and filter in different files in
> post
> > >>>>>>> processing.
> > >>>>>>>
> > >>>>>>> --
> > >>>>>>> Sean
> > >>>>>>> On May 25, 2015 6:30 AM, "Igor Fedorenko" <i...@ifedorenko.com>
> > wrote:
> > >>>>>>>
> > >>>>>>>> I had to troubleshoot a large multithreaded build last week and
> > that
> > >>>>>>>> proved to be rather difficult mostly because build log was a
> > jumble of
> > >>>>>>>> messages produced by concurrently running threads. It was not
> > possible
> > >>>>>>>> to tell which message came from which thread, which made the
> > build log
> > >>>>>>>> more or less useless.
> > >>>>>>>>
> > >>>>>>>> What I ended up doing was to write per-module log message to
> > individual
> > >>>>>>>> ${project.build.directory}/build.log log files.
> > >>>>>>>>
> > >>>>>>>> That was kinda tricky to implement because log files were opened
> > very
> > >>>>>>>> early during module build and were subsequently deleted by
> > >>>>>>>> maven-clean-plugin (I tried on Linux and OSX, and I assume the
> > build
> > >>>>>>>> will fail on Windows). I had to modify maven-clean-plugin
> > configuration
> > >>>>>>>> in the project pom.xml to retain
> > ${project.build.directory}/build.log
> > >>>>>>>> files.
> > >>>>>>>>
> > >>>>>>>> I felt my solution required too my effort and I wonder what
> > others do to
> > >>>>>>>> capture logs during multithreaded builds. Can we come up with a
> > >>>>>>>> "recommended" way of doing this?
> > >>>>>>>>
> > >>>>>>>> --
> > >>>>>>>> Regards,
> > >>>>>>>> Igor
> > >>>>>>>>
> > >>>>>>>>
> > ---------------------------------------------------------------------
> > >>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > >>>>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>>>
> > ---------------------------------------------------------------------
> > >>>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > >>>>>> For additional commands, e-mail: dev-h...@maven.apache.org
> > >>>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> ---------------------------------------------------------------------
> > >>>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > >>>>> For additional commands, e-mail: dev-h...@maven.apache.org
> > >>>>>
> > >>>>
> > >>>>
> ---------------------------------------------------------------------
> > >>>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > >>>> For additional commands, e-mail: dev-h...@maven.apache.org
> > >>>>
> > >>>
> > >>> ---------------------------------------------------------------------
> > >>> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > >>> For additional commands, e-mail: dev-h...@maven.apache.org
> > >>>
> > >>
> > >> Thanks,
> > >>
> > >> Jason
> > >>
> > >> ----------------------------------------------------------
> > >> Jason van Zyl
> > >> Founder, Takari and Apache Maven
> > >> http://twitter.com/jvanzyl
> > >> http://twitter.com/takari_io
> > >> ---------------------------------------------------------
> > >>
> > >> To do two things at once is to do neither.
> > >>
> > >> -- Publilius Syrus, Roman slave, first century B.C.
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > >> For additional commands, e-mail: dev-h...@maven.apache.org
> > >>
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > For additional commands, e-mail: dev-h...@maven.apache.org
> > >
> >
> > Thanks,
> >
> > Jason
> >
> > ----------------------------------------------------------
> > Jason van Zyl
> > Founder, Takari and Apache Maven
> > http://twitter.com/jvanzyl
> > http://twitter.com/takari_io
> > ---------------------------------------------------------
> >
> > The modern conservative is engaged in one of man's oldest exercises in
> > moral philosophy; that is,
> > the search for a superior moral justification for selfishness.
> >
> >  -- John Kenneth Galbraith
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > For additional commands, e-mail: dev-h...@maven.apache.org
> >
> >
>

Reply via email to