大家可能每天都在用apache 的log4j在打log,可大家有没想过它的内部是怎么实现的呢,我在这里实现的一个简单的log,希望对大家了解打log的过程有所了解。
由于实现的比较简单,没有加入对log level的支持。
public class AuditLogManager {
private static LogFileThread logFile = null;
private static boolean bWrite = true;
public static void writeInfo(String sInfo) {
if (!bWrite)
return;
if (logFile == null) {
logFile = new LogFileThread();
logFile.start();
}
logFile.writeInfo(sInfo);
}
}
class LogFileThread extends Thread {
private static FileOutputStream outLogFile = null;
private static boolean bInit = false;
private static boolean bErr = false;
private static Vector vInfo = new Vector();
public LogFileThread() {
}
private void init(String fileName) {
try {
if (bInit)
return;
String logFile = "c:/worksapce/log";
File f = new File(logFile);
f.mkdirs();
logFile += "/AuditLog_" + fileName + ".log";
outLogFile = new FileOutputStream(logFile, true);
} catch (Exception e) {
bErr = true;
e.printStackTrace();
}
bInit = true;
}
public void writeInfo(String info) {
if (info == null)
return;
procInfo(info, true);
}
private String getInfo() {
return procInfo(null, false);
}
private synchronized static String procInfo(
String info,
boolean bPutInfo) {
if (bErr) {
vInfo.clear();
return null;
}
String sInfo = null;
try {
if (bPutInfo) {
if (info != null)
vInfo.add(info);
} else {
if (vInfo.size() > 0) {
sInfo = (String) vInfo.get(0);
vInfo.remove(0);
}
}
} catch (Exception e) {
bErr = true;
e.printStackTrace();
}
return sInfo;
}
private void writeFile(String info) {
try {
if (info == null)
return;
outLogFile.write(info.getBytes());
} catch (Exception e) {
bErr = true;
e.printStackTrace();
}
}
private void close() {
try {
bInit = false;
bErr = false;
if (outLogFile != null)
outLogFile.close();
outLogFile = null;
} catch (Exception e) {
e.printStackTrace();
}
bInit = false;
}
public void run() {
try {
String oldDate = null;
while (true) {
String curDate = DateTime.getCurrentDate(0);
if (oldDate == null || !oldDate.equalsIgnoreCase(curDate)) {
oldDate = curDate;
close();
init(oldDate);
}
String curTime = DateTime.getCurrentTimestamp(0);
String ss = formatInfo(curTime);
writeFile(ss);
if (ss == null)
sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private String formatInfo(String time) {
String sInfo = procInfo(null, false);
if (sInfo == null)
return null;
String sh = "*******" + time + "*******\r\n\r\n";
sh += sInfo;
sh += "\r\n\r\n******* End *******\r\n\r\n";
return sh;
}
protected void finalize() {
try {
System.out.println("Close Log Manager");
this.interrupt();
outLogFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
【Java实现在线通讯录】是一种基于Java编程语言开发的应用程序,它允许用户通过网络进行联系人管理和通信。...通过解压并运行这个项目,开发者不仅可以了解具体实现细节,还能动手实践,提升自己的Java编程能力。
通过理解SQLite的内部工作原理和设计模式,我们可以尝试自己动手实现一个类似的数据库引擎。 首先,我们需要理解数据库的基本概念,包括数据模型(如关系型模型)、表、字段、记录、索引等。在关系型数据库中,数据...
**jQuery mbMenu 1.5 插件源码解析** jQuery mbMenu 是一款高效、灵活的菜单构建插件,主要用于创建响应式、多级的...记住,实践是检验真理的唯一标准,动手尝试并不断调整,你会发现 mbMenu 是一个非常实用的工具。
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
JavaScript,简称JS,是一种广泛应用于Web开发的轻量级编程语言。它主要负责网页的动态交互,赋予网页活力,使得用户在浏览时可以有丰富的视觉和功能体验。本压缩包中的"超酷jS代码(绝版)"可能包含了一些独特的、...
Vue.js 是一款轻量级的前端JavaScript框架,以其易学易用、组件化开发和高性能的特点深受开发者喜爱。本实践例子旨在为Vue初学者提供一个简单的学习起点,帮助理解Vue的基本概念和常用功能。 首先,Vue的核心是声明...
jsPlumb是一个轻量级的JavaScript库,它专注于连接元素,提供了一系列用于构建流程图和网络图表的功能。jsPlumb与jQuery的结合使用,使得在网页上绘制和管理流程图变得非常直观和便捷。 **二、安装和引入jsPlumb** ...
EasyJWeb是一个轻量级的Java Web开发框架,旨在简化Web应用的开发过程,提高开发效率。 【描述解析】 "java_简易web框架EasyJWeb源码.zip.zip" 描述进一步确认了这是一个关于Java编程语言的Web框架,其核心内容是...
### ES6从零开始基础+实战项目 #### 一、ES6简介与新特性 ECMAScript 2015(通常称为ES6)是JavaScript的一种标准版本,它引入了许多新特性和改进...接下来,你可以尝试自己动手实现一些小项目,进一步巩固所学知识。
《Spring框架实战解析——以Spring-Demo-1.zip为例》 Spring框架,作为Java领域最为广泛应用的轻量级框架之一,以其强大的IoC...记住,实践是检验真理的唯一标准,动手尝试并理解每一个环节,是掌握Spring框架的关键。
电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...
Vue.js 是一款流行的轻量级前端JavaScript框架,它以其易学易用、组件化开发、高性能和灵活性著称。在“一个例子学会Vue.js”的学习过程中,我们将深入了解Vue.js的核心概念,包括数据绑定、指令、组件、计算属性、...
3. **MyBatis**:MyBatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或注解中,增强了SQL的灵活性。 4. **Apache Commons**:Apache Commons是Apache软件基金会提供的一系列实用工具类库...
Nginx是一款高性能的HTTP和反向代理服务器,也是一款邮件传输代理服务器,因其轻量级、高并发处理能力而广受欢迎。本教程将带你深入理解Nginx的基础概念和实际应用,帮助你从入门到实践,提升在Web服务器领域的技能...
SpringMVC是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。本项目“springmvc登陆示例项目”是针对初学者和开发者的一个实践教程,旨在帮助他们理解并掌握...
JavaScript是一种广泛应用于网页和网络应用的轻量级编程语言,主要负责实现客户端的交互效果和动态功能。在网页开发中,JavaScript与HTML和CSS并称为前端开发的“三剑客”,是实现网页动态性的关键。这份"JavaScript...