Le 26/09/2015 20:59, Ralph Goers a écrit :
> I don’t normally participate in Math but I do feel the need to stick my nose 
> in here.
> 1. You are absolutely correct to determine whether you need logging at all 
> before discussing what to choose.
> 2. If you do decide logging is required:
>   a. Please stay away from java.util.logging. It really would be the best 
> solution for a framework like math except it is extremely difficult to 
> redirect efficiently to some other logging framework. The methods used by 
> SLF4J and Log4j are imperfect to say the least.
>   b. Log4j 1.x has reached eol. It effectively has not been supported for 5 
> years.
>   c. Log4j 2 has an API that can be redirected to another logging framework 
> if desired.
>   d. Commons logging still works but its API is very primitive by todays 
> standards. That said, it does work.

>From what I have seen, if I ever were to choose a logging framework for
any project, I agree log4j 2 is currently the best choice. I was
impressed by slf4j a few years ago, but think now the step further is
log4j 2 (without any accurate reason, just a rough feeling).

best regards,
Luc

> 
> Ralph
> 
> 
>> On Sep 26, 2015, at 10:07 AM, Luc Maisonobe <l...@spaceroots.org> wrote:
>>
>> Le 26/09/2015 18:42, Gilles a écrit :
>>> On Sat, 26 Sep 2015 09:03:06 -0700, Phil Steitz wrote:
>>>> On 9/26/15 4:56 AM, Thomas Neidhart wrote:
>>>>> On 09/26/2015 01:11 PM, Gilles wrote:
>>>>>> On Sat, 26 Sep 2015 09:53:30 +0200, Thomas Neidhart wrote:
>>>>>>> On 09/26/2015 02:33 AM, Gilles wrote:
>>>>>>>> On Fri, 25 Sep 2015 16:52:26 -0700, Hasan Diwan wrote:
>>>>>>>>> On 25 September 2015 at 16:47, Gilles <gil...@harfang.homelinux.org>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> On Fri, 25 Sep 2015 17:30:33 +0200, Thomas Neidhart wrote:
>>>>>>>>>>
>>>>>>>>>>> On Fri, Sep 25, 2015 at 5:09 PM, Gilles
>>>>>>>>>>> <gil...@harfang.homelinux.org>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> On Fri, 25 Sep 2015 07:28:48 -0700, Phil Steitz wrote:
>>>>>>>>>>>> On 9/25/15 7:03 AM, Gilles wrote:
>>>>>>>>>>>>> On Fri, 25 Sep 2015 15:54:14 +0200, Thomas Neidhart wrote:
>>>>>>>>>>>>>> Hi Ole,
>>>>>>>>>>>>>>> for a start, I think you are asking the wrong question.
>>>>>>>>>>>>>>> First of all we need to agree that we want to add some kind of
>>>>>>>>>>>>>>> logging
>>>>>>>>>>>>>>> facility to CM.
>>>>>>>>>>>>>>> If the outcome is positive, there are a handful of
>>>>>>>>>>>>>>> alternatives,
>>>>>>>>>>>>>>> some of
>>>>>>>>>>>>>>> them more viable than slf4j in the context of CM (e.g. JUL or
>>>>>>>>>>>>>>> commons-logging).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Could someone summarize why those alternatives were deemed
>>>>>>>>>>>>>> "more
>>>>>>>>>>>>>> viable"?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> btw. the same discussion has been done for other commons
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> components as
>>>>>>>>>>>>>>> well, and the result usually was: do not add logging
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> What was the rationale?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>> Look at the archives.  We have discussed this multiple times
>>>>>>>>>>>>> in the
>>>>>>>>>>>>> past in [math] and each time came to the conclusion that Thomas
>>>>>>>>>>>>> succinctly states above.  What has changed now?
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>> We also discussed several times to stick with Java 5.
>>>>>>>>>>>> Fortunately, that has changed. [Although sticking with Java 7 is
>>>>>>>>>>>> still
>>>>>>>>>>>> a bad decision IMHO.]
>>>>>>>>>>>>
>>>>>>>>>>>> As for logging, IIRC, the sole argument was "no dependency"
>>>>>>>>>>>> because
>>>>>>>>>>>> (IIRC) of the potential "JAR hell".
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>> that's not correct. The decision to not include any
>>>>>>>>>>> dependencies has
>>>>>>>>>>> nothing to do with "JAR hell".
>>>>>>>>>>>
>>>>>>>>>> Although I can't find it now, I'm pretty sure that I more than once
>>>>>>>>>> got such an answer.
>>>>>>>>>>
>>>>>>>>>> In order to prevent JAR hell, commons components strictly stick
>>>>>>>>>> to the
>>>>>>>>>>> "Versioning guidelines" [1]
>>>>>>>>>>>
>>>>>>>>>> I can't see how it relates.
>>>>>>>>>> But if you mean that no JAR hell can emerge from using a logging
>>>>>>>>>> framework,
>>>>>>>>>> then that's good news.
>>>>>>>>>>
>>>>>>>>>> The no-dependency rule is more related to the proposal of the
>>>>>>>>>> component,
>>>>>>>>>>> see [2]
>>>>>>>>>>>
>>>>>>>>>> Thanks for the reminder; in that document, we read:
>>>>>>>>>>
>>>>>>>>>>  (1) Scope of the Package
>>>>>>>>>>   [...]
>>>>>>>>>>   5. Limited dependencies. No external dependencies beyond Commons
>>>>>>>>>> components and the JDK
>>>>>>>>>>
>>>>>>>>>> So we are fine if use "Log4j 2" as kindly offered by Gary.
>>>>>>> log4j is not a commons component btw.
>>>>>> Too bad for me. :-/
>>>>>> Case resolved, then, by the argument of authority?
>>>>> I just pointed out that log4j is not a commons component and did not
>>>>> imply anything else.
>>>>>
>>>>>> "Commons" is OK but not another Apache project, by virtue of a
>>>>>> document that still refers to "JDK 1.2", "CVS", "Bugzilla" (not to
>>>>>> mention that the "scope" of CM currently goes well beyond "the most
>>>>>> common practical problems not immediately available in the Java
>>>>>> programming language")...
>>>>>>
>>>>>> What's the _technical_ rationale for accepting this dependency and
>>>>>> not accepting that dependency?
>>>>>>
>>>>>>> I have not seen a single example of a useful logging message that
>>>>>>> could
>>>>>>> be added to commons-math, but we are already discussing which
>>>>>>> framework
>>>>>>> to use.
>>>>>> If it is not useful to you, why would you conclude that it is not
>>>>>> useful to others?
>>>>>>
>>>>>> At the cost of repeating myself, once more, the use-case is not
>>>>>> primarily about debugging CM, but sometimes one could need to assess
>>>>>> how a "non-obvious" CM algorithm responds to an application's request.
>>>>>> I've clearly expressed that use-case in a previous message.
>>>>>>
>>>>>> Another example: I have a class that wraps a CM root solver; it is
>>>>>> stuffed with log statements because the message contained in the
>>>>>> "NoBracketingException" was utterly insufficient (and plainly
>>>>>> misleading due the default formatting of numbers) to figure out why
>>>>>> certain calls succeeded and others not.
>>>>>> It's a problem (or a limitation) in the application, but in the
>>>>>> absence of other clues, tracing the solver could help figure out a
>>>>>> workaround.
>>>>>> The alternative to the "logging" approach, would have been to include
>>>>>> a precondition check before calling the solver, that would in effect
>>>>>> duplicate the bracketing check done inside the solver. Given the vast
>>>>>> amount of cases where the code ran smoothly, this is clearly a
>>>>>> sub-optimal solution as compared to turning logging on and rerun the
>>>>>> case that led to a crash.
>>>>>>
>>>>>> What can I say more about the usefulness (for a "low-tech" person
>>>>>> like me) than the intro here:
>>>>>>  http://logging.apache.org/log4j/2.x/manual/index.html
>>>>>> ?
>>>>>>
>>>>>>> The examples with println debugging are not valid imho, because how do
>>>>>>> you know in advance what you will need to log in order to successfully
>>>>>>> debug some piece of code and such low-level information should not be
>>>>>>> captured in logs anyway.
>>>>>> Why are there several log levels?  Low-level info can be routed to
>>>>>> "DEBUG" or "TRACE".
>>>>>> As Ole put it quite eloquently, logging is a safety net that we hope
>>>>>> we'll never need, until we do.
>>>>>>
>>>>>> Each layer of an application has its own notion of what is the
>>>>>> appropriate log level. What is "INFO" for some low-level library
>>>>>> will very probably not be so for most applications that use the
>>>>>> library.
>>>>>> Setting levels per package or class takes care of that: it's the
>>>>>> library's *user* who chooses what is useful in the current situation,
>>>>>> not the library's developer.
>>>>>> In the context of that asynchronous collaboration, the role of the
>>>>>> library's developer is to carefully choose what *could* be
>>>>>> interesting, if the need should arise.
>>>>>>
>>>>>> So, can we eventually discuss the _technical_ arguments against
>>>>>> logging inside CM, rather than personal opinion?
>>>>> again, what I want to see is an example what *should* be logged in the
>>>>> case of an algorithm. Take the LevenbergMarquardtOptimizer as an
>>>>> example:
>>>>>
>>>>> * what did you log using System.out.println()?
>>>>> * the algo computes a lot of internal data, which of these is
>>>>> interesting for debugging problems or for general logging?
>>>>> * there are various branches the algo can take, are just some
>>>>> interesting to log, or all of them?
>>>>>
>>>>> the use-cases presented so far were mainly about debugging specific
>>>>> problems, and I am *strongly* against adding logging information just
>>>>> for this purpose as you are clearly facing a dilemma here:
>>>>>
>>>>> you have to log *everything* an algo does as otherwise you might miss
>>>>> the part that creates problems
>>>>>
>>>>> but logging everything is not useful for a standard user of the library
>>>>> so it contradicts the original proposal to include logging
>>>>>
>>>>> Again, CM is not an application where you need to log what it is doing,
>>>>> but a bunch of algorithms and utility methods to perform certain
>>>>> calculations. I fail to see the need to add logging. What could be
>>>>> useful, and we had requests like that in the past, is to observe the
>>>>> state of a certain algorithm and to decide how to proceed in certain
>>>>> cases.
>>>>>
>>>>> That is useful for users.
>>>>>
>>>>> Another useful addition would be to add more aggressive assertions. If
>>>>> one user encounters a problem, he/she could run the application with
>>>>> assertions enabled and spot potential problems e.g. due to wrong input.
>>>>>
>>>>> Logging is a solution for a non existing problem imho.
>>>>> Logging will not avoid the need to debug CM in case of problems imho.
>>>>
>>>> +1
>>>> The other thing I would add is that the one place where it does make
>>>> sense to dump text is in exception error messages, which is a place
>>>> where I think we could really improve things.  Fortunately, that is
>>>> fairly easily done.
>>>>
>>>> I have seen nothing in this thread to convince me that adding
>>>> logging in [math] will be net positive for either those of us who
>>>> maintain the component or for users.  If we are not providing clear
>>>> exception error messages and/or APIs (with complete documentation)
>>>> so that users can understand what they need to debug their
>>>> applications, then we should focus on solving those problems.
>>>>
>>>> Phil
>>>
>>> First, you carefully do not reply to any of the concrete arguments
>>> given in this thread, second you give a conclusion to an issue not
>>> reported in this thread: exceptions and logging do not provide the
>>> same service.
>>>
>>> At least, I'd wish that people sharing their own opinion (it's
>>> nothing more since _zero_ technical argument against logging have
>>> been put forth) stop taking the collective "users" on their side.
>>> As for *actual* users/maintainers, Ole and I have a need, while
>>> Thomas and you haven't.  Those are all the facts that exist until
>>> now.
>>>
>>> In such a situation, what do we do as a project; maintain the status
>>> quo, or try for a change?
>>> On numerous occasions over the years, the status quo was enforced;
>>> and I don't see that it benefited the project in terms of new
>>> contributors.
>>> So I'm +1 for trying to change, for a change.
>>
>> I think one thing has been written in this thread that is worth
>> noting and could be an intermediate position.
>>
>> It seems to me one place where we could get some useful information,
>> and provide it to users is for iterative algorithms (both optimizers
>> and solvers have already been mentioned, we could add ode integrators
>> as well to this). For such algorithms, having some way to monitor how
>> the iterations perform seem an improvement. An observer pattern as
>> proposed a few days ago for this kind of algorithms would be fine.
>> Once again, something simple and that does not attempt to be hyper
>> generic but rather taylored to the algorithms (i.e. most probably
>> different observer interfaces for different algorithms types).
>>
>> This intermediate position would provide something to both users
>> and developers, and it would not attempt to log everything and
>> add a dependency (I am probably the one who opposed to logging on
>> the grounds of dependencies).
>>
>> best regards,
>> Luc
>>
>>>
>>>
>>> Gilles
>>>
>>>>>
>>>>> Thomas
>>>>>
>>>>>>>>>> My long-standing mentioning of slf4j was only because of its
>>>>>>>>>> "weightlessness" (thanks to the no-op implementation of its API).
>>>>>>>>>> If "Log4j 2" has followed this path, good for everyone.
>>>>>>>>>>
>>>>>>>>>> No objection, then?
>>>>>>>>>
>>>>>>>>> I'm still not clear what log4j 2 adds -- most Apache java projects
>>>>>>>>> seem to
>>>>>>>>> use log4j 1.2, seems to work well. -- H
>>>>>>>>>
>>>>>>>> I can only answer about "slf4j" where the "f" stands for facade: it's
>>>>>>>> "only"
>>>>>>>> an API, with bridges to several logging frameworks (log4j, logback,
>>>>>>>> etc.).
>>>>>>>>
>>>>>>>> The separation of concerns (API vs one of several implementations to
>>>>>>>> choose from)
>>>>>>>> allows the top-level application to uniformly configure logging or to
>>>>>>>> disable it
>>>>>>>> completely (if choosing the "no-op" implementation).
>>>>>>> That is virtually true for all logging frameworks, including log4j,
>>>>>>> slf4j, commons-logging.
>>>>>> Has it always been true?
>>>>>> I'm certainly no expert; I only try to stay clear of tools about which
>>>>>> people complain a lot.  A few years ago, that was the case of jcl and
>>>>>> jul as compared to slf4j.
>>>>>>
>>>>>>
>>>>>> Gilles
>>>>>>
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>>> For additional commands, e-mail: dev-h...@commons.apache.org
>>>
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org 
>> <mailto:dev-unsubscr...@commons.apache.org>
>> For additional commands, e-mail: dev-h...@commons.apache.org 
>> <mailto:dev-h...@commons.apache.org>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to