summaryrefslogtreecommitdiffstats
path: root/misc/log4j/src/main/java/org/onap/aaf/misc/env/log4j/LogFileNamer.java
blob: 9a615fb868d33cf65e9b4fb318cf5212cd206bae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**
 * ============LICENSE_START====================================================
 * org.onap.aaf
 * ===========================================================================
 * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
 * ===========================================================================
 * Licensed 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.
 * ============LICENSE_END====================================================
 *
 */
package org.onap.aaf.misc.env.log4j;

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

public class LogFileNamer {
    private final String root;
    private final String dir;

    public LogFileNamer(final String dir, final String root) {
        this.dir = dir;
        if (root == null || "".equals(root) || root.endsWith("/")) {
            this.root = root;
        } else {
            this.root = root + "-";
        }
    }

    public LogFileNamer noPID() {
        return this;
    }

    private static final String FIRST_FILE_FORMAT_STR = "%s/%s%s.log";
    private static final String FILE_FORMAT_STR = "%s/%s%s.%d.log";

    /**
     * Accepts a String. If Separated by "|" then first part is the Appender name,
     * and the second is used in the FileNaming (This is to allow for shortened
     * Logger names, and more verbose file names) ONAP: jna code has license issues.
     * Just do Date + Unique Number
     * 
     * @param appender
     * 
     *            returns the String Appender
     * @throws IOException
     */
    public String setAppender(String appender) throws IOException {
    	File f = new File(String.format(FIRST_FILE_FORMAT_STR, dir, root, appender));
    	if(f.exists()) {
	        int i = 0;
	        while ((f = new File(String.format(FILE_FORMAT_STR, dir, root, appender, i))).exists()) {
	            ++i;
	        }
    	}
        
        try {
        	f.createNewFile();
        } catch (IOException e) {
        	throw new IOException("Cannot create file '" + f.getCanonicalPath() + '\'', e);
        }
        System.setProperty("LOG4J_FILENAME_" + appender, f.getCanonicalPath());
        return appender;
    }

    public void configure(final String path, final String fname, final String log_level) throws IOException {
        final String fullPath = path + '/' + fname;
        if (new File(fullPath).exists()) {
            org.apache.log4j.PropertyConfigurator.configureAndWatch(fullPath, 60 * 1000L);
        } else {
            URL rsrc = ClassLoader.getSystemResource(fname);
            if (rsrc == null) {
                String msg = "Neither File: " + path + '/' + fname + " nor resource on Classpath " + fname + " exist";
                throw new IOException(msg);
            }
            org.apache.log4j.PropertyConfigurator.configure(rsrc);
        }

    }
}