`

GetS项目——日志处理

阅读更多
package com.gobusiness.eus.util;

import java.io.*;
import java.util.Vector;
import java.sql.SQLException;
import com.gobusiness.eus.exception.EusException;

/*   
 *   Global e-Business Services Limited
 *   GETS - End User Solutions
 *   
 *   Program Unit ID: PU-EUS-001
 *   Description: A class to insert File log
 *
 *   Attribute:
 * 		bwWriter 			- BufferedWriter to write to file
 * 
 * 	 Method: 
 * 
 * 		logDebug	- Log debug message when log.mode=Debug with debug message only
 * 		logDebug	- Log debug message when log.mode=Debug with appName and debug message
 * 		logMsg		- Log the message to file
 * 		logErr		- Log the message to file with EusEception Error Code List
 * 		logErr		- Log the message to file with Exception message
 * 		logSQLErr	- Log the message to file with SQL exception message
 *
 *   Revision History:
 *   
 *     Author        Date           Details
 *     ---------     ----------     -------
 *     Lily Ling     2003-02-26     Create
 * 	   Karen Shiu    2004-12-28     Fix open too many files problem
 *
 */

/**
 * @author Lily Ling
 * @version 0.1
 */
public class Logger {

	private static BufferedWriter bwWriter;

	private static boolean isDebug = (SysProp.getProperty("log.mode")
			.equals("Debug")) ? true : false;

	// Added by Karen Shiu on 20041228: Fix too many open file
	private static String WritingToLogFile = "";

	/**
	 * Init BufferedWriter for printing - Get Log File Name from properties -
	 * Get System Date - Append system date to log file - Init BufferedWriter
	 * for printing
	 */
	private static boolean init() {
		synchronized (Logger.class) {

			// Get system date
			String sLogDate = DateUtil.getNowString(Constants.DB2_DTTM_FMT);
			// Get log file name
			String sLogFile = SysProp.getProperty("log.file");
			// get the full path of System Log File
			sLogFile = EusUtil.getFullPath(sLogFile);
			// Append system date to log file
			StringBuffer sbLogFile = new StringBuffer(sLogFile.toString());
			sbLogFile.append("." + sLogDate.substring(0, 10));

			// Modified by Karen Shiu on 20041228: : Fix open too many files
			if (sbLogFile.toString().equals(WritingToLogFile)) {
				return true;
			}
			// End 20041228

			boolean isSuccess = true;
			// Init Buffered Writer for printing
			try {
				File file = new File(sLogFile);
				String sLogPath = file.getParent();
				File filePath = new File(sLogPath);
				isSuccess = filePath.exists();
				if (!isSuccess) {
					// Create a directory; all non-existent ancestor directories
					// are automatically created
					isSuccess = filePath.mkdirs();
					if (!isSuccess) {
						System.out.println("Directory creation failed - "
								+ sLogPath);
					} else {
						System.out.println("Directory creation success - "
								+ sLogPath);
					}
				}
				if (isSuccess) {

					// Modified by Karen Shiu on 20041228 : Fix open too many
					// files
					File fileLog = new File(sbLogFile.toString());
					// boolean bNewFile = (fileLog.isFile()) ? false : true;
					bwWriter = new BufferedWriter(new FileWriter(sbLogFile
							.toString(), true));
					WritingToLogFile = sbLogFile.toString();
					/*
					 * if (bNewFile) { //System.out.println( //
					 * sbLogFile.toString() + " - Create file"); } else {
					 * //System.out.println(sbLogFile.toString() + " - Append
					 * file"); }
					 */
					// End 20041228
				}
			} catch (IOException ioexp) {
				System.out.println("IOException - init " + ioexp.getMessage());
			} catch (Exception e) {
				System.out.println("Exception - init " + e.getMessage());
			} finally {
				return isSuccess;
			}

		}
	}

	/**
	 * Check the debug level in property file.
	 * 
	 * @return true for log.mode=Debug
	 * @return false for log.mode=Normal
	 */

	private static boolean isDebug() {
		return isDebug;
	}

	public static void setDebug(boolean iDebugMode) {
		isDebug = iDebugMode;
	}

	/**
	 * Format first line
	 * 
	 * @param appName
	 *            The application, module or class calling this method
	 */
	private static void format1Line(String appName) {
		try {
			if (appName == null)
				appName = "";
			String logName = appName.substring(appName.lastIndexOf(".") + 1);
			if (logName.equals(""))
				logName = appName;
			String outstr = "<<" + DateUtil.getNowString(Constants.DT_FMT)
					+ ">> (" + logName + ") ";
			bwWriter.newLine();
			bwWriter.write(outstr);
		} catch (IOException ioexp) {
			System.out.println("IOException - format1Line " + appName
					+ ioexp.getMessage());
		} catch (Exception e) {
			System.out.println("Exception - format1Line " + appName
					+ e.getMessage());
		}
	}

	/**
	 * Print debug messages to logfile. Only print when log.mode=Debug
	 * 
	 * @param appName
	 *            The application, module or class calling this method
	 * @param msg
	 *            The debug message to be printed out.
	 */

	public static void logDebug(String appName, String msg) {

		if (isDebug) {
			try {
				if (init()) {
					synchronized (Logger.class) {
						format1Line(appName);
						bwWriter.write("logDebug : ");
						bwWriter.write(msg + "");
						bwWriter.flush();
					}
				}
			} catch (IOException ioexp) {
				System.out.println("IOException - logDebug " + appName
						+ ioexp.getMessage());
			} catch (Exception e) {
				System.out.println("Exception - logDebug " + appName
						+ e.getMessage());
			}
		}
	}

	/**
	 * Print debug messages to logfile. Only print when log.mode=Debug
	 * 
	 * @param msg
	 *            The debug message to be printed out.
	 */

	public static void logDebug(String msg) {

		logDebug("Debug", msg);
	}

	/**
	 * Print messages to logfile.
	 * 
	 * @param appName
	 *            The application, module or class calling this method
	 * @param msg
	 *            The message to be printed out
	 */

	public static void logMsg(String appName, String msg) {

		try {
			if (init()) {
				synchronized (Logger.class) {
					format1Line(appName);
					bwWriter.write("LogMsg : ");
					bwWriter.write(msg + "");
					bwWriter.flush();
				}
			}
		} catch (IOException ioexp) {
			System.out.println("IOException - logMsg " + appName
					+ ioexp.getMessage());
		} catch (Exception e) {
			System.out
					.println("Exception - logMsg " + appName + e.getMessage());
		}
	}

	/**
	 * EusException handling routine for generic errors.
	 * 
	 * @param appName
	 *            The application, module or class calling this method
	 * @param errMsg
	 *            The error message to be printed out
	 * @param e
	 *            The EusException object for this error
	 */

	public static void logErr(String appName, String errMsg, EusException logExp) {

		try {
			if (init()) {
				synchronized (Logger.class) {
					format1Line(appName);
					bwWriter.write("ErrorMsg : ");
					bwWriter.write(errMsg + "");
					bwWriter.newLine();
					if (logExp == null)
						bwWriter.write("logErr - Null from EusException");
					else {
						Vector errList = logExp.getErrList();
						for (int i = 0; i < errList.size(); i++) {
							bwWriter.write("ErrList(" + i + "): ");
							bwWriter.write(EusUtil.getErrMsgEn((String) errList
									.elementAt(i)));
							bwWriter.newLine();

						}
					}
					bwWriter.flush();
				}
			}
		} catch (IOException ioexp) {
			System.out.println("IOException - logErr " + appName
					+ ioexp.getMessage());
		} catch (Exception e) {
			System.out
					.println("Exception - logErr " + appName + e.getMessage());
		}

	}

	/**
	 * Exception handling routine for generic errors.
	 * 
	 * @param appName
	 *            The application, module or class calling this method
	 * @param errMsg
	 *            The error message to be printed out
	 * @param e
	 *            The Exception object for this error
	 */

	public static void logErr(String appName, String errMsg, Exception logExp) {

		try {
			if (init()) {
				synchronized (Logger.class) {
					format1Line(appName);
					bwWriter.write("ErrorMsg : ");
					bwWriter.write(errMsg + "");
					bwWriter.newLine();
					if (logExp == null)
						bwWriter.write("logErr - Null from Exception");
					else {
						StringWriter sw = new StringWriter();
						PrintWriter pw = new PrintWriter(sw);
						logExp.printStackTrace(pw); // put exception information into stream
						bwWriter.write("ExceptionMsg: ");
						bwWriter.write(sw.toString()); // write into log file 
					}
					bwWriter.flush();
				}
			}
		} catch (IOException ioexp) {
			System.out.println("IOException - logErr " + appName
					+ ioexp.getMessage());
		} catch (Exception e) {
			System.out
					.println("Exception - logErr " + appName + e.getMessage());
		}

	}

	/**
	 * Exception handling routine for SQL errors.
	 * 
	 * @param appName
	 *            The application, module or class calling this method
	 * @param errMsg
	 *            The error message to be printed out
	 * @param e
	 *            The SQLException object for this error
	 */

	public static void logSQLErr(String appName, String errMsg,
			SQLException logExp) {

		try {
			if (init()) {
				synchronized (Logger.class) {
					format1Line(appName);
					bwWriter.write("ErrorMsg : ");
					bwWriter.write(errMsg + "");
					bwWriter.newLine();
					if (logExp == null)
						bwWriter.write("logSQLErr - Null from SQLException");
					else {
						bwWriter.write("SQLErrorCode : ");
						bwWriter.write(logExp.getErrorCode() + "");
						bwWriter.newLine();
						bwWriter.write("SQLState : ");
						bwWriter.write(logExp.getSQLState() + "");
						bwWriter.newLine();
						bwWriter.write("SQLErrorMsg : ");
						bwWriter.write(logExp.getMessage() + "");
					}
					bwWriter.flush();
				}
			}
		} catch (IOException ioexp) {
			System.out.println("IOException - logSQLErr " + appName
					+ ioexp.getMessage());
		} catch (Exception e) {
			System.out.println("Exception - logSQLErr " + appName
					+ e.getMessage());
		}
	}
}

 

分享到:
评论

相关推荐

    GETS V2.4.2 正式版

    - **`DynamicSystemAct`** 类负责处理动态系统的请求,并进行域名解析,确保用户访问正确的站点。 #### 获取栏目信息与文章列表 - **`CmsPageAct`** 类用于获取指定栏目的信息,包括URL等。 - **`ArtiPartAct`** 类...

    课程设计——通讯录的制作.doc

    课程设计——通讯录的制作#include #include #include #define LEN sizeof(list) //读取数据 typedef struct teacher { int n; char name[20];//姓名(name ) char city[20];//城市(city) char phone...

    C语言中getchar和gets区别

    ### C语言中getchar和gets的区别 在C语言编程中,`getchar()`与`gets()`是两个常用函数,它们分别用于从标准输入流(通常是键盘)...- 在实际开发中,应根据具体需求选择合适的输入函数,并注意处理潜在的安全隐患。

    华为最新笔试题——编程题及答案.doc

    华为最新笔试题——编程题及答案.doc 该资源是一个关于编程的笔试题集合,涵盖了多种编程题目和答案,旨在帮助学习者提高编程能力和解决问题的能力。下面,我们将对该资源中的知识点进行详细的解释和分析。 一、...

    C++深入了解scanf()getchar()和gets()等函数

    C++深入了解scanf()getchar()和gets()等函数 在C++编程中,scanf()、getchar()和gets()等函数都是标准输入函数,用于从键盘或输入流中读取数据。但是,这些函数的使用却存在一些隐患和陷阱,导致程序的执行结果与...

    浅谈C语言之字符串处理函数

    下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数)。所有的C语言编译系统中一般都提供这些函数。 1、puts函数——输出字符串的函数  一般的形式为puts(字符串组) 作用:将一个字符串...

    c语言gets()的用法

    gets()函数的用法非常广泛,尤其是在处理用户输入时,但需要注意的是,gets()函数在处理输入时不会忽略空白字符(如空格、制表符和换行符),因此可能导致缓冲区溢出。 gets()函数的语法:`char *gets(char *str);`...

    用户与计算机交互 ——输入输出.ppt

    第五章主要讲解的是用户与计算机交互的关键环节——输入与输出。这一章涵盖了多个知识点,包括程序语句的种类、字符数据的输入与输出、字符串的处理以及格式化输出和输入函数。 首先,程序语句是构成程序的基本单元...

    缓冲区溢出——栈溢出

    缓冲区溢出是计算机安全领域中的一个重要概念,主要发生在程序处理数据时,由于对内存分配不当,导致数据超过了预设的存储空间限制,从而覆盖了相邻的数据区域。在本文中,我们将深入探讨栈溢出这一特殊的缓冲区溢出...

    C语言中getchar, gets, 和 scanf 三种不同函数的区别

    然而,由于`gets()`在C11标准中被弃用,因为其存在严重的安全问题——没有对输入字符串的长度进行检查,可能导致缓冲区溢出。这使得`gets()`非常不推荐使用。为了安全地读取字符串,应该使用`fgets()`替代。例如,`...

    TCL脚本学习资料——入门必看

    TCL(Tool Command Language)是一种强大的脚本语言,由John Ousterhout教授在1988年开发,主要用于自动化任务、系统管理、GUI编程以及...通过学习这些内容,你将能够掌握TCL的基本技能,并能在实际项目中灵活运用。

    Linux系统下C语言gets函数出现警告问题的解决方法

    最近在Linux下编译C语言,用到gets这个函数,代码如下: #include #include #include void main(){ char s[100]; // 存放输入的字符串 int i, j, n; printf(输入字符串:); gets(s); n=strlen(s); for(i=0,j=n-1...

    Oracle性能诊断之——Latch free

    ### Oracle性能诊断之——Latch Free:深入理解与分析 在探讨Oracle数据库的性能优化与故障诊断时,"Latch Free"事件往往成为关注的焦点。这一主题不仅涉及Oracle内存管理的核心机制,还触及到多线程环境下的并发...

    cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    本文将详细介绍几个常见的输入函数:cin、cin.get()、cin.getline()、getline()以及gets(),并探讨它们的用法。 1. `cin` `cin`是C++标准库中的一个对象,用于从标准输入流(通常是键盘)读取数据。它使用操作符`&gt;...

    SunnieShine#HelloC#gets 与 gets_s1

    gets 函数与 gets 函数都用于从标准输入流中读取行字符串保存,*str 是一个指向字符数组的指针,为输入字符串的存储位置。与 gets 函数不同, ge

    Oracle性能分析——使用set_autotrace_on和set_timing_on来分析select语句的性能.doc

    Oracle 性能分析——使用 set_autotrace_on 和 set_timing_on 来分析 select 语句的性能 Oracle 数据库性能分析是数据库优化的重要步骤之一,通过对 SQL 语句的执行计划和运行时间的分析,可以了解数据库的性能瓶颈...

    C语言从入门到精通视频教程下载第6章 用户与计算机的交互——输入和输出.zip

    除了`printf()`和`scanf()`,C语言还提供了其他输入输出函数,比如`gets()`和`puts()`处理字符串,`getchar()`和`putchar()`处理单个字符。这些函数在特定场景下能提供更灵活的控制。 在实际编程中,还需要注意一些...

    x86 simple rop gets

    x86 simple rop gets

    test_getsn

    鉴权

    数据结构——串学生讲解反转课堂PPT学习教案.pptx

    数据结构——串学生讲解反转课堂PPT学习教案.pptx 数据结构中的串是一种特殊的线性表,数据元素限制为字符集。串是由零个或多个字符组成的有限序列,通常记作:S=‘a1a2a3…an’,其中S为串的名字,ai(1≤i≤n)...

Global site tag (gtag.js) - Google Analytics