介绍
本篇文章给大家分享的是有关使用java如何实现异步将日志写到文件中,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强> java异步写日志到文件中详解强>
<强>实现代码:强>
包com.tydic.ESUtil; 进口java.io.File; 进口java.io.FileWriter; 进口java.io.IOException; 进口java.io.InputStream; 进口java.io.PrintWriter; 进口java.util.Properties; 公开课LogWriter {//日志的配置文件 公共静态最终字符串LOG_CONFIGFILE_NAME=發og.properties";//日志文件名在配置文件中的标签 公共静态最终字符串LOGFILE_TAG_NAME=發ogfile";//默认的日志文件的路径和文件名称 私人最终字符串DEFAULT_LOG_FILE_NAME=啊?logtext.log";//该类的唯一的实例 私有静态LogWriter LogWriter;//文件输出流 私人PrintWriter作家;//日志文件名 私人字符串logFileName;/* * *默认构造函数 */私人LogWriter()抛出LogException { this.init (); } 私人LogWriter(字符串文件名)抛出LogException { 这一点。logFileName=文件名; this.init (); }/* * *获取LogWriter的唯一实例。 * @return * @throws LogException */公共静态同步LogWriter getLogWriter()抛出LogException { 如果(logWriter==null) { logWriter=new logWriter (); } 返回logWriter; } 公共静态同步LogWriter getLogWriter(字符串logFileName)抛出LogException { 如果(logWriter==null) { logWriter=new logWriter (logFileName); } 返回logWriter; }/* * *往日志文件中写一条日志信息 *为了防止多线程同时操作(写)日志文件,造成文件“死锁”。使用同步关键字 * @param logMsg日志消息 */公共同步无效日志(字符串logMsg) { this.writer。println(新java.util.Date () +“:“+ logMsg); }/* * *往日志文件中写一条异常信息 *使用同步关键字。 * @param交货待写入的异常 */公共同步空白日志(例外的前女友){ 作家。println(新java.util.Date () +“:”); ex.printStackTrace(作家); }/* * *初始化LogWriter * @throws LogException */私人空间init()抛出LogException {//如果用户没有在参数中指定日志文件名,则从配置文件中获取。 如果这一点。logFileName==null) { 这一点。logFileName=this.getLogFileNameFromConfigFile ();//如果配置文件不存在或者也没有指定日志文件名,则用默认的日志文件名。 如果这一点。logFileName==null) { 这一点。logFileName=DEFAULT_LOG_FILE_NAME; } } 文件日志文件=新文件(this.logFileName); 尝试{//其中的FileWriter()中的第二个参数的含义是:是否在文件中追加内容//PrintWriter()中的第二个参数的含义是:自动将数据冲到文件中 作家=new PrintWriter(新FileWriter(日志文件,真的),真的); System.out.println(“日志文件的位置:“+ logFile.getAbsolutePath ()); }捕捉(IOException ex) { 字符串errmsg=拔薹ù蚩罩疚募?“+ logFile.getAbsolutePath ();//System.out.println (errmsg); 把新的LogException (errmsg、交货); } }/* * *从配置文件中取日志文件名 * @return */私人字符串getLogFileNameFromConfigFile () { 尝试{ 箴=new属性();//在类的当前位置,查找属性配置文件log.properties InputStream鳍=getClass () .getResourceAsStream (LOG_CONFIGFILE_NAME); 如果(鳍!=null) { pro.load(鳍);//载入配置文件 fin.close (); 返回pro.getProperty (LOGFILE_TAG_NAME); 其他}{ System.err.println(“无法打开属性配置文件:log.properties"); } }捕捉(IOException ex) { System.err.println(“无法打开属性配置文件:log.properties"); } 返回null; }//关闭LogWriter 公共空间close () { logWriter=零; 如果(作家!=null) { writer.close (); } } 公共静态void main (String [] args) { LogWriter记录器=零; 尝试{ 字符串文件名=癲:/temp/logger.log"; 记录器=LogWriter.getLogWriter(文件名);//logger.log(“第一个日志!“);//logger.log(“第二个日志信息“);//logger.log(“第三log");//logger.log(“第四个日志信息“); 字符串内容=皌ableaA | device_number | 13701010“; StringBuffer某人=new StringBuffer (); for (int i=0; i<1000000;我+ +){ sb.append(内容).append (i) .append (“; \ n"); } 内容=sb.toString (); 长时间的开始时间=System.currentTimeMillis (); logger.log(内容); 长endTime=System.currentTimeMillis (); System.out.println(“总消耗时间:“+ (endTime-startTime)); logger.close ();//ReadFromFile.readFileByLines(文件名); }捕捉(LogException e) { e.printStackTrace (); } } }使用java如何实现异步将日志写到文件中