private static void enableAsyncAuditLog() { if (!(auditLog instanceof Log4JLogger)) { LOG.warn("Log4j is required to enable async auditlog"); return; } Logger logger = ((Log4JLogger)auditLog).getLogger(); @SuppressWarnings("unchecked") List<Appender> appenders = Collections.list(logger.getAllAppenders()); // failsafe against trying to async it more than once if (!appenders.isEmpty() && !(appenders.get(0) instanceof AsyncAppender)) { AsyncAppender asyncAppender = new AsyncAppender(); // change logger to have an async appender containing all the // previously configured appenders for (Appender appender : appenders) { logger.removeAppender(appender); asyncAppender.addAppender(appender); } logger.addAppender(asyncAppender); } } /**
@Override public void activateOptions() { consoleAppender.activateOptions(); super.activateOptions(); }
@Override public void close() { if (!executorService.isShutdown()) { executorService.shutdownNow(); } super.close(); }
@Inject SshLog(final Provider<SshSession> session, final Provider<Context> context, final SitePaths site) { this.session = session; this.context = context; final DailyRollingFileAppender dst = new DailyRollingFileAppender(); dst.setName(LOG_NAME); dst.setLayout(new MyLayout()); dst.setEncoding("UTF-8"); dst.setFile(new File(resolve(site.logs_dir), LOG_NAME).getPath()); dst.setImmediateFlush(true); dst.setAppend(true); dst.setThreshold(Level.INFO); dst.setErrorHandler(new DieErrorHandler()); dst.activateOptions(); dst.setErrorHandler(new LogLogHandler()); async = new AsyncAppender(); async.setBlocking(true); async.setBufferSize(64); async.setLocationInfo(false); async.addAppender(dst); async.activateOptions(); }
@Override public void activateAsync(List<Object[]> args) { AsyncAppender asyncAppender = new AsyncAppender(); invokeMethod(asyncAppender, args); asyncAppender.setName(productName + "." + logger.getName() + ".AsyncAppender"); Enumeration<Appender> appenders = logger.getAllAppenders(); if (appenders == null) { throw new IllegalStateException("Activate async appender failed, no appender exist."); } while (appenders.hasMoreElements()) { asyncAppender.addAppender(appenders.nextElement()); } appenders = logger.getAllAppenders(); while (appenders.hasMoreElements()) { logger.removeAppender(appenders.nextElement()); } logger.addAppender(asyncAppender); setProductName(productName); } }
void onLogout() { async.append(log("LOGOUT")); }
public void doAppend(LoggingEvent event) { if(closed) { LogLog.error("Attempted to append to closed appender named ["+name+"]."); return; } if(!isAsSevereAsThreshold(event.getLevel())) { return; } Filter f = this.headFilter; FILTER_LOOP: while(f != null) { switch(f.decide(event)) { case Filter.DENY: return; case Filter.ACCEPT: break FILTER_LOOP; case Filter.NEUTRAL: f = f.getNext(); } } this.append(event); }
private static List<AppenderInfo> doGetLoggerAppenders(Enumeration<Appender> appenders) { List<AppenderInfo> result = new ArrayList<AppenderInfo>(); while (appenders.hasMoreElements()) { AppenderInfo info = new AppenderInfo(); Appender appender = appenders.nextElement(); info.setName(appender.getName()); info.setType(appender.getClass().getName()); result.add(info); if (appender instanceof FileAppender) { info.setFile(((FileAppender) appender).getFile()); } else if (appender instanceof ConsoleAppender) { info.withDetail("target", ((ConsoleAppender) appender).getTarget()); } else if (appender instanceof AsyncAppender) { List<AppenderInfo> asyncs = doGetLoggerAppenders(((AsyncAppender) appender).getAllAppenders()); // 标明异步appender List<String> nestedNames = new ArrayList<String>(); for (AppenderInfo a : asyncs) { nestedNames.add(a.getName()); result.add(a); } info.withDetail("nestedNames", nestedNames); } } return result; }
@Override public void setLocationInfo(boolean locationInfo) { super.setLocationInfo(locationInfo); socketAppender.setLocationInfo(locationInfo); }
@Inject SshLog(final Provider<SshSession> session, final Provider<Context> context, final SitePaths site) { this.session = session; this.context = context; final DailyRollingFileAppender dst = new DailyRollingFileAppender(); dst.setName(LOG_NAME); dst.setLayout(new MyLayout()); dst.setEncoding("UTF-8"); dst.setFile(new File(resolve(site.logs_dir), LOG_NAME).getPath()); dst.setImmediateFlush(true); dst.setAppend(true); dst.setThreshold(Level.INFO); dst.setErrorHandler(new DieErrorHandler()); dst.activateOptions(); dst.setErrorHandler(new LogLogHandler()); async = new AsyncAppender(); async.setBlocking(true); async.setBufferSize(64); async.setLocationInfo(false); async.addAppender(dst); async.activateOptions(); }
@Override public void activateAsync(List<Object[]> args) { AsyncAppender asyncAppender = new AsyncAppender(); invokeMethod(asyncAppender, args); asyncAppender.setName(productName + "." + logger.getName() + ".AsyncAppender"); Enumeration<Appender> appenders = logger.getAllAppenders(); if (appenders == null) { throw new IllegalStateException("Activate async appender failed, no appender exist."); } while (appenders.hasMoreElements()) { asyncAppender.addAppender(appenders.nextElement()); } appenders = logger.getAllAppenders(); while (appenders.hasMoreElements()) { logger.removeAppender(appenders.nextElement()); } logger.addAppender(asyncAppender); setProductName(productName); } }
void onLogout() { async.append(log("LOGOUT")); }
public void doAppend(LoggingEvent event) { if(closed) { LogLog.error("Attempted to append to closed appender named ["+name+"]."); return; } if(!isAsSevereAsThreshold(event.getLevel())) { return; } Filter f = this.headFilter; FILTER_LOOP: while(f != null) { switch(f.decide(event)) { case Filter.DENY: return; case Filter.ACCEPT: break FILTER_LOOP; case Filter.NEUTRAL: f = f.getNext(); } } this.append(event); }
private static List<AppenderInfo> doGetLoggerAppenders(Enumeration<Appender> appenders) { List<AppenderInfo> result = new ArrayList<AppenderInfo>(); while (appenders.hasMoreElements()) { AppenderInfo info = new AppenderInfo(); Appender appender = appenders.nextElement(); info.setName(appender.getName()); info.setType(appender.getClass().getName()); result.add(info); if (appender instanceof FileAppender) { info.setFile(((FileAppender) appender).getFile()); } else if (appender instanceof ConsoleAppender) { info.withDetail("target", ((ConsoleAppender) appender).getTarget()); } else if (appender instanceof AsyncAppender) { List<AppenderInfo> asyncs = doGetLoggerAppenders(((AsyncAppender) appender).getAllAppenders()); // 标明异步appender List<String> nestedNames = new ArrayList<String>(); for (AppenderInfo a : asyncs) { nestedNames.add(a.getName()); result.add(a); } info.withDetail("nestedNames", nestedNames); } } return result; }
AsyncAppender async = (AsyncAppender) LogManager.getRootLogger().getAppender("async"); if (null == async) { async = new AsyncAppender(); async.setName("async"); LogManager.getRootLogger().addAppender(async); async.addAppender(fileAppender);
/** * Make the metrics logger async and add all pre-existing appenders to the * async appender. */ public static void makeMetricsLoggerAsync(Log metricsLog) { if (!(metricsLog instanceof Log4JLogger)) { LOG.warn("Metrics logging will not be async since " + "the logger is not log4j"); return; } org.apache.log4j.Logger logger = ((Log4JLogger) metricsLog).getLogger(); logger.setAdditivity(false); // Don't pollute actual logs with metrics dump @SuppressWarnings("unchecked") List<Appender> appenders = Collections.list(logger.getAllAppenders()); // failsafe against trying to async it more than once if (!appenders.isEmpty() && !(appenders.get(0) instanceof AsyncAppender)) { AsyncAppender asyncAppender = new AsyncAppender(); // change logger to have an async appender containing all the // previously configured appenders for (Appender appender : appenders) { logger.removeAppender(appender); asyncAppender.addAppender(appender); } logger.addAppender(asyncAppender); } } }
@Override public void activateOptions() { // only schedule it once (in case options get activated more than once); not sure if this is // possible if (trackerScheduled.compareAndSet(false, true)) { if (frequency <= 0) { // use default rate of 5 seconds between each check frequency = 5000; } if (tracker == null) { tracker = new MonitorTracker(this, new ZooCacheLocationSupplier(), new SocketAppenderFactory()); } executorService.scheduleWithFixedDelay(tracker, frequency, frequency, TimeUnit.MILLISECONDS); } super.activateOptions(); }
@Override public void append(final LoggingEvent event) { // Lazy attachment, to avoid calling non-final method in constructor if (!isAttached(socketAppender)) { addAppender(socketAppender); } // Lazy activation / connection too, to allow setting host and port if (activated.compareAndSet(false, true)) { socketAppender.activateOptions(); } super.append(event); }
@Override public void stop() { async.close(); }
private void enableAsyncLogging(Logger logger) { AsyncAppender asyncAppender = new AsyncAppender(); @SuppressWarnings("unchecked") Enumeration<Appender> en = logger.getAllAppenders(); while (en.hasMoreElements()) { Appender appender = en.nextElement(); if (appender instanceof AsyncAppender) { // already async return; } logger.removeAppender(appender); asyncAppender.addAppender(appender); } logger.addAppender(asyncAppender); }