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!");
}
}
分享到:
相关推荐
通过编写脚本,每次`ping`操作开始时,会根据当前日期创建新的日志文件,确保每个日志文件的大小相对适中,易于管理和阅读。同时,脚本还会记录`ping`任务的开始时间和结束时间,这对于监控网络的实时状态以及追踪...
例如,`awk '{print $1, $3}'`可以输出日志文件中第一列和第三列的内容。 2. **grep命令**:grep用于搜索含有特定模式的日志行。它可以过滤出包含特定关键词或正则表达式的记录,帮助我们快速定位问题。例如,`grep...
本篇文章将详细介绍如何利用shell脚本来根据当前日期输出日志。 首先,让我们了解shell脚本的基本元素。一个简单的shell脚本通常包含变量定义、命令执行和控制结构。在描述的示例中,我们看到一个简单的脚本片段: ...
1. **彩色控制台输出**:能够在控制台中以不同的颜色输出日志,帮助开发者区分不同级别或类型的日志信息。 2. **文件记录功能**:除了在控制台显示日志外,还需要将日志信息保存到文件中,以便后续分析和记录。 3. *...
- `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`等,用于存储和操作日期和时间数据。但在某些场景下,如报表生成、日志记录或与不支持这些数据类型的外部系统交互时...
在编写转换函数时,需要清楚地指定输入日期的格式和预期输出的日期格式。 2. 语言和文化因素:某些文化或地区可能使用不同的日期表示方式,如某些地区可能会把日放在月之前。在设计国际化的应用程序时,这一点尤其...
例如,命令“date +'%Y-%m-%d%H:%M:%S'”能够以年-月-日 时:分:秒的格式显示当前的日期和时间,这种格式化输出对于记录日志或是生成时间戳非常有用。 在处理涉及不同时区的事务时,date命令还允许用户查看特定时区...
cronolog的基本工作原理是在日志写入时,按照配置文件或命令行指定的规则,对输出日志进行分割,形成一系列以时间或日期为后缀的新日志文件。这样做的好处是,一方面可以避免因日志文件过大而导致的读写性能下降;另...
这里,"-d"参数指定了新的日志文件存储目录,而"Catalina.out"是Tomcat的标准输出日志文件。 除了基本的切割功能,cronolog还支持多个输入文件和复杂的重定向规则,可以根据不同需求定制日志管理策略。不过,需要...
通过这个脚本,我们可以轻松地自动化清理过期的日期目录,这对于日志管理和定期备份操作非常有用。需要注意的是,由于`rm -rf`命令具有删除文件的强大力量,所以在实际使用中务必小心,避免误删重要数据。此外,根据...