All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.jena.atlas.logging.LogCtl Maven / Gradle / Ivy

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.jena.atlas.logging;

import java.io.* ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.nio.file.Paths ;
import java.util.Properties ;

import org.apache.jena.atlas.AtlasException ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.apache.log4j.PropertyConfigurator ;
import org.apache.log4j.xml.DOMConfigurator ;
import org.slf4j.Logger ;

/** Setup and control of logging - needs access to log4j binaries */ 
public class LogCtl {

    static public void set(Logger logger, String level) {
        setLevel(logger.getName(), level) ;
    }

    /** @deprecated Use {@link #setLevel(String, String)} */
    @Deprecated
    static public void set(Class logger, String level) {
        setLevel(logger.getName(), level) ;
    }

    /** @deprecated Use {@link #setLevel(String, String)} */
    @Deprecated
    static public void set(String logger, String level) {
        setLevel(logger,level) ;
    }

    static public void setLevel(Class logger, String level) {
        setLevel(logger.getName(), level) ;
    }
    
    static public void setLevel(String logger, String level) {
        setLevelLog4j(logger,level) ;
        setLevelJUL(logger,level) ;
    }

    private static void setLevelJUL(String logger, String levelName) {
        java.util.logging.Level level = java.util.logging.Level.ALL ;
        if ( levelName.equalsIgnoreCase("info") )
            level = java.util.logging.Level.INFO ;
        else if ( levelName.equalsIgnoreCase("debug") )
            level = java.util.logging.Level.FINE ;
        else if ( levelName.equalsIgnoreCase("warn") || levelName.equalsIgnoreCase("warning") ) 
            level = java.util.logging.Level.WARNING ;
        else if ( levelName.equalsIgnoreCase("error") )
            level = java.util.logging.Level.SEVERE ;
        else if ( levelName.equalsIgnoreCase("OFF") )
            level = java.util.logging.Level.OFF ;
        if ( level != null )
            java.util.logging.Logger.getLogger(logger).setLevel(level) ;
    }

    private static void setLevelLog4j(String logger, String levelName) {
        try {
            org.apache.log4j.Level level = org.apache.log4j.Level.ALL ;
            if ( levelName.equalsIgnoreCase("info") )
                level = org.apache.log4j.Level.INFO ;
            else if ( levelName.equalsIgnoreCase("debug") )
                level = org.apache.log4j.Level.DEBUG ;
            else if ( levelName.equalsIgnoreCase("warn") || levelName.equalsIgnoreCase("warning") )
                level = org.apache.log4j.Level.WARN ;
            else if ( levelName.equalsIgnoreCase("error") )
                level = org.apache.log4j.Level.ERROR ;
            else if ( levelName.equalsIgnoreCase("OFF") )
                level = org.apache.log4j.Level.OFF ;
            if ( level != null )   
                org.apache.log4j.LogManager.getLogger(logger).setLevel(level) ;            
        } catch (NoClassDefFoundError ex) {
            // For when it is not on the class path 
        }
    }

    /** @deprecated Do not use - to be removed - use {@link #setLevel(String, String)} */
    @Deprecated
    static public void logLevel(String logger, org.apache.log4j.Level level1, java.util.logging.Level level2) {
        if ( level1 != null )
            org.apache.log4j.LogManager.getLogger(logger).setLevel(level1) ;
        if ( level2 != null )
            java.util.logging.Logger.getLogger(logger).setLevel(level2) ;
    }

    /**
     * Turn on a logger (all levels). Works for Log4j and Java logging as the
     * logging provider to Apache common logging or slf4j.
     */
    
    static public void enable(Logger logger) {
        enable(logger.getName()) ;
    }

    static public void enable(String logger) {
        setLevel(logger, "all") ;
    }

    /**
     * Turn on a logger (all levels). Works for Log4j and Java logging as the
     * logging provider to Apache common logging or slf4j.
     */
    static public void enable(Class logger) {
        org.apache.log4j.LogManager.getLogger(logger).setLevel(org.apache.log4j.Level.ALL) ;
        java.util.logging.Logger.getLogger(logger.getName()).setLevel(java.util.logging.Level.ALL) ;
    }

    /**
     * Turn on a logger (all levels). Works for Log4j and Java logging as the
     * logging provider to Apache common logging or slf4j.
     */
    static public void disable(String logger) {
        setLevel(logger, "OFF") ;
    }

    /**
     * Turn on a logger (all levels). Works for Log4j and Java logging as the
     * logging provider to Apache common logging or slf4j.
     */
    static public void disable(Class logger) {
        setLevel(logger.getName(), "OFF") ;
    }

    /**
     * Set to info level. Works for Log4j and Java logging as the logging
     * provider to Apache common logging or slf4j.
     */
    static public void setInfo(String logger) {
        setLevel(logger, "info") ;
    }

    /**
     * Set to info level. Works for Log4j and Java logging as the logging
     * provider to Apache common logging or slf4j.
     */
    static public void setInfo(Class logger) {
        setLevel(logger.getName(), "info") ;
    }

