Remove Tabs, per Jococo
[aaf/authz.git] / misc / log4j / src / main / java / org / onap / aaf / misc / env / log4j / LogFileNamer.java
index ff7b43f..35d5038 100644 (file)
@@ -1,89 +1,96 @@
-/**
- * ============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;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-public class LogFileNamer {
-       private final String root;
-       private final String ending;
-       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 + "-";
-               }
-               ending = new SimpleDateFormat("YYYYMMdd").format(new Date());
-       }
-       
-       public LogFileNamer noPID() {
-               return this;
-       }
-       
-       private static final String FILE_FORMAT_STR = "%s/%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 {
-               String filename;
-               int i=0;
-               File f;
-               while((f=new File(filename=String.format(FILE_FORMAT_STR, dir,root, appender, ending,i))).exists()) {
-                       ++i;
-               };
-               f.createNewFile();
-               System.setProperty(
-                       "LOG4J_FILENAME_"+(appender),
-                       filename);
-               return appender;
-       }
-
-       public void configure(final String props, final String log_level) throws IOException {
-               String fname;
-               if(new File(fname="etc/"+props).exists()) {
-                       org.apache.log4j.PropertyConfigurator.configureAndWatch(fname,60*1000L);
-               } else {
-                       URL rsrc = ClassLoader.getSystemResource(props);
-                       if(rsrc==null) {
-                               String msg = "Neither File: " + fname + " or resource on Classpath " + props + " exist" ;
-                               throw new IOException(msg);
-                       }
-                       org.apache.log4j.PropertyConfigurator.configure(rsrc);
-               }
-               
-       }
-}
+/**\r
+ * ============LICENSE_START====================================================\r
+ * org.onap.aaf\r
+ * ===========================================================================\r
+ * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.\r
+ * ===========================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END====================================================\r
+ *\r
+ */\r
+package org.onap.aaf.misc.env.log4j;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.net.URL;\r
+\r
+public class LogFileNamer {\r
+    private final String root;\r
+    private final String dir;\r
+\r
+    public LogFileNamer(final String dir, final String root) {\r
+        this.dir = dir;\r
+        if (root == null || "".equals(root) || root.endsWith("/")) {\r
+            this.root = root;\r
+        } else {\r
+            this.root = root + "-";\r
+        }\r
+    }\r
+\r
+    public LogFileNamer noPID() {\r
+        return this;\r
+    }\r
+\r
+    private static final String FIRST_FILE_FORMAT_STR = "%s/%s%s.log";\r
+    private static final String FILE_FORMAT_STR = "%s/%s%s.%d.log";\r
+\r
+    /**\r
+     * Accepts a String. If Separated by "|" then first part is the Appender name,\r
+     * and the second is used in the FileNaming (This is to allow for shortened\r
+     * Logger names, and more verbose file names) ONAP: jna code has license issues.\r
+     * Just do Date + Unique Number\r
+     * \r
+     * @param appender\r
+     * \r
+     *            returns the String Appender\r
+     * @throws IOException\r
+     */\r
+    public String setAppender(String appender) throws IOException {\r
+        File f = new File(String.format(FIRST_FILE_FORMAT_STR, dir, root, appender));\r
+        File lock = new File(f.getAbsoluteFile()+".lock");\r
+        if(f.exists()) {\r
+            if(lock.exists()) {\r
+                int i = 0;\r
+                while ((f = new File(String.format(FILE_FORMAT_STR, dir, root, appender, i))).exists() &&\r
+                       (lock = new File(f.getAbsoluteFile()+".lock")).exists()) {\r
+                    ++i;\r
+                }\r
+            }\r
+        }\r
+        \r
+        try {\r
+            lock.createNewFile();\r
+            lock.deleteOnExit();\r
+            f.createNewFile();\r
+        } catch (IOException e) {\r
+            throw new IOException("Cannot create file '" + f.getCanonicalPath() + '\'', e);\r
+        }\r
+        System.setProperty("LOG4J_FILENAME_" + appender, f.getCanonicalPath());\r
+        return appender;\r
+    }\r
+\r
+    public void configure(final String path, final String fname, final String log_level) throws IOException {\r
+        final String fullPath = path + '/' + fname;\r
+        if (new File(fullPath).exists()) {\r
+            org.apache.log4j.PropertyConfigurator.configureAndWatch(fullPath, 60 * 1000L);\r
+        } else {\r
+            URL rsrc = ClassLoader.getSystemResource(fname);\r
+            if (rsrc == null) {\r
+                String msg = "Neither File: " + path + '/' + fname + " nor resource on Classpath " + fname + " exist";\r
+                throw new IOException(msg);\r
+            }\r
+            org.apache.log4j.PropertyConfigurator.configure(rsrc);\r
+        }\r
+\r
+    }\r
+}\r