Re: [PR] Bump org.springframework:spring-framework-bom from 6.1.0 to 6.1.1 [logging-log4j-jakarta]

2023-11-23 Thread via GitHub


github-actions[bot] closed pull request #5: Bump 
org.springframework:spring-framework-bom from 6.1.0 to 6.1.1
URL: https://github.com/apache/logging-log4j-jakarta/pull/5


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@logging.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] Bump org.springframework:spring-framework-bom from 6.1.0 to 6.1.1 [logging-log4j-jakarta]

2023-11-23 Thread via GitHub


github-actions[bot] commented on PR #5:
URL: 
https://github.com/apache/logging-log4j-jakarta/pull/5#issuecomment-1824937518

   Changes are applied by CI in 14a91d49c6fe432e9df0e0b8429d01dbf036bf13


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@logging.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: [PR] Bump org.springframework:spring-framework-bom from 6.1.0 to 6.1.1 [logging-log4j-jakarta]

2023-11-23 Thread via GitHub


ppkarwasz commented on PR #5:
URL: 
https://github.com/apache/logging-log4j-jakarta/pull/5#issuecomment-1824930468

   @dependabot rebase


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@logging.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



Re: Change semantics of `Throwable` parameters

2023-11-23 Thread Apache

I agree with everything Remko said plus these extra comments.

Throwing is a convenience method to standardize the output when an application 
will be throwing an exception. That, of course, means it isn’t a required 
method. I doubt it is used very much. Of course, catching is its companion but 
I would bet it is used even less.

We use the entry/exit stuff everywhere. I have not seen a replacement for it 
that provides the same functionality so I would not want it removed.

I agree that AbstractLogger should have as few methods as possible that need to 
be overridden by the implementation.

Ralph

> On Nov 23, 2023, at 4:31 AM, Piotr P. Karwasz  wrote:
> Hi Matt,
> 
> On Tue, 21 Nov 2023 at 23:22, Matt Sicker  wrote:
>> 
>> This sounds like it might be a good basis for figuring out a parallel v3 API 
>> for a “hard to mis-use” style API. However, once you go that route, you 
>> start to wonder how useful templated log messages are when you can capture a 
>> lambda instead. Parameterized log messages might work better as structured 
>> log messages, something that is awkward to use in the API at the moment.
> 
> If we'll create a separate `v3.Logger` interface I would clean it up
> from many methods, e.g.:
> 
> * getLevel() and getName(): how are these useful for the user? An `if
> (logger.getLevel() == Level.INFO)` should be replaced by `isEnabled`,
> * getMessageFactory() and getFlowMessageFactory() (the latter is my
> fault): again these are not useful to the user. If I need a message
> factory, it will be a different message factory,
> * printf(): a better approach is to use StringFormatterMessageFactory
> for the logger,
> * catching(Throwable): can be replaced with `error(Object)` and the
> semantics described in this thread,
> * throwing: does anybody use it? Maybe it could stay,
> * entry/exit, traceEntry/traceExit: I can not imagine using these on
> each method (or important method). I'd rather use AspectJ pointcuts
> instead (or a @LogTrace annotation),
> * methods that use `MessageSupplier` like `info(MessageSupplier)`:
> couldn't these be integrated into the logic of `info(Supplier)`?
> * the `is*Enabled` methods are prone to misuse: a snippet like:
> 
> if (logger.isDebugEnabled()) {
>  logger.debug(MARKER, "Hello world!");
> }
> 
> will not print any message if the level of the logger is less specific
> than DEBUG, even if the user asks for **all** MARKER messages to be
> printed.
> 
> IMHO opinion `v3.AbstractLogger` should only have 2 abstract methods:
> * logMessage(Level level, Marker marker, String fqcn,
> StackTraceElement location, Message message, Throwable throwable)
> * isEnabled(Level level, Marker marker, String fqcn,
> StackTraceElement location, Message message, Throwable throwable)
> 
> Piotr


Re: Change semantics of `Throwable` parameters

2023-11-23 Thread Remko Popma


