summaryrefslogtreecommitdiffstats
path: root/pki/base/common/src/com/netscape/cms/logging/RollingLogFile.java
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/common/src/com/netscape/cms/logging/RollingLogFile.java')
-rw-r--r--pki/base/common/src/com/netscape/cms/logging/RollingLogFile.java252
1 files changed, 125 insertions, 127 deletions
diff --git a/pki/base/common/src/com/netscape/cms/logging/RollingLogFile.java b/pki/base/common/src/com/netscape/cms/logging/RollingLogFile.java
index 2f97dcaa..e51a117a 100644
--- a/pki/base/common/src/com/netscape/cms/logging/RollingLogFile.java
+++ b/pki/base/common/src/com/netscape/cms/logging/RollingLogFile.java
@@ -17,7 +17,6 @@
// --- END COPYRIGHT BLOCK ---
package com.netscape.cms.logging;
-
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
@@ -41,12 +40,11 @@ import com.netscape.certsrv.logging.ILogger;
import com.netscape.certsrv.logging.SystemEvent;
import com.netscape.cmsutil.util.Utils;
-
/**
* A rotating log file for Certificate log events. This class loosely follows
* the Netscape Common Log API implementing rollover interval, size and file
* naming conventions. It does not yet implement Disk Usage.
- *
+ *
* @version $Revision$, $Date$
*/
public class RollingLogFile extends LogFile {
@@ -104,8 +102,7 @@ public class RollingLogFile extends LogFile {
*/
private Object mExpLock = new Object();
- private final static String LOGGING_SIGNED_AUDIT_LOG_DELETE =
- "LOGGING_SIGNED_AUDIT_LOG_DELETE_3";
+ private final static String LOGGING_SIGNED_AUDIT_LOG_DELETE = "LOGGING_SIGNED_AUDIT_LOG_DELETE_3";
/**
* Construct a RollingLogFile
@@ -115,16 +112,15 @@ public class RollingLogFile extends LogFile {
/**
* Initialize and open a RollingLogFile using the prop config store
- *
+ *
* @param config The property config store to find values in
*/
- public void init(IConfigStore config) throws IOException,
- EBaseException {
+ public void init(IConfigStore config) throws IOException, EBaseException {
super.init(config);
rl_init(config.getInteger(PROP_MAX_FILE_SIZE, MAX_FILE_SIZE),
- config.getString(PROP_ROLLOVER_INTERVAL, ROLLOVER_INTERVAL),
- config.getString(PROP_EXPIRATION_TIME, EXPIRATION_TIME));
+ config.getString(PROP_ROLLOVER_INTERVAL, ROLLOVER_INTERVAL),
+ config.getString(PROP_EXPIRATION_TIME, EXPIRATION_TIME));
}
/**
@@ -132,7 +128,7 @@ public class RollingLogFile extends LogFile {
* attributes.
*/
protected void rl_init(int maxFileSize, String rolloverInterval,
- String expirationTime) {
+ String expirationTime) {
mMaxFileSize = maxFileSize * 1024;
setRolloverTime(rolloverInterval);
setExpirationTime(expirationTime);
@@ -153,9 +149,9 @@ public class RollingLogFile extends LogFile {
/**
* Set the rollover interval
- *
- * @param rolloverSeconds The amount of time in seconds until the log
- * is rotated. A value of 0 will disable log rollover.
+ *
+ * @param rolloverSeconds The amount of time in seconds until the log is
+ * rotated. A value of 0 will disable log rollover.
**/
public synchronized void setRolloverTime(String rolloverSeconds) {
mRolloverInterval = Long.valueOf(rolloverSeconds).longValue() * 1000;
@@ -171,8 +167,8 @@ public class RollingLogFile extends LogFile {
/**
* Get the rollover interval
- *
- * @return The interval in seconds in which the log is rotated
+ *
+ * @return The interval in seconds in which the log is rotated
**/
public synchronized int getRolloverTime() {
return (int) (mRolloverInterval / 1000);
@@ -180,9 +176,9 @@ public class RollingLogFile extends LogFile {
/**
* Set the file expiration time
- *
- * @param expirationSeconds The amount of time in seconds until log files
- * are deleted
+ *
+ * @param expirationSeconds The amount of time in seconds until log files
+ * are deleted
**/
public void setExpirationTime(String expirationSeconds) {
@@ -205,8 +201,8 @@ public class RollingLogFile extends LogFile {
/**
* Get the expiration time
- *
- * @return The age in seconds in which log files are delete
+ *
+ * @return The age in seconds in which log files are delete
**/
public int getExpirationTime() {
return (int) (mExpirationTime / 1000);
@@ -216,90 +212,86 @@ public class RollingLogFile extends LogFile {
* Rotate the log file to a backup file with a incrementing integer
* extension
**/
- public synchronized void rotate()
- throws IOException {
+ public synchronized void rotate() throws IOException {
- //File backupFile = new File(mFileName + "." + mFileNumber);
- File backupFile = new File(mFileName + "." + mLogFileDateFormat.format(mDate));
+ // File backupFile = new File(mFileName + "." + mFileNumber);
+ File backupFile = new File(mFileName + "."
+ + mLogFileDateFormat.format(mDate));
// close, backup, and reopen the log file zeroizing its contents
super.close();
try {
- if( Utils.isNT() ) {
+ if (Utils.isNT()) {
// NT is very picky on the path
- Utils.exec( "copy " +
- mFile.getCanonicalPath().replace( '/', '\\' ) +
- " " +
- backupFile.getCanonicalPath().replace( '/',
- '\\' ) );
+ Utils.exec("copy "
+ + mFile.getCanonicalPath().replace('/', '\\') + " "
+ + backupFile.getCanonicalPath().replace('/', '\\'));
} else {
// Create a copy of the original file which
// preserves the original file permissions.
- Utils.exec( "cp -p " + mFile.getCanonicalPath() + " " +
- backupFile.getCanonicalPath() );
+ Utils.exec("cp -p " + mFile.getCanonicalPath() + " "
+ + backupFile.getCanonicalPath());
}
// Zeroize the original file if and only if
// the backup copy was successful.
- if( backupFile.exists() ) {
+ if (backupFile.exists()) {
// Make certain that the backup file has
// the correct permissions.
- if( !Utils.isNT() ) {
- Utils.exec( "chmod 00640 " + backupFile.getCanonicalPath() );
+ if (!Utils.isNT()) {
+ Utils.exec("chmod 00640 " + backupFile.getCanonicalPath());
}
try {
// Open and close the original file
// to zeroize its contents.
- PrintWriter pw = new PrintWriter( mFile );
+ PrintWriter pw = new PrintWriter(mFile);
pw.close();
// Make certain that the original file retains
// the correct permissions.
- if( !Utils.isNT() ) {
- Utils.exec( "chmod 00640 " + mFile.getCanonicalPath() );
+ if (!Utils.isNT()) {
+ Utils.exec("chmod 00640 " + mFile.getCanonicalPath());
}
- } catch ( FileNotFoundException e ) {
- CMS.debug( "Unable to zeroize "
- + mFile.toString() );
+ } catch (FileNotFoundException e) {
+ CMS.debug("Unable to zeroize " + mFile.toString());
}
} else {
- CMS.debug( "Unable to backup "
- + mFile.toString() + " to "
- + backupFile.toString() );
+ CMS.debug("Unable to backup " + mFile.toString() + " to "
+ + backupFile.toString());
}
- } catch( Exception e ) {
- CMS.debug( "Unable to backup "
- + mFile.toString() + " to "
- + backupFile.toString() );
+ } catch (Exception e) {
+ CMS.debug("Unable to backup " + mFile.toString() + " to "
+ + backupFile.toString());
}
super.open(); // will reset mBytesWritten
mFileNumber++;
}
/**
- * Remove any log files which have not been modified in the specified
- * time
+ * Remove any log files which have not been modified in the specified time
* <P>
- *
- * NOTE: automatic removal of log files is currently NOT supported!
+ *
+ * NOTE: automatic removal of log files is currently NOT supported!
* <P>
- *
+ *
* <ul>
* <li>signed.audit LOGGING_SIGNED_AUDIT_LOG_DELETE used AFTER audit log
* expires (authorization should not allow, but in case authorization gets
* compromised make sure it is written AFTER the log expiration happens)
* </ul>
+ *
* @param expirationSeconds The number of seconds since the expired files
- * have been modified.
+ * have been modified.
* @return the time in milliseconds when the next file expires
**/
public long expire(long expirationSeconds) throws ELogException {
String auditMessage = null;
if (expirationSeconds <= 0)
- throw new ELogException(CMS.getUserMessage("CMS_LOG_EXPIRATION_TIME_ZERO"));
+ throw new ELogException(
+ CMS.getUserMessage("CMS_LOG_EXPIRATION_TIME_ZERO"));
long expirationTime = expirationSeconds * 1000;
long currentTime = System.currentTimeMillis();
@@ -312,27 +304,27 @@ public class RollingLogFile extends LogFile {
File dir = new File(dirName);
// Get just the base name, minus the .date extension
- //int len = mFile.getName().length() - LogFile.DATE_PATTERN.length() - 1;
- //String baseName = mFile.getName().substring(0, len);
+ // int len = mFile.getName().length() - LogFile.DATE_PATTERN.length() -
+ // 1;
+ // String baseName = mFile.getName().substring(0, len);
String fileName = mFile.getName();
String baseName = null, pathName = null;
int index = fileName.lastIndexOf("/");
- if (index != -1) { // "/" exist in fileName
+ if (index != -1) { // "/" exist in fileName
pathName = fileName.substring(0, index);
baseName = fileName.substring(index + 1);
dirName = dirName.concat("/" + pathName);
- }else { // "/" NOT exist in fileName
+ } else { // "/" NOT exist in fileName
baseName = fileName;
}
fileFilter ff = new fileFilter(baseName + ".");
String[] filelist = dir.list(ff);
- if (filelist == null) { // Crap! Something is wrong.
- throw new
- ELogException(CMS.getUserMessage("CMS_LOG_DIRECTORY_LIST_FAILED",
- dirName, ff.toString()));
+ if (filelist == null) { // Crap! Something is wrong.
+ throw new ELogException(CMS.getUserMessage(
+ "CMS_LOG_DIRECTORY_LIST_FAILED", dirName, ff.toString()));
}
// Walk through the list of files which match this log file name
@@ -340,33 +332,29 @@ public class RollingLogFile extends LogFile {
for (int i = 0; i < filelist.length; i++) {
if (pathName != null) {
filelist[i] = pathName + "/" + filelist[i];
- }else {
+ } else {
filelist[i] = dirName + "/" + filelist[i];
}
-
+
String fullname = dirName + File.separatorChar + filelist[i];
File file = new File(fullname);
long fileTime = file.lastModified();
// Java documentation on File says lastModified() should not
- // be interpeted. The doc is wrong. See JavaSoft bug #4094538
+ // be interpeted. The doc is wrong. See JavaSoft bug #4094538
if ((currentTime - fileTime) > expirationTime) {
file.delete();
if (file.exists()) {
// log failure in deleting an expired signed audit log file
auditMessage = CMS.getLogMessage(
- LOGGING_SIGNED_AUDIT_LOG_DELETE,
- ILogger.SYSTEM_UID,
- ILogger.FAILURE,
- fullname);
+ LOGGING_SIGNED_AUDIT_LOG_DELETE,
+ ILogger.SYSTEM_UID, ILogger.FAILURE, fullname);
} else {
// log success in deleting an expired signed audit log file
auditMessage = CMS.getLogMessage(
- LOGGING_SIGNED_AUDIT_LOG_DELETE,
- ILogger.SYSTEM_UID,
- ILogger.SUCCESS,
- fullname);
+ LOGGING_SIGNED_AUDIT_LOG_DELETE,
+ ILogger.SYSTEM_UID, ILogger.SUCCESS, fullname);
}
audit(auditMessage);
@@ -382,7 +370,7 @@ public class RollingLogFile extends LogFile {
//
// At first glance you may think it's a waste of thread resources to have
// two threads for every log file, but the truth is that these threads are
- // sleeping 99% of the time. NxN thread implementations (Solaris, NT,
+ // sleeping 99% of the time. NxN thread implementations (Solaris, NT,
// IRIX 6.4, Unixware, etc...) will handle these in user space.
//
// You may be able to join these into one thread, and deal with
@@ -392,8 +380,8 @@ public class RollingLogFile extends LogFile {
//
/**
- * Log rotation thread. Sleep for the rollover interval and rotate the
- * log. Changing rollover interval to 0 will cause this thread to exit.
+ * Log rotation thread. Sleep for the rollover interval and rotate the log.
+ * Changing rollover interval to 0 will cause this thread to exit.
*/
final class RolloverThread extends Thread {
@@ -413,8 +401,10 @@ public class RollingLogFile extends LogFile {
RollingLogFile.this.wait(mRolloverInterval);
} catch (InterruptedException e) {
// This shouldn't happen very often
- CMS.getLogger().getLogQueue().log(new
- SystemEvent(CMS.getUserMessage("CMS_LOG_THREAD_INTERRUPT", "rollover")));
+ CMS.getLogger()
+ .getLogQueue()
+ .log(new SystemEvent(CMS.getUserMessage(
+ "CMS_LOG_THREAD_INTERRUPT", "rollover")));
}
}
@@ -426,24 +416,24 @@ public class RollingLogFile extends LogFile {
try {
rotate();
} catch (IOException e) {
- ConsoleError.send(new
- SystemEvent(CMS.getUserMessage("CMS_LOG_ROTATE_LOG_FAILED", mFile.getName(), e.toString())));
+ ConsoleError.send(new SystemEvent(CMS.getUserMessage(
+ "CMS_LOG_ROTATE_LOG_FAILED", mFile.getName(),
+ e.toString())));
break;
}
}
// else
- // Don't rotate empty logs
- // flag in log summary file?
+ // Don't rotate empty logs
+ // flag in log summary file?
}
mRolloverThread = null;
}
}
-
/**
- * Log expiration thread. Sleep for the expiration interval and
- * delete any files which are too old.
- * Changing expiration interval to 0 will cause this thread to exit.
+ * Log expiration thread. Sleep for the expiration interval and delete any
+ * files which are too old. Changing expiration interval to 0 will cause
+ * this thread to exit.
*/
final class ExpirationThread extends Thread {
@@ -452,7 +442,8 @@ public class RollingLogFile extends LogFile {
*/
public ExpirationThread() {
super();
- super.setName(mFileName + ".expiration-" + (Thread.activeCount() + 1));
+ super.setName(mFileName + ".expiration-"
+ + (Thread.activeCount() + 1));
}
public void run() {
@@ -466,19 +457,19 @@ public class RollingLogFile extends LogFile {
try {
wakeupTime = expire((long) (mExpirationTime / 1000));
} catch (SecurityException e) {
- ConsoleError.send(new
- SystemEvent(CMS.getUserMessage("CMS_LOG_EXPIRE_LOG_FAILED", e.toString())));
+ ConsoleError.send(new SystemEvent(CMS.getUserMessage(
+ "CMS_LOG_EXPIRE_LOG_FAILED", e.toString())));
break;
} catch (ELogException e) {
- ConsoleError.send(new
- SystemEvent(CMS.getUserMessage("CMS_LOG_EXPIRE_LOG_FAILED", e.toString())));
+ ConsoleError.send(new SystemEvent(CMS.getUserMessage(
+ "CMS_LOG_EXPIRE_LOG_FAILED", e.toString())));
break;
}
sleepTime = wakeupTime - System.currentTimeMillis();
- //System.out.println("wakeup " + wakeupTime);
- //System.out.println("current "+System.currentTimeMillis());
- //System.out.println("sleep " + sleepTime);
+ // System.out.println("wakeup " + wakeupTime);
+ // System.out.println("current "+System.currentTimeMillis());
+ // System.out.println("sleep " + sleepTime);
// Sleep for the interval and then check the directory
// Note: mExpirationTime can only change while we're
// sleeping
@@ -487,8 +478,9 @@ public class RollingLogFile extends LogFile {
mExpLock.wait(sleepTime);
} catch (InterruptedException e) {
// This shouldn't happen very often
- ConsoleError.send(new
- SystemEvent(CMS.getUserMessage("CMS_LOG_THREAD_INTERRUPT", "expiration")));
+ ConsoleError.send(new SystemEvent(CMS
+ .getUserMessage("CMS_LOG_THREAD_INTERRUPT",
+ "expiration")));
}
}
}
@@ -499,11 +491,11 @@ public class RollingLogFile extends LogFile {
/**
* Write an event to the log file
- *
- * @param ev The event to be logged.
+ *
+ * @param ev The event to be logged.
**/
public synchronized void log(ILogEvent ev) throws ELogException {
- //xxx, Shall we log first without checking if it exceed the maximum?
+ // xxx, Shall we log first without checking if it exceed the maximum?
super.log(ev); // Will increment mBytesWritten
if ((0 != mMaxFileSize) && (mBytesWritten > mMaxFileSize)) {
@@ -511,7 +503,9 @@ public class RollingLogFile extends LogFile {
try {
rotate();
} catch (IOException e) {
- throw new ELogException(CMS.getUserMessage("CMS_LOG_ROTATE_LOG_FAILED", mFile.getName(), e.toString()));
+ throw new ELogException(CMS.getUserMessage(
+ "CMS_LOG_ROTATE_LOG_FAILED", mFile.getName(),
+ e.toString()));
}
}
}
@@ -519,9 +513,8 @@ public class RollingLogFile extends LogFile {
/**
* Retrieve log file list.
*/
- public synchronized NameValuePairs retrieveLogList(Hashtable req
- ) throws ServletException,
- IOException, EBaseException {
+ public synchronized NameValuePairs retrieveLogList(Hashtable req)
+ throws ServletException, IOException, EBaseException {
NameValuePairs params = new NameValuePairs();
String[] files = null;
@@ -534,7 +527,7 @@ public class RollingLogFile extends LogFile {
/**
* Get the log file list in the log directory
- *
+ *
* @return an array of filenames with related path to cert server root
*/
protected String[] fileList() {
@@ -544,7 +537,7 @@ public class RollingLogFile extends LogFile {
String fileName = mFile.getName();
int index = fileName.lastIndexOf("/");
- if (index != -1) { // "/" exist in fileName
+ if (index != -1) { // "/" exist in fileName
pathName = fileName.substring(0, index);
baseName = fileName.substring(index + 1);
if (dirName == null) {
@@ -552,24 +545,25 @@ public class RollingLogFile extends LogFile {
} else {
dirName = dirName.concat("/" + pathName);
}
- }else { // "/" NOT exist in fileName
+ } else { // "/" NOT exist in fileName
baseName = fileName;
}
-
+
File dir = new File(dirName);
fileFilter ff = new fileFilter(baseName + ".");
- //There are some difference here. both should work
- //error,logs,logs/error jdk115
- //logs/system,., logs/system jdk116
- //System.out.println(mFile.getName()+","+dirName+","+mFile.getPath()); //log/system,.
-
+ // There are some difference here. both should work
+ // error,logs,logs/error jdk115
+ // logs/system,., logs/system jdk116
+ // System.out.println(mFile.getName()+","+dirName+","+mFile.getPath());
+ // //log/system,.
+
String[] filelist = dir.list(ff);
for (int i = 0; i < filelist.length; i++) {
if (pathName != null) {
filelist[i] = pathName + "/" + filelist[i];
- }else {
+ } else {
filelist[i] = dirName + "/" + filelist[i];
}
}
@@ -589,7 +583,7 @@ public class RollingLogFile extends LogFile {
v.addElement(PROP_MAX_FILE_SIZE + "=");
v.addElement(PROP_ROLLOVER_INTERVAL + "=");
- //v.addElement(PROP_EXPIRATION_TIME + "=");
+ // v.addElement(PROP_EXPIRATION_TIME + "=");
return v;
}
@@ -609,7 +603,8 @@ public class RollingLogFile extends LogFile {
else if (mRolloverInterval / 1000 <= 60 * 60 * 24 * 366)
v.addElement(PROP_ROLLOVER_INTERVAL + "=" + "Yearly");
- //v.addElement(PROP_EXPIRATION_TIME + "=" + mExpirationTime / 1000);
+ // v.addElement(PROP_EXPIRATION_TIME + "=" + mExpirationTime /
+ // 1000);
} catch (Exception e) {
}
return v;
@@ -620,17 +615,21 @@ public class RollingLogFile extends LogFile {
Vector info = new Vector();
for (int i = 0; i < p.length; i++) {
- if (!p[i].startsWith(IExtendedPluginInfo.HELP_TOKEN) && !p[i].startsWith(IExtendedPluginInfo.HELP_TEXT))
+ if (!p[i].startsWith(IExtendedPluginInfo.HELP_TOKEN)
+ && !p[i].startsWith(IExtendedPluginInfo.HELP_TEXT))
info.addElement(p[i]);
}
- info.addElement(PROP_MAX_FILE_SIZE + ";integer;If the current log file size if bigger than this parameter in kilobytes(KB), the file will be rotated.");
- info.addElement(PROP_ROLLOVER_INTERVAL + ";choice(Hourly,Daily,Weekly,Monthly,Yearly);The frequency of the log being rotated.");
- info.addElement(PROP_EXPIRATION_TIME + ";integer;The amount of time before a backed up log is removed in seconds");
+ info.addElement(PROP_MAX_FILE_SIZE
+ + ";integer;If the current log file size if bigger than this parameter in kilobytes(KB), the file will be rotated.");
+ info.addElement(PROP_ROLLOVER_INTERVAL
+ + ";choice(Hourly,Daily,Weekly,Monthly,Yearly);The frequency of the log being rotated.");
+ info.addElement(PROP_EXPIRATION_TIME
+ + ";integer;The amount of time before a backed up log is removed in seconds");
info.addElement(IExtendedPluginInfo.HELP_TOKEN +
- //";configuration-logrules-rollinglogfile");
- ";configuration-adminbasics");
- info.addElement(IExtendedPluginInfo.HELP_TEXT +
- ";Write the log messages to a file which will be rotated automatically.");
+ // ";configuration-logrules-rollinglogfile");
+ ";configuration-adminbasics");
+ info.addElement(IExtendedPluginInfo.HELP_TEXT
+ + ";Write the log messages to a file which will be rotated automatically.");
String[] params = new String[info.size()];
info.copyInto(params);
@@ -639,14 +638,13 @@ public class RollingLogFile extends LogFile {
}
}
-
/**
* A file filter to select the file with a given prefix
*/
class fileFilter implements FilenameFilter {
String patternToMatch = null;
- public fileFilter (String pattern) {
+ public fileFilter(String pattern) {
patternToMatch = pattern;
}