`
microjava
  • 浏览: 318594 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

指定目录输出日志(根据日期和操作员信息)

阅读更多
package com.microjava.log;

public interface ILog {
	public void write(Object o);
}


package com.microjava.log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;


public class LogService implements ILog {
	
	private String filename;
	private FileOutputStream fileoutputstream;
	private String encoding;
	private static Map instances = null;
	private LogService() {
		
	}
	private LogService(String today, String branchid) {
		//filename = CommonProperties.getAppPath()+"/logs/"+today+"/"+branchid+"/message.log";
		filename = "d:/logs/"+today+"/"+branchid+"/message.log";
		encoding = "gbk"; //"GB2312";
	}
	
	public synchronized static ILog getInstance() {
		String branchid = null;
		String bankid = "01";//(String)Sessions.getCurrent().getAttribute("bankid");
		String branchid_ = "002";//(String)Sessions.getCurrent().getAttribute("branchid");
		if(bankid!=null) {
			branchid = bankid;
		}
		if(branchid_!=null) {
			if(branchid==null) {
				branchid = branchid_;
			} else {
				branchid += branchid_;
			}
		}
		if(branchid==null || branchid.equals("")) {
			branchid = "undefined";
		}
		String today = new SimpleDateFormat("yyyyMMdd").format(new Date());
		if(instances==null) {
			instances = new HashMap();
			instances.put(today+branchid, new LogService(today, branchid));
		} else if(!instances.containsKey(today+branchid)) {
			instances.put(today+branchid, new LogService(today, branchid));
		}
		return (ILog)instances.get(today+branchid);
	}
	
	private synchronized void rollingFile() throws IOException {
		File file = new File(filename);
		if(!file.exists()) {
			new File(file.getParent()).mkdirs();
			file.createNewFile();
			fileoutputstream = null;
		} else if(file.length()>=5000000L) {//可以参数化
			File file_;
			do {
				String ext = String.valueOf(System.currentTimeMillis());
				file_ = new File(filename+"."+ext);
			} while(file_.exists());
			file.renameTo(file_);
			fileoutputstream = null;
			file_ = null;
		}
		fileoutputstream = new FileOutputStream(file, true);
	}
	public void write(Object o) {
		// TODO Auto-generated method stub
		try {
			rollingFile();
			fileoutputstream.write(("["+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS").format(new Date())+"]"+o.toString()+"\n").getBytes(encoding));
			fileoutputstream.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


package com.microjava.log;

import junit.framework.TestCase;

public class ILogTest extends TestCase {
	
	private ILog log;
	
	protected void setUp() {
		log = LogService.getInstance();
	}
	
	public void testWrite() {
		log.write("Hello,microjava!");
	}
}
分享到:
评论

相关推荐

    shell格式化日志输出

    例如,`awk '{print $1, $3}'`可以输出日志文件中第一列和第三列的内容。 2. **grep命令**:grep用于搜索含有特定模式的日志行。它可以过滤出包含特定关键词或正则表达式的记录,帮助我们快速定位问题。例如,`grep...

    windowsx下长ping检测网络,可以自动按照日期创建日志,日志会记录进任务和出任务时间,使网络检测更加直观

    通过编写脚本,每次`ping`操作开始时,会根据当前日期创建新的日志文件,确保每个日志文件的大小相对适中,易于管理和阅读。同时,脚本还会记录`ping`任务的开始时间和结束时间,这对于监控网络的实时状态以及追踪...

    shell脚本按当前日期输出日志的实现

    本篇文章将详细介绍如何利用shell脚本来根据当前日期输出日志。 首先,让我们了解shell脚本的基本元素。一个简单的shell脚本通常包含变量定义、命令执行和控制结构。在描述的示例中,我们看到一个简单的脚本片段: ...

    日志打包脚本

    - `xx_$dd.gz`:指定输出文件名,其中`$dd`是前面定义的变量,表示具体的日期; - `xx_$dd.log`:指定要打包的源文件,与输出文件名相对应。 ##### 4. 删除原文件:`rm -f xx_$dd.log` - **作用**:删除已打包的...

    导出一周的系统日志

    在IT领域,系统日志是记录操作系统和其他软件组件运行情况的重要工具。它们包含了关于系统活动、错误、警告以及各种信息事件的详细记录,对于故障排查、安全审计和性能优化至关重要。"导出一周的系统日志"这个任务...

    oracle日志alter.log每天切割脚本

    该命令表示每天凌晨0点执行脚本,并将标准输出和错误输出重定向到指定的日志文件中。 #### 脚本优化建议 1. **增强日志处理能力**:可以考虑增加错误处理机制,如在执行过程中遇到异常时记录详细的错误信息。 2. *...

    welogic的nohup日志按天切割并定时删除.docx

    这个脚本首先将当前的`nohup.out`日志文件复制到指定的目标日志目录,并添加日期作为文件名后缀,格式为`YYYYMMDD`。然后,使用`cat /dev/null >`清空原始日志文件,以便开始记录新的日志条目。 接下来,为了定期...

    Oracle 导出某时间段AWR与ASH性能报告操作日志

    - **开始时间和结束时间**:根据实际需求指定具体的开始和结束时间,以便于精确地获取所需时间段的性能数据。 ##### 2.4 导出ASH报告 ASH报告同样可以通过预定义的脚本生成,用于分析活跃会话的历史数据。 ``` ...

    LogParser 日志查看工具

    LogParser 提供了丰富的内置函数和扩展功能,比如日期和时间的处理、字符串操作、数值计算等,这使得用户能够实现复杂的日志分析逻辑。同时,还可以通过插件系统进一步扩展其功能。 ### **5. 命令行界面与脚本化** ...

    Django 日志配置按日期滚动的方法

    - **文件输出**:使用`TimedRotatingFileHandler`处理器按日期滚动输出日志到文件。 - **电子邮件通知**:用于发送错误级别的日志到管理员邮箱(此处未启用)。 ```python 'handlers': { 'console': { 'level': '...

    sqlServer 日期类型转字符串

    SQL Server提供了多种日期和时间数据类型,包括`date`、`datetime`、`datetime2`、`smalldatetime`等,用于存储和操作日期和时间数据。但在某些场景下,如报表生成、日志记录或与不支持这些数据类型的外部系统交互时...

    cronolog-1.6.1-win32.zip

    这里,"-d"参数指定了新的日志文件存储目录,而"Catalina.out"是Tomcat的标准输出日志文件。 除了基本的切割功能,cronolog还支持多个输入文件和复杂的重定向规则,可以根据不同需求定制日志管理策略。不过,需要...

    cronolog-1.6.2.tar.gz

    它在服务器管理和监控中扮演着重要角色,特别是在处理大量日志数据时,能够帮助管理员有效地组织和存储信息。"cronolog-1.6.2.tar.gz" 是cronolog的源代码压缩包,版本为1.6.2,常见的格式是tar.gz,这种格式是Linux...

    实现自动清除日期目录shell脚本实例代码

    通过这个脚本,我们可以轻松地自动化清理过期的日期目录,这对于日志管理和定期备份操作非常有用。需要注意的是,由于`rm -rf`命令具有删除文件的强大力量,所以在实际使用中务必小心,避免误删重要数据。此外,根据...

    Windows 登录 记录登录客户端信息的方法

    在IT领域,特别是对于系统管理员或安全专家而言,掌握如何记录和分析Windows登录信息是一项至关重要的技能。这不仅有助于监控网络活动,确保系统的安全性,还能在发生安全事件时提供宝贵的审计线索。以下是从给定...

    Oracle系统包详细使用方法

    submit过程创建新的作业,指定作业编号、执行操作、下次运行日期和间隔。remove过程用于删除作业,change过程可修改作业属性,如执行操作、下次运行日期等。what、next_date、instance等子程序分别用于更改作业的...

    linux学习笔记-01linux操作基础

    - `-f 字段`: 指定输出哪些字段。 - **file**: 显示文件类型信息。 - **wc**: 统计文件中的行数、单词数和字符数。 - `-l`: 行数 - `-w`: 单词数 - `-c`: 字符数 - **type**: 显示命令的类型(内部命令或外部...

Global site tag (gtag.js) - Google Analytics