Java logging tool class (logging)

From , 3 Years ago, written in Java, viewed 229 times.
URL https://pastebin.vip/view/85fc37b1
  1. import java.io.File;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.PrintWriter;
  6. import java.util.Properties;
  7.  
  8. /**
  9.  * 日志工具类 使用了单例模式,保证只有一个实例。 为了更方便的配置日志文件名,使用属性文件配置。 也可以在程序中指定日志文件名。
  10.  */
  11. public class LogWriter {
  12.         // 日志的配置文件
  13.         public static final String LOG_CONFIGFILE_NAME = "log.properties";
  14.         // 日志文件名在配置文件中的标签
  15.         public static final String LOGFILE_TAG_NAME = "logfile";
  16.  
  17.         // 默认的日志文件的路径和文件名称
  18.         private final String DEFAULT_LOG_FILE_NAME = "./logtext.log";
  19.         // 该类的唯一的实例
  20.         private static LogWriter logWriter;
  21.         // 文件输出流
  22.         private PrintWriter writer;
  23.         // 日志文件名
  24.         private String logFileName;
  25.  
  26.         /**
  27.          * 默认构造函数
  28.          */
  29.         private LogWriter() throws LogException {
  30.                 this.init();
  31.         }
  32.  
  33.         private LogWriter(String fileName) throws LogException {
  34.                 this.logFileName = fileName;
  35.                 this.init();
  36.         }
  37.  
  38.         /**
  39.          * 获取LogWriter的唯一实例。
  40.          *
  41.          * @return
  42.          * @throws LogException
  43.          */
  44.         public synchronized static LogWriter getLogWriter() throws LogException {
  45.                 if (logWriter == null) {
  46.                         logWriter = new LogWriter();
  47.                 }
  48.                 return logWriter;
  49.         }
  50.  
  51.         public synchronized static LogWriter getLogWriter(String logFileName)
  52.                         throws LogException {
  53.                 if (logWriter == null) {
  54.                         logWriter = new LogWriter(logFileName);
  55.                 }
  56.                 return logWriter;
  57.         }
  58.  
  59.         /**
  60.          * 往日志文件中写一条日志信息 为了防止多线程同时操作(写)日志文件,造成文件”死锁”。使用synchronized关键字
  61.          *
  62.          * @param logMsg
  63.          *            日志消息
  64.          */
  65.         public synchronized void log(String logMsg) {
  66.                 this.writer.println(new java.util.Date() + ": " + logMsg);
  67.         }
  68.  
  69.         /**
  70.          * 往日志文件中写一条异常信息 使用synchronized关键字。
  71.          *
  72.          * @param ex
  73.          *            待写入的异常
  74.          */
  75.         public synchronized void log(Exception ex) {
  76.                 writer.println(new java.util.Date() + ": ");
  77.                 ex.printStackTrace(writer);
  78.         }
  79.  
  80.         /**
  81.          * 初始化LogWriter
  82.          *
  83.          * @throws LogException
  84.          */
  85.         private void init() throws LogException {
  86.                 // 如果用户没有在参数中指定日志文件名,则从配置文件中获取。
  87.                 if (this.logFileName == null) {
  88.                         this.logFileName = this.getLogFileNameFromConfigFile();
  89.                         // 如果配置文件不存在或者也没有指定日志文件名,则用默认的日志文件名。
  90.                         if (this.logFileName == null) {
  91.                                 this.logFileName = DEFAULT_LOG_FILE_NAME;
  92.                         }
  93.                 }
  94.                 File logFile = new File(this.logFileName);
  95.                 try {
  96.                         // 其中的FileWriter()中的第二个参数的含义是:是否在文件中追加内容
  97.                         // PrintWriter()中的第二个参数的含义是:自动将数据flush到文件中
  98.                         writer = new PrintWriter(new FileWriter(logFile, true), true);
  99.                         System.out.println("日志文件的位置:" + logFile.getAbsolutePath());
  100.                 } catch (IOException ex) {
  101.                         String errmsg = "无法打开日志文件:" + logFile.getAbsolutePath();
  102.                         // System.out.println(errmsg);
  103.                         throw new LogException(errmsg, ex);
  104.                 }
  105.         }
  106.  
  107.         /**
  108.          * 从配置文件中取日志文件名
  109.          *
  110.          * @return
  111.          */
  112.         private String getLogFileNameFromConfigFile() {
  113.                 try {
  114.                         Properties pro = new Properties();
  115.                         // 在类的当前位置,查找属性配置文件log.properties
  116.                         InputStream fin = getClass().getResourceAsStream(
  117.                                         LOG_CONFIGFILE_NAME);
  118.                         if (fin != null) {
  119.                                 pro.load(fin);// 载入配置文件
  120.                                 fin.close();
  121.                                 return pro.getProperty(LOGFILE_TAG_NAME);
  122.                         } else {
  123.                                 System.err.println("无法打开属性配置文件: log.properties");
  124.                         }
  125.                 } catch (IOException ex) {
  126.                         System.err.println("无法打开属性配置文件: log.properties");
  127.                 }
  128.                 return null;
  129.         }
  130.  
  131.         // 关闭LogWriter
  132.         public void close() {
  133.                 logWriter = null;
  134.                 if (writer != null) {
  135.                         writer.close();
  136.                 }
  137.         }
  138.  
  139.         public static void main(String[] args) {
  140.                 LogWriter logger = null;
  141.                 try {
  142.                         String fileName = "C:/temp/temp0/logger.log";
  143.                         logger = LogWriter.getLogWriter(fileName);
  144.                         logger.log("First log!");
  145.                         logger.log("第二个日志信息");
  146.                         logger.log("Third log");
  147.                         logger.log("第四个日志信息");
  148.                         logger.close();
  149.                 } catch (LogException e) {
  150.                         e.printStackTrace();
  151.                 }
  152.         }
  153. }

Reply to "Java logging tool class (logging)"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website