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!");
}
}
分享到:
相关推荐
例如,`awk '{print $1, $3}'`可以输出日志文件中第一列和第三列的内容。 2. **grep命令**:grep用于搜索含有特定模式的日志行。它可以过滤出包含特定关键词或正则表达式的记录,帮助我们快速定位问题。例如,`grep...
通过编写脚本,每次`ping`操作开始时,会根据当前日期创建新的日志文件,确保每个日志文件的大小相对适中,易于管理和阅读。同时,脚本还会记录`ping`任务的开始时间和结束时间,这对于监控网络的实时状态以及追踪...
本篇文章将详细介绍如何利用shell脚本来根据当前日期输出日志。 首先,让我们了解shell脚本的基本元素。一个简单的shell脚本通常包含变量定义、命令执行和控制结构。在描述的示例中,我们看到一个简单的脚本片段: ...
- `xx_$dd.gz`:指定输出文件名,其中`$dd`是前面定义的变量,表示具体的日期; - `xx_$dd.log`:指定要打包的源文件,与输出文件名相对应。 ##### 4. 删除原文件:`rm -f xx_$dd.log` - **作用**:删除已打包的...
在IT领域,系统日志是记录操作系统和其他软件组件运行情况的重要工具。它们包含了关于系统活动、错误、警告以及各种信息事件的详细记录,对于故障排查、安全审计和性能优化至关重要。"导出一周的系统日志"这个任务...
该命令表示每天凌晨0点执行脚本,并将标准输出和错误输出重定向到指定的日志文件中。 #### 脚本优化建议 1. **增强日志处理能力**:可以考虑增加错误处理机制,如在执行过程中遇到异常时记录详细的错误信息。 2. *...
这个脚本首先将当前的`nohup.out`日志文件复制到指定的目标日志目录,并添加日期作为文件名后缀,格式为`YYYYMMDD`。然后,使用`cat /dev/null >`清空原始日志文件,以便开始记录新的日志条目。 接下来,为了定期...
- **开始时间和结束时间**:根据实际需求指定具体的开始和结束时间,以便于精确地获取所需时间段的性能数据。 ##### 2.4 导出ASH报告 ASH报告同样可以通过预定义的脚本生成,用于分析活跃会话的历史数据。 ``` ...
LogParser 提供了丰富的内置函数和扩展功能,比如日期和时间的处理、字符串操作、数值计算等,这使得用户能够实现复杂的日志分析逻辑。同时,还可以通过插件系统进一步扩展其功能。 ### **5. 命令行界面与脚本化** ...
- **文件输出**:使用`TimedRotatingFileHandler`处理器按日期滚动输出日志到文件。 - **电子邮件通知**:用于发送错误级别的日志到管理员邮箱(此处未启用)。 ```python 'handlers': { 'console': { 'level': '...
SQL Server提供了多种日期和时间数据类型,包括`date`、`datetime`、`datetime2`、`smalldatetime`等,用于存储和操作日期和时间数据。但在某些场景下,如报表生成、日志记录或与不支持这些数据类型的外部系统交互时...
这里,"-d"参数指定了新的日志文件存储目录,而"Catalina.out"是Tomcat的标准输出日志文件。 除了基本的切割功能,cronolog还支持多个输入文件和复杂的重定向规则,可以根据不同需求定制日志管理策略。不过,需要...
它在服务器管理和监控中扮演着重要角色,特别是在处理大量日志数据时,能够帮助管理员有效地组织和存储信息。"cronolog-1.6.2.tar.gz" 是cronolog的源代码压缩包,版本为1.6.2,常见的格式是tar.gz,这种格式是Linux...
通过这个脚本,我们可以轻松地自动化清理过期的日期目录,这对于日志管理和定期备份操作非常有用。需要注意的是,由于`rm -rf`命令具有删除文件的强大力量,所以在实际使用中务必小心,避免误删重要数据。此外,根据...
在IT领域,特别是对于系统管理员或安全专家而言,掌握如何记录和分析Windows登录信息是一项至关重要的技能。这不仅有助于监控网络活动,确保系统的安全性,还能在发生安全事件时提供宝贵的审计线索。以下是从给定...
submit过程创建新的作业,指定作业编号、执行操作、下次运行日期和间隔。remove过程用于删除作业,change过程可修改作业属性,如执行操作、下次运行日期等。what、next_date、instance等子程序分别用于更改作业的...
- `-f 字段`: 指定输出哪些字段。 - **file**: 显示文件类型信息。 - **wc**: 统计文件中的行数、单词数和字符数。 - `-l`: 行数 - `-w`: 单词数 - `-c`: 字符数 - **type**: 显示命令的类型(内部命令或外部...