`
kevin_wanwei
  • 浏览: 117675 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

日志记录器

阅读更多
package log_util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
/**
 * 我的日志记录器
 * 日志是以xml格式输出日志信息
 * 这样可以方便使用程序来解析日志文件
 * @author Kevin.wangwei
 * 2010-3-12
 */
public final class Log {
	/**是的日志文件保存的父目录,默认是在D盘下log目录下*/
	private String filePath="d:\\log";
	/**日志文件名称*/
	private String logName="Log.log";
	/**是否打印到控制台*/
	private boolean console=true;
	/**日志对象实例*/
	private static Log instance=null;
	/**日志文件的完整路径*/
	private String realPath="";
	/**输出流*/
	private PrintWriter out;
	/**当前系统日期字符串*/
	private String dateStr;
	/**程序运行正常日志信息xml元素名称*/
	private final static String INFO="INFO";
	/**程序运行异常日志信息xml元素名称*/
	private final static String EXCEPTION="exception";
	
	/**阻止通过构造函数创建该对象*/
	private Log(){
		init();
	}
	/**获得当前对象实例静态方法*/
	public static Log getInstance(){
		if(instance==null){
			synchronized(Log.class){
			if(instance==null){//如果没有这个判断,当两个线程同时访问这个方法会出现创建两个对象
			instance=new Log();
		    }
		}
	}
		return instance;
	}
	/**初始化*/
	private void init(){
		Properties prop=new Properties();
		try {
			InputStream input=Log.class.getClassLoader().getResourceAsStream("log.properties");
			prop.load(input);
			String path=prop.getProperty("logFilePath");
			if(path!=null&&!(path.trim().equals(""))){
				filePath=path;
			}
			String name=prop.getProperty("logName");
			if(name!=null&&!(name.trim().equals(""))){
				logName=name;
			}
			String bStr=prop.getProperty("console");
			if(bStr.equalsIgnoreCase("true")){
				console=true;
			}else{
				console=false;
			}
			File f=new File(filePath);
			if(!f.exists()){
				f.mkdir();
			}
			realPath=filePath+"\\"+logName+".log";
			SimpleDateFormat simpleDate=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			dateStr=simpleDate.format(new Date());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	/**打印提示信息*/
	public void recordLog(String message){
		if(message==null){
			message="null";
		}
		if(console){
				printMessageToConsole(INFO,dateStr,message);
		}
		writeLog(INFO,dateStr,message);
	}
	/**
	 * 将异常堆栈写到日志文件中
	 * @param e
	 */
	public void recordExceptionMsgLog(Exception e){
		if(e==null){
			return;
		}
		StackTraceElement[] stackTraceMsg=e.getStackTrace();
		try {
			out=new PrintWriter(new FileOutputStream(realPath,true));
			out.println("<"+EXCEPTION+" time=\""+dateStr+"\" >");
			StringBuffer sb=new StringBuffer();
			for(int i=0;i<stackTraceMsg.length;i++){
				String message =stackTraceMsg[i].toString();
				if(i<stackTraceMsg.length-1){
					sb.append(message+"\n");
				}else{
				sb.append(message);
				}
				out.println(message);
			}
			out.println("</"+EXCEPTION+">");
			out.flush();
			if(console){
				printMessageToConsole(EXCEPTION,dateStr,sb.toString());
			}
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
	}
	/**
	 * 记录日志
	 * @param type
	 * @param time
	 * @param message
	 */
	private void writeLog(String type,String time,String message){
		try {
			out=new PrintWriter(new FileOutputStream(realPath,true));
			out.println("<"+type+" time=\""+time+"\" >");
			out.println(message);
			out.println("</"+type+">");
			out.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}finally{
			close();
		}

	}
	/**
	 * 打印信息到控制台
	 * @param kind
	 * @param time
	 * @param message
	 */
	private void printMessageToConsole(String type,String time,String message){
		System.out.println("<"+type+" time=\""+time+"\" >");
		System.out.println(message);
		System.out.println("</"+type+">");
	}
	/***
	 * 关闭文件流
	 */
	private void close(){
		if(out!=null){
			out.close();
		}
	}
	
}
#日志文件保存路径,在Linux路径为d:/log/
logFilePath=d:\\log
#日志文件名称
logName=bperp
#是否打印到控制台
console=true

 

2
0
分享到:
评论

相关推荐

    日志记录器日志记录器日志记录器

    日志记录器日志记录器日志记录器日志记录器日志记录器

    使用python写的单例模式日志记录器(设计模式之单例模式)

    总结来说,这个Python实现的单例模式日志记录器结合了设计模式与日志管理的最佳实践,确保在整个应用程序中只有一个日志记录器实例,方便管理和共享。通过这种方式,我们可以有效地跟踪程序运行状态,同时避免了资源...

    PHP实现工厂模式设计日志记录器

    在这个例子中,我们将深入探讨如何使用工厂模式来实现一个日志记录器,允许客户通过更改配置文件来灵活切换日志的存储方式。 首先,`Logger.php`是日志记录器的接口,定义了日志记录的基本操作,如`writeLog()`。这...

    Node.js-基于express的访问日志记录器

    Express.js作为Node.js中最流行的Web应用框架,提供了丰富的扩展性,让我们能够轻松定制自己的访问日志记录器。"Node.js-基于express的访问日志记录器"项目就是这样一个实现,它专注于在Express应用中记录HTTP请求的...

    Go-golang简单的日志记录器。日志可输出到控制台文件或ElasticSearch。简单易于使用

    "Go-golang简单的日志记录器"是一个旨在简化日志管理的库,它提供了将日志输出到控制台、文件以及ElasticSearch的能力。这个库的设计理念是简洁易用,使得开发者可以快速集成并开始记录日志。 首先,让我们了解一下...

    Node.js-一个轻量级日志记录器底部带有状态栏滚动时不会消失

    标题中的“Node.js-一个轻量级日志记录器底部带有状态栏滚动时不会消失”表明我们正在讨论一个专门针对Node.js环境设计的日志记录工具,它具备独特的特性:在命令行界面中,其状态栏在用户滚动查看日志时会保持可见...

    工厂方法设计模式

    接着定义了抽象工厂接口`ILogFactory`和两个具体工厂类`FileLogFactory`和`DatabaseLogFactory`,它们分别用于创建文件日志记录器和数据库日志记录器。 ```csharp // 抽象日志工厂 interface ILogFactory { Log ...

    使用Java反射实现一个简单的日志记录器.txt

    ### 使用Java反射实现的日志记录器 #### 一、引言 本文将详细介绍如何使用Java反射机制实现一个简单但功能齐全的日志记录器——`LoggerUtil`。此日志记录器能够根据不同级别(如INFO、ERROR)记录日志,并允许通过...

    cpp-G3log异步日志记录器

    **cpp-G3log异步日志记录器** G3log是一个高效的、开源的、C++编写的异步日志记录库。它旨在提供一个简单、快速且无阻塞的日志解决方案,尤其适合性能敏感的应用场景。G3log的命名来源于其主要特性:Global (全局)...

    生产消费模式应用之-使用中断队列实现的日志记录器

    在这个场景中,"使用中断队列实现的日志记录器"是一种优化策略,旨在提高系统的效率和响应速度。 中断队列,通常指的是Java中的`java.util.concurrent.BlockingQueue`接口,它提供了线程安全的数据结构,允许生产者...

    Go-logutils-Go(Golang)扩展标准日志记录器

    `logutils`是一个针对Go(Golang)的扩展日志记录器库,它为标准日志库提供了丰富的增强特性,帮助开发者更方便地管理和调试应用程序。 1. **日志级别控制**:`logutils`允许设置不同的日志级别,如DEBUG、INFO、...

    新华XDPS工程师用户手册B07历史数据和日志记录器.pdf

    《新华XDPS工程师用户手册B07历史数据和日志记录器》主要介绍了XDPS系统中历史数据和日志记录的管理和配置方法。历史数据收集软件是用于定期收集XDPS网络上的全局点,包括模拟量和开关量的历史数值,以及所有报警和...

    Go-lumberjack-简单的滚动日志记录器实现io.WriteCloser

    `lumberjack`是一个简洁的日志记录器库,它实现了`io.WriteCloser`接口,这使得我们可以方便地将日志输出到文件,并且支持自动滚动和文件大小限制。下面我们将详细探讨`lumberjack`的主要特点和使用方法。 1. **io....

    设计模式—工厂方法模式

    3. `DatabaseLoggerFactory.cs`和`FileLoggerFactory.cs`:这两个类是`LoggerFactory`的具体实现,分别代表数据库日志记录器工厂和文件日志记录器工厂。它们继承自`LoggerFactory`,并实现了`CreateLogger()`方法,...

    aLogcatV2.3.2安卓日志记录器

    对于我们做android开发的人来说,有很多时候需要捕获程序在真机上运行的异常记录,使用这个软件,你会很方便的追踪程序的运行日志。

    net core日志记录Serilog用法.docx

    .NET Core 日志记录 Serilog 用法详解 .NET Core 是微软公司推出的一个开源、跨平台的框架,用于...通过本文,我们可以了解如何使用 Serilog 进行日志记录,包括日志记录器的创建、日志级别、日志输出和日志滚动等。

    小巧易于使用且可扩展的记录器可打印漂亮的日志

    本文将详细探讨一个名为"logger"的轻量级、易用且可扩展的日志记录器,特别关注其在JavaScript和Flutter开发环境中的应用。 首先,我们来理解"小巧"这个特性。在编程领域,"小巧"通常意味着该工具具有小体积、低...

Global site tag (gtag.js) - Google Analytics