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

org.cesecore.util.log.SaferDailyRollingFileAppender Maven / Gradle / Ivy

/*************************************************************************
 *                                                                       *
 *  CESeCore: CE Security Core                                           *
 *                                                                       *
 *  This software is free software; you can redistribute it and/or       *
 *  modify it under the terms of the GNU Lesser General Public           *
 *  License as published by the Free Software Foundation; either         *
 *  version 2.1 of the License, or any later version.                    *
 *                                                                       *
 *  See terms of license at gnu.org.                                     *
 *                                                                       *
 *************************************************************************/

package org.cesecore.util.log;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.spi.LoggingEvent;

/**
 * The purpose of this extension is to notify the client of the this log appender that it isn't possible to log anymore.
 * 
 * @version $Id: SaferDailyRollingFileAppender.java 18195 2013-11-25 08:51:43Z mikekushner $
 */
public class SaferDailyRollingFileAppender extends DailyRollingFileAppender {
    private static SaferAppenderListener subscriber;

    @Override
    public void append(LoggingEvent evt) {
        super.append(evt);
        File logfile;
        try {
            logfile = new File(super.getFile());
            if ((subscriber != null) && (logfile != null)) {
                if (logfile.canWrite()) {
                    subscriber.setCanlog(true);
                } else {
                    subscriber.setCanlog(false);
                }
            }
        } catch (Exception e) {
            if (subscriber != null) {
                subscriber.setCanlog(false);
            }
        }
    }

    /** Sets the SaferAppenderListener that will be informed if a logging error occurs. */
    public static void addSubscriber(SaferAppenderListener pSubscriber) {
        subscriber = pSubscriber;
    }

    @Override
    public void setFile(final String filename) {
        constructPath(filename);
        super.setFile(filename);
    }

    private void constructPath(final String filename) {
        File dir;
        try {
            URL url = new URL(filename.trim());
            dir = new File(url.getFile()).getParentFile();
        } catch (MalformedURLException e) {
            dir = new File(filename.trim()).getParentFile();
        }
        if (!dir.exists()) {
            boolean success = dir.mkdirs();
            if (!success) {
                LogLog.error("Failed to create directory structure: " + dir);
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy