自己做的一个简易日志系统,欢迎提出意见

牛海朋 2011-11-06 05:53:49

public class MyLog {

private final String defaultPath = "log";//默认日志存放目录
private final long length = 3 * 1024 * 1024;//单个日志文件大小
private static MyLog instance = null;
private String path;//日志存放目录
private Class clazz;
private boolean flag;//启动日志开关
private File file;

private MyLog() {
createFile();
setFlag(true);
}

public static MyLog getInstance(Class clazz) {
if (instance == null) {
instance = new MyLog();
}
instance.setClazz(clazz);
return instance;
}

public void writeLog(Object obj) {
if (flag) {
try {
FileWriter fw = new FileWriter(file, true);
PrintWriter pw = new PrintWriter(fw);
pw.println(currentTime() + "\t\tclass(" + getClazz().getName() + ")");
pw.println(obj);
pw.println();
pw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

public void writeLog(String methodName, Object obj) {
if (flag) {
try {
FileWriter fw = new FileWriter(file, true);
PrintWriter pw = new PrintWriter(fw);
pw.println(currentTime() + "\t\tclass(" + getClazz().getName() + ")\t\tmethod(" + methodName + ")");
pw.println(obj);
pw.println();
pw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

private void createFile() {
File directory = new File(getPath());
if (!directory.exists()) {
directory.mkdirs();
}
int i = 1;
long len = 0;
File tempFile = null;
while (true) {
tempFile = new File(getPath() + "\\log_" + today() + "_" + i + ".txt");
if (tempFile.exists()) {
i++;
} else if (i > 1) {
File f = new File(getPath() + "\\log_" + today() + "_" + (i - 1) + ".txt");
if (f.length() < length) {
setFile(f);
return;
}
setFile(tempFile);
return;
} else {
setFile(tempFile);
return;
}
}
}

private String today() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(date);
}

private String currentTime() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}

private String getPath() {
if (path == null || path.trim().equals("")) {
return defaultPath;
}
return path;
}

public void setPath(String path) {
this.path = path;
}

private Class getClazz() {
return clazz;
}

private void setClazz(Class clazz) {
this.clazz = clazz;
}

private File getFile() {
return file;
}

private void setFile(File file) {
this.file = file;
}

private boolean isFlag() {
return flag;
}

public void setFlag(boolean flag) {
this.flag = flag;
}
}

...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearKin 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shine333 的回复:]
首先鼓励一下。如果只是自己弄着玩,差不多可以了。但是如果作为项目实战,建议还是使用成熟的库,比如log4j,slf4j之类。

日志,不是简单的输出,包括以下几个要素:
1 日志的分类,你虽然有Class参数,但不完整。因为同一个class做不同的事情,或者某个需要特别强调的内容,可能手工分成不同的日志,最终进入不同的日志文件或者其他存储(比如数据库),建议以String为最顶层的分类,cl……
[/Quote]

要不要支持slf4j神马的..
wode_java 2011-11-06
  • 打赏
  • 举报
回复
我也写过一个,因为特殊需求所以没有采用log4j等框架
首先要保证效率问题吧,因为日志这种东西,时不时就要写的,所以最好吧写的流一直开着
写满了再关了换一个
还有就是日志的级别问题也要添加进去,这样比较多变和多样化
shine333 2011-11-06
  • 打赏
  • 举报
回复
代码的位置不知道什么原因错乱了。

5多线程....是在代码后面的
牛海朋 2011-11-06
  • 打赏
  • 举报
回复
谢谢你的指点,我是自己做小东西玩,想着不用什么框架,就自己整了个简单的日志,谢谢,呵呵[Quote=引用 1 楼 shine333 的回复:]
首先鼓励一下。如果只是自己弄着玩,差不多可以了。但是如果作为项目实战,建议还是使用成熟的库,比如log4j,slf4j之类。

日志,不是简单的输出,包括以下几个要素:
1 日志的分类,你虽然有Class参数,但不完整。因为同一个class做不同的事情,或者某个需要特别强调的内容,可能手工分成不同的日志,最终进入不同的日志文件或者其他存储(比如数据库),建议以String为最顶层的分类,cl……
[/Quote]
shine333 2011-11-06
  • 打赏
  • 举报
回复
首先鼓励一下。如果只是自己弄着玩,差不多可以了。但是如果作为项目实战,建议还是使用成熟的库,比如log4j,slf4j之类。

日志,不是简单的输出,包括以下几个要素:
1 日志的分类,你虽然有Class参数,但不完整。因为同一个class做不同的事情,或者某个需要特别强调的内容,可能手工分成不同的日志,最终进入不同的日志文件或者其他存储(比如数据库),建议以String为最顶层的分类,class只是一个overload.
2 日志的级别,同一个日志下面,可能级别不一样,最终因为配置的不同,导致部分输出或者不输出,同时,查看的时候,过滤起来也方便。虽然你有了flag,但是类似简陋。
3 日志格式,这个可以自定义,特别是,如果可能输出到数据库或者以html方式展现的话。
4 性能,你writeLog方法,每次都开FileWriter,性能有严重问题,另外,

 pw.println(currentTime()   +   "\t\tclass( "   +   getClazz().getName()   +   ")\t\tmethod( "   +   methodName   +   ") ");


性能太差

5 多线程高并发下,你的类的设计,存在严重问题。
pw.print(currentTime());
pw.print("\t\tclass( ");
pw.print(getClazz().getName());
// ... 以此类推,并且,这个Writer最好能让用户选择是否用Buffer

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