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

org.openas2.logging.FileLogger Maven / Gradle / Ivy

Go to download

Open source implementation of the AS2 standard for signed encrypted and compressed document transfer

There is a newer version: 2.10.1
Show newest version
package org.openas2.logging;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;

import org.openas2.OpenAS2Exception;
import org.openas2.Session;
import org.openas2.message.Message;
import org.openas2.params.CompositeParameters;
import org.openas2.params.DateParameters;
import org.openas2.params.ParameterParser;

public class FileLogger extends BaseLogger {
    public static final String PARAM_FILENAME = "filename";
    
    private final Object fileWriteLock = new Object();

    public void init(Session session, Map parameters) throws OpenAS2Exception {
        super.init(session, parameters);
        // check if log file can be created
        getLogFile();
    }

    protected String getShowDefaults() {
        return VALUE_SHOW_ALL;
    }

    protected void appendToFile(String text) {
    	
    	final byte[] msg = text.getBytes();
    	// one thread might have to wait a long time (several seconds) if it is busy.
    	synchronized(fileWriteLock) { 
    		try (FileOutputStream fos = new FileOutputStream(getLogFile(), true)) {
    			fos.write(msg);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

    protected File getLogFile() throws OpenAS2Exception {
        String filename = getParameter(PARAM_FILENAME, true);

        ParameterParser parser = createParser();
        filename = ParameterParser.parse(filename, parser);

        File logFile = new File(filename);

        if (!logFile.exists()) {
            File parentDir = logFile.getParentFile();
            if (!parentDir.exists()) {
                if (!parentDir.mkdirs()) {
                    String msg = "Could not create log directories for file \"" + logFile.getAbsolutePath()
                            + "\" for log file parameter \"" + filename + "\"";
                    throw new OpenAS2Exception(msg);
                }
            }
            try {
                if (!logFile.createNewFile()) {
                    String msg = "Could not create log file \"" + logFile.getAbsolutePath()
                            + "\" for log file parameter \"" + filename + "\"";
                    throw new OpenAS2Exception(msg);
                }
            } catch (IOException ioe) {
                String msg = "Could not create log file \"" + logFile.getAbsolutePath()
                        + "\" for log file parameter \"" + filename + "\": " + ioe.getMessage();
                throw new OpenAS2Exception(msg, ioe);
            }
        }

        return logFile;
    }

    protected ParameterParser createParser() {
        CompositeParameters compParams = new CompositeParameters(false);
        compParams.add("date", new DateParameters());

        return compParams;
    }

    protected void doLog(Throwable t, boolean terminated) {
        appendToFile(getFormatter().format(t, terminated));
    }

    public void doLog(Level level, String msgText, Message as2Msg) {
        appendToFile(getFormatter().format(level, msgText + (as2Msg == null?"":as2Msg.getLogMsgID())));
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy