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());
}
}
}
分享到:
相关推荐
- **`DynamicSystemAct`** 类负责处理动态系统的请求,并进行域名解析,确保用户访问正确的站点。 #### 获取栏目信息与文章列表 - **`CmsPageAct`** 类用于获取指定栏目的信息,包括URL等。 - **`ArtiPartAct`** 类...
课程设计——通讯录的制作#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()`是两个常用函数,它们分别用于从标准输入流(通常是键盘)...- 在实际开发中,应根据具体需求选择合适的输入函数,并注意处理潜在的安全隐患。
华为最新笔试题——编程题及答案.doc 该资源是一个关于编程的笔试题集合,涵盖了多种编程题目和答案,旨在帮助学习者提高编程能力和解决问题的能力。下面,我们将对该资源中的知识点进行详细的解释和分析。 一、...
C++深入了解scanf()getchar()和gets()等函数 在C++编程中,scanf()、getchar()和gets()等函数都是标准输入函数,用于从键盘或输入流中读取数据。但是,这些函数的使用却存在一些隐患和陷阱,导致程序的执行结果与...
下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数)。所有的C语言编译系统中一般都提供这些函数。 1、puts函数——输出字符串的函数 一般的形式为puts(字符串组) 作用:将一个字符串...
gets()函数的用法非常广泛,尤其是在处理用户输入时,但需要注意的是,gets()函数在处理输入时不会忽略空白字符(如空格、制表符和换行符),因此可能导致缓冲区溢出。 gets()函数的语法:`char *gets(char *str);`...
第五章主要讲解的是用户与计算机交互的关键环节——输入与输出。这一章涵盖了多个知识点,包括程序语句的种类、字符数据的输入与输出、字符串的处理以及格式化输出和输入函数。 首先,程序语句是构成程序的基本单元...
缓冲区溢出是计算机安全领域中的一个重要概念,主要发生在程序处理数据时,由于对内存分配不当,导致数据超过了预设的存储空间限制,从而覆盖了相邻的数据区域。在本文中,我们将深入探讨栈溢出这一特殊的缓冲区溢出...
然而,由于`gets()`在C11标准中被弃用,因为其存在严重的安全问题——没有对输入字符串的长度进行检查,可能导致缓冲区溢出。这使得`gets()`非常不推荐使用。为了安全地读取字符串,应该使用`fgets()`替代。例如,`...
TCL(Tool Command Language)是一种强大的脚本语言,由John Ousterhout教授在1988年开发,主要用于自动化任务、系统管理、GUI编程以及...通过学习这些内容,你将能够掌握TCL的基本技能,并能在实际项目中灵活运用。
最近在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内存管理的核心机制,还触及到多线程环境下的并发...
本文将详细介绍几个常见的输入函数:cin、cin.get()、cin.getline()、getline()以及gets(),并探讨它们的用法。 1. `cin` `cin`是C++标准库中的一个对象,用于从标准输入流(通常是键盘)读取数据。它使用操作符`>...
gets 函数与 gets 函数都用于从标准输入流中读取行字符串保存,*str 是一个指向字符数组的指针,为输入字符串的存储位置。与 gets 函数不同, ge
Oracle 性能分析——使用 set_autotrace_on 和 set_timing_on 来分析 select 语句的性能 Oracle 数据库性能分析是数据库优化的重要步骤之一,通过对 SQL 语句的执行计划和运行时间的分析,可以了解数据库的性能瓶颈...
除了`printf()`和`scanf()`,C语言还提供了其他输入输出函数,比如`gets()`和`puts()`处理字符串,`getchar()`和`putchar()`处理单个字符。这些函数在特定场景下能提供更灵活的控制。 在实际编程中,还需要注意一些...
x86 simple rop gets
鉴权
数据结构——串学生讲解反转课堂PPT学习教案.pptx 数据结构中的串是一种特殊的线性表,数据元素限制为字符集。串是由零个或多个字符组成的有限序列,通常记作:S=‘a1a2a3…an’,其中S为串的名字,ai(1≤i≤n)...