大家可能每天都在用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();
}
}
}
分享到:
相关推荐
Log已经实现 Log已经实现 Log已经实现 Log已经实现 Log已经实现
Docker默认使用了json-file driver作为log driver,因此日志是存储在一个json.log的本地文件中的。而gelf则是本文需要使用的log driver。 当容器多了,或者是采用类似swarm集群部署Docker的时候,各种日志分散存在...
自己写的一个轻量级的LogHelper|不需要log4net.dll|不需要设置config。 详情请看我的CSDN博客:https://blog.csdn.net/djk8888/article/details/105450482
自定义解析器,当输入类型无法满足需求时或无法解析时,可实现Parser接口重写方法来添加自定义解析器 支持添加拦截器,添加拦截器后它会在最终打印输出前进行拦截处理,可以对日志信息进行重构处理 支持添加全局回...
轻量灵活方便的log工具
log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码,
log4d Delphi中好用的轻量级日志类
logline:轻量、实用和客户端级的前端日志记录工具
这个是我自己写的Android-Log封装,开发时总是在源码加入大量的日志输出,软件发布又要一句一句删,麻烦,通常的做法就是自己再封装多一层 这个Log能够比Android自带的更加方便使用,并且能够自动帮你加入文字输出所在的...
log4z 是一款开源的C++轻量级日志库. 他提供了在C++程序中使用日志和跟踪调试的功能. log4z的优点 1. MIT开源授权 无限制使用. 2. 轻量级, 跨平台 可在linux与windows上共同使用. 3. 完整的日志优先级控制. 4....
一种超轻量的log日志生成类
log, Rust的日志实现 日志一个 Rust 库,提供一个轻量级的日志记录外观 。 log 文档插件日志facade提供了一个单一的日志 API,抽象了实际的日志实现。 库可以使用这个板条箱提供的日志 API,并且这些库的使用者可以...
使用log4j2实现日志数据脱敏
go-log - 一个log4j的Go实现
从 google webrtc项目挖出来的轻量级log类,灵巧好用 !!
这个是自己写的一个log工具类,具备了常用的log功能,包括隔天区分,大小区分等功能,适合新手学习
1.c语言实现写日志文件(log)功能 2.可变参数
.Net轻量级简单日志组件 日志组件位于System.Database.dll中,项目引用命名空间(System.Logger)即可,日志组件提供五种级别的日志记录(DEBUG|INFO|WARN|ERROR|FATAL),最低DEBUG,最高FATAL,当配置的级别大于等于...
log4net,可以根据配置的时间长度,实现了自动删除过期的日志文件,欢迎大家使用或者分享更科学的方法。
C# 入门一一事件(event)的应用:如何在TextBox控件中实时显示Log