package xxx.common.framework.util;
import java.io.File;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public abstract class GenericLogger
implements LoggerInterface
{
public static final int APP_DEBUG = 9;
public static final int DEBUG = 8;
public static final int REQUEST = 7;
public static final int CLIENT = 6;
public static final int EVENT = 5;
public static final int STAT = 4;
public static final int INFO = 3;
public static final int CONTROL = 2;
public static final int ERROR = 1;
public static final int ALERT = 0;
protected static final int FILE_MODE = 0;
protected static final int STDOUT_MODE = 1;
protected static final int BOTH_MODE = 2;
protected PrintWriter writer = null;
protected int mode = 1;
protected int logLevel = 9;
protected String logFilePath = ".";
protected String logFileName = "logger.log";
protected GenericLogger()
{
init();
if (this.logLevel == 8)
this.logLevel = redefineDebug();
}
protected void init()
{
}
protected int redefineDebug()
{
return 8;
}
public void logAppDebug(Object msg) {
logAppDebug(null, msg);
}
public void logAppDebug(Object caller, Object msg) {
logAction(9, "APP.. ", caller, msg);
}
public void logDebug(Object msg) {
logDebug(null, msg);
}
public void logDebug(Object caller, Object msg) {
logAction(8, "DEBUG ", caller, msg);
}
public void logRequest(Object msg) {
logRequest(null, msg);
}
public void logRequest(Object caller, Object msg) {
logAction(7, "REQ.. ", caller, msg);
}
public void logClient(Object msg) {
logClient(null, msg);
}
public void logClient(Object caller, Object msg) {
logAction(6, "CLNT. ", caller, msg);
}
public void logEvent(Object msg) {
logEvent(null, msg);
}
public void logEvent(Object caller, Object msg) {
logAction(5, "EVENT ", caller, msg);
}
public void logStat(Object msg) {
logStat(null, msg);
}
public void logStat(Object caller, Object msg) {
logAction(4, "STAT. ", caller, msg);
}
public void logInfo(Object msg) {
logInfo(null, msg);
}
public void logInfo(Object caller, Object msg) {
logAction(3, "INFO. ", caller, msg);
}
public void logControl(Object msg) {
logControl(null, msg);
}
public void logControl(Object caller, Object msg) {
logAction(2, "CTRL. ", caller, msg);
}
public void logError(Object msg) {
logError(null, msg);
}
public void logError(Object caller, Object msg) {
logAction(1, "ERROR ", caller, msg);
}
public void logAlert(Object msg) {
logAlert(null, msg);
}
public void logAlert(Object caller, Object msg) {
logAction(0, "ALERT ", caller, msg);
}
protected synchronized void logAction(int level, String prefix, Object caller, Object msg) {
try {
if (shouldLog(level)) {
String message = formatMessage(prefix, formatClassName(caller) + msg);
if ((this.mode == 0) || (this.mode == 2)) {
this.writer.println(message);
this.writer.flush();
}
if ((this.mode == 1) || (this.mode == 2))
System.out.println(message);
}
}
catch (Exception e) {
System.out.println(getClass().toString() + " exception: " + e);
e.printStackTrace();
}
}
public static String formatClassName(Object caller)
{
String name = "";
if (caller != null) {
name = caller.getClass().getName();
name = name.substring(name.lastIndexOf(".") + 1, name.length());
name = "[" + name + "] ";
}
return name;
}
public static String formatMessage(String prefix, String msg) {
String pattern = "dd-MM-yyyy HH:mm:ss:SSS";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date current = new Date();
String dateString = "[" + sdf.format(current) + "]";
return prefix + dateString + " " + msg;
}
public static String constructFullPath(String path, String file) {
if ((path == null) || (path.trim().equals(""))) {
return file;
}
int index = path.lastIndexOf(File.separator);
if ((index < 0) || (index != path.length() - File.separator.length())) {
return path + File.separator + file;
}
return path + file;
}
protected boolean isValidLogLevel(int level) {
switch (level) { case 9:
break;
case 8:
break;
case 7:
break;
case 6:
break;
case 5:
break;
case 4:
break;
case 3:
break;
case 2:
break;
case 1:
break;
case 0:
break;
default:
String str = getClass().toString() + ": unknown log level";
System.out.println(str);
return false;
}
return true;
}
protected boolean shouldLog(int level) {
if (!isValidLogLevel(level)) {
return false;
}
if (level == 8) {
return redefineDebug() <= this.logLevel;
}
return level <= this.logLevel;
}
public int getLogLevel() {
return this.logLevel;
}
public void recording(ServletRequest request)
{
if (getLogLevel() < 7) return;
StringBuffer buffer = new StringBuffer();
String valueAction = request.getParameter("action");
if (valueAction != null) {
buffer.append("(" + valueAction + ")");
}
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String parameterName = (String)e.nextElement();
if (!parameterName.equals("action"))
{
String[] values = (String[])request.getParameterValues(parameterName);
for (int i = 0; i < values.length; i++) {
String valueString = values[i];
if (valueString == null) valueString = "null";
buffer.append(" " + parameterName + "=(" + valueString + ")");
}
}
}
HttpSession session = ((HttpServletRequest)request).getSession(false);
String id = session == null ? "unknown" : session.getId();
logRequest(GenericLoggerTag.handleAction(id) + buffer);
}
public void measuringClientTime(ServletRequest request) {
if (!enableClientTimeMeasurement()) return;
String clientBeginTime = request.getParameter("client_begin_time");
String clientEndTime = request.getParameter("client_end_time");
HttpSession session = ((HttpServletRequest)request).getSession(false);
String id = session == null ? "unknown" : session.getId();
if ((clientEndTime != null) && (!clientEndTime.equals(""))) {
logClient(">> CLNT. [" + clientEndTime.replace('|', ' ') + "] " + GenericLoggerTag.endClient(id) + request.getParameter("pre_action"));
}
if ((clientBeginTime != null) && (!clientBeginTime.equals("")))
logClient(">> CLNT. [" + clientBeginTime.replace('|', ' ') + "] " + GenericLoggerTag.beginClient(id) + request.getParameter("action"));
}
public boolean enableClientTimeMeasurement()
{
return (getLogLevel() >= 6) && (getLogLevel() != 7);
}
public boolean enableClientPositionMeasurement()
{
return getLogLevel() >= 7;
}
}
_____________________________________
package xxx.common.framework.util;
public class GenericLoggerTag
{
public static final String BEGIN_CLIENT = " begin.client=";
public static final String BEGIN_TESTCASE = " begin.testcase=";
public static final String ABORT_TESTCASE = " abort.testcase=";
public static final String BEGIN_ACTION = " begin.action=";
public static final String HANDLE_ACTION = " handle.action=";
public static final String DETAIL_ACTION = " detail.action=";
public static final String DETAIL_IDENTITY = " detail.identity=";
public static final String HANDLE_EVENT = " handle.event=";
public static final String BEGIN_WEB = " begin.web=";
public static final String BEGIN_EJB = " begin.ejb=";
public static final String DETAIL_EJB = " detail.ejb=";
public static final String BEGIN_SQL = " begin.sql=";
public static final String END_SQL = " end...sql=";
public static final String BEGIN_RS = " begin.rs=";
public static final String END_RS = " end...rs=";
public static final String BEGIN_CONNECT = " begin.connect=";
public static final String END_CONNECT = " end...connect=";
public static final String BEGIN_EAI = " begin.eai=";
public static final String END_EAI = " end...eai=";
public static final String END_EJB = " end...ejb=";
public static final String END_WEB = " end...web=";
public static final String END_ACTION = " end...action=";
public static final String END_TESTCASE = " end...testcase=";
public static final String END_CLIENT = " end...client=";
public static final String BEGIN_TASK = " begin.task=";
public static final String END_TASK = " end...task=";
public static final String REDIRECT_CLIENT = ">> CLNT. ";
public static String format(String id)
{
return "[ID=" + id + "]";
}
public static String beginAction(String id) {
return format(id) + " begin.action=";
}
public static String endAction(String id) {
return format(id) + " end...action=";
}
public static String beginWeb(String id) {
return format(id) + " begin.web=";
}
public static String endWeb(String id) {
return format(id) + " end...web=";
}
public static String beginEjb(String id) {
return format(id) + " begin.ejb=";
}
public static String endEjb(String id) {
return format(id) + " end...ejb=";
}
public static String beginTask(String id) {
return format(id) + " begin.task=";
}
public static String endTask(String id) {
return format(id) + " end...task=";
}
public static String beginClient(String id) {
return format(id) + " begin.client=";
}
public static String endClient(String id) {
return format(id) + " end...client=";
}
public static String handleEvent(String id) {
return format(id) + " handle.event=";
}
public static String handleAction(String id) {
return format(id) + " handle.action=";
}
public static String beginSql(String id) {
return format(id) + " begin.sql=";
}
public static String endSql(String id) {
return format(id) + " end...sql=";
}
public static String beginRs(String id) {
return format(id) + " begin.rs=";
}
public static String endRs(String id) {
return format(id) + " end...rs=";
}
public static String beginConnect(String id) {
return format(id) + " begin.connect=";
}
public static String endConnect(String id) {
return format(id) + " end...connect=";
}
public static String beginEai(String id) {
return format(id) + " begin.eai=";
}
public static String endEai(String id) {
return format(id) + " end...eai=";
}
public static String beginTestcase(String id) {
return format(id) + " begin.testcase=";
}
public static String endTestcase(String id) {
return format(id) + " end...testcase=";
}
public static String abortTestcase(String id) {
return format(id) + " abort.testcase=";
}
}
___yyy.properties___________________________________
#---------------------
# Logger
#---------------------
Logger.mode=2
Logger.level=9
Logger.file.path=D:\\CD\\tomcat_yyy\\webapps\\ATS\\WEB-INF\\classes\\logs
Logger.file.name=yyy_server.log
Logger.debug.redefine=
___AtsLogger.java______________
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.xxx.mil.application.yyy.util;
/**
*
*/
import java.io.*;
import xxx.common.framework.util.*;
public class AtsLogger extends GenericLogger {
protected static final String MODE_KEY = "Logger.mode";
protected static final String LEVEL_KEY = "Logger.level";
protected static final String PATH_KEY = "Logger.file.path";
protected static final String NAME_KEY = "Logger.file.name";
protected static final String DEBUG_KEY = "Logger.debug.redefine";
// All variables should be static to avoid being re-initalized after super()
private static int redefined = DEBUG;
// Singleton
private static AtsLogger out;
public static AtsLogger getInstance() {
if (out == null) out = new AtsLogger();
return out;
}
protected void init() {
try {
GenericResourceReader manager = AtsResourceReader.in;
mode = manager.getInt(MODE_KEY);
logLevel = manager.getInt(LEVEL_KEY);
logFilePath = manager.getSafeString(PATH_KEY);
logFileName = manager.getSafeString(NAME_KEY);
if (mode == FILE_MODE || mode == BOTH_MODE) {
String file = constructFullPath(logFilePath, logFileName);
FileWriter fw = new FileWriter(file, true);
writer = new PrintWriter(fw);
}
System.out.println("[" + getClass().toString() + "] mode=" + mode + " level=" + logLevel);
} catch (Exception e) {
mode = STDOUT_MODE;
logLevel = APP_DEBUG;
System.out.println(getClass().toString() + " init(): exception: " + e);
System.out.println(getClass().toString() + " init(): log mode is set to STDOUT");
System.out.println(getClass().toString() + " init(): log level is set to APP_DEBUG");
}
try {
GenericResourceReader manager = AtsResourceReader.in;
redefined = manager.getInt(DEBUG_KEY);
} catch (Exception e) {
redefined = DEBUG;
}
}
protected int redefineDebug() {
return redefined;
}
}
_______Usage__________________________________
public class C1{
private AtsLogger logger = AtsLogger.getInstance();
private AtsLoggerTag loggerTag = AtsLoggerTag.getInstance();
public CourseSession getCpdtsCourse(String courseCode, String sessionCode) throws Exception {
CourseSession searchCourseSession = new CourseSession();
// Logger.writeLogln("CpdtsManager.getCpdtsCourse {");
String key = courseCode + "@@" + sessionCode;
String logAction = "GetCpdtsCourse.";
logger.logRequest(loggerTag.beginAction(key)+ logAction);
searchCourseSession = getDao().searchCourseSession(courseCode, sessionCode);
logger.logRequest(loggerTag.endAction(key)+ logAction);
// Logger.writeLogln("} //getCpdtsCourse");
return searchCourseSession;
}
}