    /**
     * Set to warning level. Works for Log4j and Java logging as the logging
     * provider to Apache common logging or slf4j.
     */
    static public void setWarn(String logger) {
        setLevel(logger, "warn") ;
    }

    /**
     * Set to warning level. Works for Log4j and Java logging as the logging
     * provider to Apache common logging or slf4j.
     */
    static public void setWarn(Class logger) {
        setLevel(logger.getName(), "warn") ;
    }

    /**
     * Set to error level. Works for Log4j and Java logging as the logging
     * provider to Apache common logging or slf4j.
     */
    static public void setError(String logger) {
        setLevel(logger, "error") ;
    }

    /**
     * Set to error level. Works for Log4j and Java logging as the logging
     * provider to Apache common logging or slf4j.
     */
    static public void setError(Class logger) {
        setLevel(logger.getName(), "error") ;
    }

    private static String log4Jsetup = StrUtils.strjoinNL
        ( "## Command default log4j setup"
         
          ,"## Plain output with level, to stderr"
          ,"log4j.appender.jena.plainlevel=org.apache.log4j.ConsoleAppender"
          ,"log4j.appender.jena.plainlevel.target=System.err"
          ,"log4j.appender.jena.plainlevel.layout=org.apache.log4j.PatternLayout"
          ,"log4j.appender.jena.plainlevel.layout.ConversionPattern=%-5p %m%n"

//          , "## Plain output to stdout, unadorned output format"
//          ,"log4j.appender.jena.plain=org.apache.log4j.ConsoleAppender"
//          ,"log4j.appender.jena.plain.target=System.out"
//          ,"log4j.appender.jena.plain.layout=org.apache.log4j.PatternLayout"
//          ,"log4j.appender.jena.plain.layout.ConversionPattern=%m%n"

          ,"## Everything"
          ,"log4j.rootLogger=INFO, jena.plainlevel"
          ,"log4j.logger.com.hp.hpl.jena=WARN"
          ,"log4j.logger.org.apache.jena=WARN"
          ,"log4j.logger.org.apache.jena.tdb.loader=INFO"

          , "## Parser output"
          , "log4j.additivity.org.apache.jena.riot=false"
          , "log4j.logger.org.apache.jena.riot=INFO, jena.plainlevel"
         ) ;
    /**
     * Set logging
     * 
    *
  1. Check for -Dlog4j.configuration.
  2. *
  3. Looks for log4j.properties file in current directory.
  4. *
* Return true if we think Log4J is not initialized. */ public static void setLog4j() { if ( System.getProperty("log4j.configuration") == null ) { String fn = "log4j.properties" ; File f = new File(fn) ; if ( f.exists() ) System.setProperty("log4j.configuration", "file:" + fn) ; } } /** Set log4j properties (XML or properties file) */ public static void setLog4j(String filename) { if ( filename.toLowerCase().endsWith(".xml") ) DOMConfigurator.configure(filename) ; else PropertyConfigurator.configure(filename) ; } /** * Set logging, suitable for a command line application. * If "log4j.configuration" not set, then use the built-in default, * else just leave to log4j startup. */ public static void setCmdLogging() { setCmdLogging(log4Jsetup) ; } /** * Set logging, suitable for a command line application. * If "log4j.configuration" not set, then use the provided default * (log4j properties syntax) else just leave to log4j startup. */ public static void setCmdLogging(String defaultConfig) { if (System.getProperty("log4j.configuration") == null ) resetLogging(defaultConfig) ; } public static void resetLogging(String config) { Properties p = new Properties() ; InputStream in = new ByteArrayInputStream(StrUtils.asUTF8bytes(config)) ; try { p.load(in) ; } catch (IOException ex) {} PropertyConfigurator.configure(p) ; System.setProperty("log4j.configuration", "set") ; } // ---- java.util.logging - because that's always present. // Need: org.slf4j:slf4j-jdk14 private static String defaultProperties = StrUtils.strjoinNL ("handlers=org.apache.jena.atlas.logging.java.ConsoleHandlerStream" // These are the defaults. //,"org.apache.atlas.jena.logging.java.ConsoleHandlerStream.level=INFO" //,"org.apache.jena.atlas.logging.java.ConsoleHandlerStream.formatter=org.apache.jena.atlas.logging.java.TextFormatter" //,"org.apache.jena.atlas.logging.java.TextFormatter.format=%5$tT %3$-5s %2$-20s :: %6$s" ) ; private static String JUL_LOGGING = "logging.properties" ; public static void setJavaLogging() { Path p = Paths.get(JUL_LOGGING) ; if ( Files.exists(p) ) setJavaLogging(JUL_LOGGING) ; else setJavaLoggingDft(); } public static void setJavaLogging(String file) { try { InputStream details = new FileInputStream(file) ; details = new BufferedInputStream(details) ; java.util.logging.LogManager.getLogManager().readConfiguration(details) ; } catch (Exception ex) { throw new AtlasException(ex) ; } } public static void setJavaLoggingDft() { try { InputStream details = new ByteArrayInputStream(defaultProperties.getBytes("UTF-8")) ; java.util.logging.LogManager.getLogManager().readConfiguration(details) ; } catch (Exception ex) { throw new AtlasException(ex) ; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy