Package com.sleepycat.je.util

Source Code of com.sleepycat.je.util.FileHandler

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002, 2011 Oracle and/or its affiliates.  All rights reserved.
*
*/

package com.sleepycat.je.util;

import java.io.IOException;
import java.util.logging.ErrorManager;
import java.util.logging.Formatter;
import java.util.logging.Level;

import com.sleepycat.je.config.EnvironmentParams;
import com.sleepycat.je.dbi.EnvironmentImpl;
import com.sleepycat.je.utilint.LoggerUtils;

/**
* JE instances of java.util.logging.Logger are configured to use this
* implementation of java.util.logging.FileHandler. By default, the handler's
* level is {@link Level#INFO} To enable the console output, use the standard
* java.util.logging.LogManager configuration to set the desired level:
* <pre>
* com.sleepycat.je.util.FileHandler.level=INFO
* </pre>
* <p>
* The default destination for this output is a circular set of files named
* &lt;environmentHome&gt;/je.info.# The logging file size can be configured
* with standard java.util.logging.FileHandler configuration.
* <p>
* JE augments the java.util.logging API with a JE environment parameter for
* setting handler levels. This is described in greater detail in
* {@link <a href="{@docRoot}/../GettingStartedGuide/managelogging.html">
* Chapter 12.Administering Berkeley DB Java Edition Applications</a>}
*
* @see <a href="{@docRoot}/../GettingStartedGuide/managelogging.html">
* Chapter 12. Logging</a>
* @see <a href="{@docRoot}/../traceLogging.html">Using JE Trace Logging</a>
*/
public class FileHandler extends java.util.logging.FileHandler {

    /*
     * The default ErrorManager will blindly write to stderr when it sees an
     * exception.  For instance, when we send an interrupt() to the Rep Node
     * we can see an InterruptedIOException written to stderr, but it never
     * gets passed to the caller.  For several tests, this causes irrelevant
     * stack traces to spew out even though no execption is ever thrown at us.
     * e.g.
     *
     * ------------- Standard Error -----------------
     * java.util.logging.ErrorManager: 2
     * java.io.InterruptedIOException
     *     at java.io.FileOutputStream.writeBytes(Native Method)
     *     at java.io.FileOutputStream.write(FileOutputStream.java:260)
     *     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
     *     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
     *     at java.util.logging.FileHandler$MeteredStream.flush(FileHandler.java:143)
     *     at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:278)
     *     at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
     *     at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)        at java.util.logging.StreamHandler.flush(StreamHandler.java:225)        at java.util.logging.FileHandler.publish(FileHandler.java:556)
     *     at com.sleepycat.je.utilint.FileRedirectHandler.publish(FileRedirectHandler.java:54)
     *     at java.util.logging.Logger.log(Logger.java:458)
     *     at java.util.logging.Logger.doLog(Logger.java:480)
     *     at java.util.logging.Logger.log(Logger.java:503)
     *     at com.sleepycat.je.utilint.LoggerUtils.logMsg(LoggerUtils.java:343)
     *     at com.sleepycat.je.utilint.LoggerUtils.info(LoggerUtils.java:395)
     *     at com.sleepycat.je.rep.impl.node.FeederManager.runFeeders(FeederManager.java:449)
     *     at com.sleepycat.je.rep.impl.node.RepNode.run(RepNode.java:1198)
     */
    public static boolean STIFLE_DEFAULT_ERROR_MANAGER = false;

    /*
     * Using a JE specific handler lets us enable and disable output for the
     * entire library, and specify an environment specific format and level
     * default.
     */
    public FileHandler(String pattern,
                       int limit,
                       int count,
                       Formatter formatter,
                       EnvironmentImpl envImpl)
        throws SecurityException, IOException {

        super(pattern, limit, count, true /* append */);

            ErrorManager em = new ErrorManager() {
                    public void error(String msg, Exception e, int code) {
                        if (STIFLE_DEFAULT_ERROR_MANAGER) {
                            System.out.println
                                ("FileHandler stifled exception: " + e);
                        } else {
                            super.error(msg, e, code);
                        }
                    }
                };
            setErrorManager(em);

        /* Messages may be formatted with an environment specific tag. */
        setFormatter(formatter);

        Level level = LoggerUtils.getHandlerLevel
            (envImpl.getConfigManager(), EnvironmentParams.JE_FILE_LEVEL,
             getClass().getName() + ".level");

        setLevel(level);
    }
}
TOP

Related Classes of com.sleepycat.je.util.FileHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.