[ 
https://issues.apache.org/jira/browse/LOG4J2-608?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Matt Sicker closed LOG4J2-608.
------------------------------

> Add support for a java.util.logging bridge.
> -------------------------------------------
>
>                 Key: LOG4J2-608
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-608
>             Project: Log4j 2
>          Issue Type: New Feature
>          Components: JUL adapter
>         Environment: OpenJDK 1.6, 1.7, 1.8, and any other JDK 1.6+ 
> implementations if possible
>            Reporter: Matt Sicker
>            Assignee: Matt Sicker
>             Fix For: 2.1
>
>         Attachments: 608-1.0.patch
>
>
> The JDK1.4 bridge from SLF4J is rather simplistic and looks error-prone 
> (e.g., you need to manually start and stop the Handler). What I'd like is a 
> Handler that includes Markers based on the log Level (which can be more than 
> the built-in ones) along with a custom LogManager implementation.
> h2. The easy way
> For the easier use case of the user setting the {{java.util.logging.manager}} 
> system property ahead of time to the correct LogManager implementation, this 
> won't be too hard to support. I recommend extending the Logger class and 
> having them log directly to their corresponding Log4j Logger instance. The 
> custom LogManager should return these instances.
> For compatibility with existing Logger objects, the custom Handler class 
> should be used to pass along log messages.
> h2. Reflection hackery
> Due to the lousy API that JDK1.4 gives you, there will need to be a bit of 
> reflection hacking to inject itself into the LogManager and any existing 
> Loggers. Because you can't replace a class instance via reflection, existing 
> Logger references will have to use the Handler. The global LogManager can be 
> replaced reflectively, but all its named Loggers should be transferred over 
> to the new LogManager without losing any log messages during the process. 
> After the LogManager is swapped out, any other calls to 
> {{Logger.getLogger(String)}} or {{LogManager.getLogger(String)}} should 
> return the Log4j implementations instead.
> h2. Questions
> h3. Level correspondence
> Which levels should the JUL levels correspond to? Here's my proposal:
> ||JUL Level Name||JUL Level Range||Corresponding Log4j Level||
> |ALL|{{Integer.MIN_VALUE}}|ALL|
> |FINEST|≤300|TRACE|
> |FINER|301 to 400|DEBUG|
> |FINE|401 to 500|DEBUG|
> |CONFIG|501 to 700|INFO|
> |INFO|701 to 800|INFO|
> |WARNING|801 to 900|WARN|
> |SEVERE|901 to 1000|ERROR|
> |?|>1000|FATAL|
> |OFF|{{Integer.MAX_VALUE}}|OFF|
> Along with those levels (which could also use the custom levels for 
> non-standard ones), I'd also like to use markers here (if it makes sense). 
> What I'm thinking is a parent marker named "java.util.logging", and then 
> every JUL level (custom or standard) gets its own marker as well. This would 
> be useful since JUL defines more levels than we have by default.
> h3. JUL config vs. Log4j config
> Should we override the JUL Loggers' levels based on the Log4j Loggers' 
> levels? Or should we allow the JUL config to override the Log4j config? 
> Should we allow JUL settings to be imported? Or should they be overridden by 
> Log4j's configuration?
> h3. JDK compatibility
> What other JDKs are still out there for 1.6+ besides OpenJDK? The reflection 
> hackery I have so far has fallbacks to try and find compatible methods or 
> fields based on types, but who knows how different the JUL implementations 
> could be? Plus, there could be licensing issues with alternative JDK code 
> such that we can't effectively reverse engineer their implementations.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to