DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

运行时动态指定文件名的日志工具实现方法


网元日志的特点是:每个网元的日志要写在单独的文件中,文件名要能够唯一地确定一组“用户-网元”连接,因此不可能预先指定或者写在配置文件里,只能在运行时根据登录的用户名和连接网元的ID动态生成。

使用JDK原生的java.io.FileOutputStream等类可以达到上述目的,但文件的关闭比较麻烦,由于JVM垃圾回收的特点,日志包装类被回收的时间是不确定的,如果它被回收的比较慢,文件句柄就不会被关闭,导致系统资源消耗变大。

下面的代码基于Logback实现了运行时动态指定日志文件名的日志工具,并发500个线程写日志文件,大约耗时3s左右。

import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.FileAppender; public class DynamicLogWriter { private String loggerName = null; private final Logger logbackLogger; public DynamicLogWriter(String logfileName) { loggerName = logfileName; LoggerContext loggerContext = new LoggerContext(); FileAppender fileAppender = new FileAppender(); fileAppender.setContext(loggerContext); fileAppender.setName("logfile"); fileAppender.setFile("log/" + loggerName + ".log"); PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(loggerContext); encoder.setPattern("%msg"); encoder.start(); fileAppender.setEncoder(encoder); fileAppender.start(); logbackLogger = loggerContext.getLogger("nelogger"); logbackLogger.addAppender(fileAppender); // OPTIONAL: print logback internal status messages // StatusPrinter.print(loggerContext); } public void writeNeLog(String msg) { logbackLogger.debug(msg); } public static void main(String[] args) { for (int i = 0; i < 500; i++) { new Thread(new ThreadWrapper(i)).start(); } } } class ThreadWrapper implements Runnable { private final int id; public ThreadWrapper(int i) { id = i; } @Override public void run() { DynamicLogWriter logWriter = new DynamicLogWriter("192.168.0.2." + id); logWriter.writeNeLog("Welcome t"); logWriter.writeNeLog("o Ubuntu 11.4\r\nlogi"); logWriter.writeNeLog("n:user\r\npasswor"); logWriter.writeNeLog("d:\r\nlast login..."); } }

参考: http://stackoverflow.com/questions/7824620/logback-set-log-file-name-programatically



Published

Apr 23, 2013

Last Updated

Apr 23, 2013

Category

Tech

Tags

  • logback 2

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor