文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用java如何实现异步将日志写到文件中

2023-05-31 15:32

关注

本篇文章给大家分享的是有关使用java如何实现异步将日志写到文件中,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

java异步写日志到文件中详解

实现代码:

package com.tydic.ESUtil;  import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties;  public class LogWriter { // 日志的配置文件   public static final String LOG_CONFIGFILE_NAME = "log.properties";   // 日志文件名在配置文件中的标签   public static final String LOGFILE_TAG_NAME = "logfile";      // 默认的日志文件的路径和文件名称   private final String DEFAULT_LOG_FILE_NAME = "./logtext.log";   // 该类的唯一的实例   private static LogWriter logWriter;   // 文件输出流   private PrintWriter writer;    // 日志文件名   private String logFileName;       private LogWriter() throws LogException{     this.init();   }   private LogWriter(String fileName) throws LogException{     this.logFileName = fileName;     this.init();   }      public synchronized static LogWriter getLogWriter()throws LogException{     if (logWriter == null){       logWriter = new LogWriter();     }     return logWriter;   }   public synchronized static LogWriter getLogWriter(String logFileName)throws LogException{     if (logWriter == null){       logWriter = new LogWriter(logFileName);     }     return logWriter;   }       public synchronized void log(String logMsg) {     this.writer.println(new java.util.Date() + ": " + logMsg);   }      public synchronized void log(Exception ex) {     writer.println(new java.util.Date() + ": ");     ex.printStackTrace(writer);   }       private void init() throws LogException{     //如果用户没有在参数中指定日志文件名,则从配置文件中获取。     if (this.logFileName == null){       this.logFileName = this.getLogFileNameFromConfigFile();       //如果配置文件不存在或者也没有指定日志文件名,则用默认的日志文件名。       if (this.logFileName == null){         this.logFileName = DEFAULT_LOG_FILE_NAME;       }     }     File logFile = new File(this.logFileName);     try {       // 其中的FileWriter()中的第二个参数的含义是:是否在文件中追加内容       // PrintWriter()中的第二个参数的含义是:自动将数据flush到文件中       writer = new PrintWriter(new FileWriter(logFile, true), true);       System.out.println("日志文件的位置:" + logFile.getAbsolutePath());     } catch (IOException ex) {       String errmsg = "无法打开日志文件:" + logFile.getAbsolutePath();       // System.out.println(errmsg);       throw new LogException(errmsg, ex);     }   }      private String getLogFileNameFromConfigFile() {      try {        Properties pro = new Properties();        //在类的当前位置,查找属性配置文件log.properties        InputStream fin = getClass().getResourceAsStream(LOG_CONFIGFILE_NAME);        if (fin != null){         pro.load(fin);//载入配置文件         fin.close();          return pro.getProperty(LOGFILE_TAG_NAME);       } else {         System.err.println("无法打开属性配置文件: log.properties" );        }     }catch (IOException ex) {        System.err.println("无法打开属性配置文件: log.properties" );      }     return null;   }   //关闭LogWriter   public void close() {     logWriter = null;     if (writer != null){       writer.close();     }   }    public static void main(String[] args) {     LogWriter logger = null;     try {       String fileName = "d:/temp/logger.log";       logger = LogWriter.getLogWriter(fileName); //     logger.log("First log!"); //     logger.log("第二个日志信息"); //     logger.log("Third log"); //     logger.log("第四个日志信息");       String content="tableaA|device_number|13701010";       StringBuffer sb=new StringBuffer();       for(int i=0;i<1000000;i++){         sb.append(content).append(i).append(";\n");       }       content=sb.toString();       long startTime=System.currentTimeMillis();       logger.log(content);       long endTime=System.currentTimeMillis();       System.out.println("总消耗时间:"+(endTime-startTime));       logger.close(); //     ReadFromFile.readFileByLines(fileName);     } catch (LogException e) {       e.printStackTrace();     }   } } 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