> On Nov 23, 2023, at 18:31, Piotr P. Karwasz  wrote:
> 
> Hi Matt,
> 
>> On Tue, 21 Nov 2023 at 23:22, Matt Sicker  wrote:
>> 
>> This sounds like it might be a good basis for figuring out a parallel v3 API 
>> for a “hard to mis-use” style API. However, once you go that route, you 
>> start to wonder how useful templated log messages are when you can capture a 
>> lambda instead. Parameterized log messages might work better as structured 
>> log messages, something that is awkward to use in the API at the moment.
> 
> If we'll create a separate `v3.Logger` interface I would clean it up
> from many methods, e.g.:
> 
> * getLevel() and getName(): how are these useful for the user? An `if
> (logger.getLevel() == Level.INFO)` should be replaced by `isEnabled`,

Sorry but I disagree. 
The getLevel method is useful when the level to compare to is not known in 
advance. 

> * getMessageFactory() and getFlowMessageFactory() (the latter is my
> fault): again these are not useful to the user. If I need a message
> factory, it will be a different message factory,

Agreed.

> * printf(): a better approach is to use StringFormatterMessageFactory
> for the logger,

I see your point, but in my experience the printf method is rarely used, only 
for specific use cases; most logging in the same class would use the info(), 
debug() etc methods. 
Without printf users would need to declare a separate logger. 
The printf method is a nice convenience. 


> * catching(Throwable): can be replaced with `error(Object)` and the
> semantics described in this thread,

Agreed.

> * throwing: does anybody use it? Maybe it could stay,

I never use it. 

> * entry/exit, traceEntry/traceExit: I can not imagine using these on
> each method (or important method). I'd rather use AspectJ pointcuts
> instead (or a @LogTrace annotation),

Agreed. 

> * methods that use `MessageSupplier` like `info(MessageSupplier)`:
> couldn't these be integrated into the logic of `info(Supplier)`?

Yes. 

> * the `is*Enabled` methods are prone to misuse: a snippet like:
> 
> if (logger.isDebugEnabled()) {
>  logger.debug(MARKER, "Hello world!");
> }
> 
> will not print any message if the level of the logger is less specific
> than DEBUG, even if the user asks for **all** MARKER messages to be
> printed.

Interesting. 
By the way; isn’t that behavior the same even if there’s no “if” condition 
around the logger.debug(MARKER, "Hello world!");
statement?


> 
> IMHO opinion `v3.AbstractLogger` should only have 2 abstract methods:
> * logMessage(Level level, Marker marker, String fqcn,
> StackTraceElement location, Message message, Throwable throwable)
> * isEnabled(Level level, Marker marker, String fqcn,
> StackTraceElement location, Message message, Throwable throwable)
> 
> Piotr


Re: Change semantics of `Throwable` parameters

2023-11-23 Thread Piotr P. Karwasz
Hi Matt,

On Tue, 21 Nov 2023 at 23:22, Matt Sicker  wrote:
>
> This sounds like it might be a good basis for figuring out a parallel v3 API 
> for a “hard to mis-use” style API. However, once you go that route, you start 
> to wonder how useful templated log messages are when you can capture a lambda 
> instead. Parameterized log messages might work better as structured log 
> messages, something that is awkward to use in the API at the moment.

If we'll create a separate `v3.Logger` interface I would clean it up
from many methods, e.g.:

 * getLevel() and getName(): how are these useful for the user? An `if
(logger.getLevel() == Level.INFO)` should be replaced by `isEnabled`,
 * getMessageFactory() and getFlowMessageFactory() (the latter is my
fault): again these are not useful to the user. If I need a message
factory, it will be a different message factory,
 * printf(): a better approach is to use StringFormatterMessageFactory
for the logger,
 * catching(Throwable): can be replaced with `error(Object)` and the
semantics described in this thread,
 * throwing: does anybody use it? Maybe it could stay,
 * entry/exit, traceEntry/traceExit: I can not imagine using these on
each method (or important method). I'd rather use AspectJ pointcuts
instead (or a @LogTrace annotation),
 * methods that use `MessageSupplier` like `info(MessageSupplier)`:
couldn't these be integrated into the logic of `info(Supplier)`?
 * the `is*Enabled` methods are prone to misuse: a snippet like:

if (logger.isDebugEnabled()) {
  logger.debug(MARKER, "Hello world!");
}

will not print any message if the level of the logger is less specific
than DEBUG, even if the user asks for **all** MARKER messages to be
printed.

IMHO opinion `v3.AbstractLogger` should only have 2 abstract methods:
 * logMessage(Level level, Marker marker, String fqcn,
StackTraceElement location, Message message, Throwable throwable)
 * isEnabled(Level level, Marker marker, String fqcn,
StackTraceElement location, Message message, Throwable throwable)

Piotr