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

Reply via email to