[ 
https://issues.apache.org/jira/browse/LOG4NET-400?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13792594#comment-13792594
 ] 

Dominik Psenner edited comment on LOG4NET-400 at 10/11/13 1:17 PM:
-------------------------------------------------------------------

https://github.com/apache/log4net/blob/trunk/src/Repository/Hierarchy/Logger.cs

This is not the interface, but the concrete implementation of the interface. 
The interface does not make an assumption on how the implementation works. Thus 
the following:

{code}if(log.IsDebugEnabled)
  log.Debug("this is my message"){code}

is now reduced to:

{code}log.DebugExt("this is my message"){code}

{quote}Why not just porting CommonLogging implementation into Log4Net?{quote}

Because DebugExt(Func<object> arg) allows to bypass the message construction of 
custom objects which can then be processed by object renderers. To bypass the 
string.Format one can already use the *Format() methods which are referenced by 
the extension methods *FormatExt(). Thus writing:

{code}log.DebugExt(() => string.Format("my message {0}", "formatted"));{code}

is equivalent to the one below, where the latter preserves several stack 
operations:

{code}log.DebugFormatExt("my message {0}", "formatted");{code}

Maybe we throw away the DebugFormatExt methods in a future release that breaks 
backwards compatibility, but not this time.


was (Author: nachbarslumpi):
https://github.com/apache/log4net/blob/trunk/src/Repository/Hierarchy/Logger.cs

This is not the interface, but the concrete implementation of the interface. 
The interface does not make an assumption on how the implementation works. Thus 
the following:

{code}if(log.IsDebugEnabled)
  log.Debug("this is my message"){code}

is now reduced to:

{code}log.DebugExt("this is my message"){code}

{quote}Why not just porting CommonLogging implementation into Log4Net?{quote}

Because DebugExt(Func<object> arg) allows to bypass the message construction of 
custom objects which can then be processed by object renderers. To bypass the 
string.Format one can already use the *Format() methods which are referenced by 
the extension methods *FormatExt(). Thus writing:

{code}log.DebugExt(() => string.Format("my message {0}", "formatted"));{code}

is equivalent to:

{code}log.DebugFormatExt("my message {0}", "formatted");{code}

Maybe we throw away the DebugFormatExt methods in a future release that breaks 
backwards compatibility, but not this time.

> ILog extension methods doesnt work as expected
> ----------------------------------------------
>
>                 Key: LOG4NET-400
>                 URL: https://issues.apache.org/jira/browse/LOG4NET-400
>             Project: Log4net
>          Issue Type: Improvement
>            Reporter: Gian Marco Gherardi
>
> Hi, I'm trying the feature LOG4NET-290, but seems that the following format 
> doesn't work:
>   log.Debug( m=>m("value= {0}", obj.Value) ); 
> Instead this seems the correct signature:
>   log.Debug(() => string.Format("value= {0}", obj.Value));
> That is not as convenient IMO. Another thing I've noticed is that there are 
> also many extension methods that merely proxy the methods already supported 
> by plain ILog. What's the reason for that? I mean ILog methods already skip 
> logging if level is not active.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to