/** * logback 1.1.8开始不再支持setMaxFileSize(String)方法 */ protected void setMaxFileSize(Object policy, String size) { try { try { Method setMaxFileSizeMethod = policy.getClass().getDeclaredMethod("setMaxFileSize", String.class); setMaxFileSizeMethod.invoke(policy, size); } catch (NoSuchMethodException e) { Method setMaxFileSizeMethod = policy.getClass().getDeclaredMethod("setMaxFileSize", FileSize.class); setMaxFileSizeMethod.invoke(policy, FileSize.valueOf(size)); } } catch (Throwable t) { throw new RuntimeException("Failed to setMaxFileSize", t); } } }
/** * Initializes the logger. This is called when we need to create a new * logger for the given file name. * * @param fileStr * @return a new Logger instance for the given fileStr * @throws IOException */ protected Logger initLogger(String fileStr) throws IOException { String loggerName = "NagiosWriter" + this.hashCode(); final PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(loggerContext); encoder.setPattern(LOG_PATTERN); encoder.start(); final FileAppender appender = new FileAppender(); appender.setContext(loggerContext); appender.setName(loggerName + "File"); appender.setAppend(true); appender.setBufferSize(new FileSize(LOG_IO_BUFFER_SIZE_BYTES)); appender.setFile(fileStr); appender.setEncoder(encoder); appender.start(); Logger logger = loggerContext.getLogger(loggerName); logger.addAppender(appender); logger.setLevel(Level.INFO); logger.setAdditive(false); return logger; }
@Test public void createRollingPolicy_size() throws Exception { props.set("sonar.log.rollingPolicy", "size:1MB"); props.set("sonar.log.maxFiles", "20"); LoggerContext ctx = underTest.getRootContext(); LogbackHelper.RollingPolicy policy = underTest.createRollingPolicy(ctx, props, "sonar"); Appender appender = policy.createAppender("SONAR_FILE"); assertThat(appender).isInstanceOf(RollingFileAppender.class); // max 20 files of 1Mb RollingFileAppender fileAppender = (RollingFileAppender) appender; FixedWindowRollingPolicy rollingPolicy = (FixedWindowRollingPolicy) fileAppender.getRollingPolicy(); assertThat(rollingPolicy.getMaxIndex()).isEqualTo(20); assertThat(rollingPolicy.getFileNamePattern()).endsWith("sonar.%i.log"); SizeBasedTriggeringPolicy triggeringPolicy = (SizeBasedTriggeringPolicy) fileAppender.getTriggeringPolicy(); FileSize maxFileSize = (FileSize) FieldUtils.readField(triggeringPolicy, "maxFileSize", true); assertThat(maxFileSize.getSize()).isEqualTo(1024L * 1024); }
@Test public void testValueOf() { { FileSize fs = FileSize.valueOf("8"); assertEquals(8, fs.getSize()); } { FileSize fs = FileSize.valueOf("8 kbs"); assertEquals(8*KB_CO, fs.getSize()); } { FileSize fs = FileSize.valueOf("8 kb"); assertEquals(8*KB_CO, fs.getSize()); } { FileSize fs = FileSize.valueOf("12 mb"); assertEquals(12*MB_CO, fs.getSize()); } { FileSize fs = FileSize.valueOf("5 GBs"); assertEquals(5*GB_CO, fs.getSize()); } }
@Test public void testToString() { { FileSize fs = new FileSize(8); assertEquals("8 Bytes", fs.toString()); } { FileSize fs = new FileSize(8 * 1024 + 3); assertEquals("8 KB", fs.toString()); } { FileSize fs = new FileSize(8 * 1024 * 1024 + 3 * 1024); assertEquals("8 MB", fs.toString()); } { FileSize fs = new FileSize(8*1024*1024*1024L); assertEquals("8 GB", fs.toString()); } }
public void setTotalSizeCap(FileSize totalSizeCap) { addInfo("setting totalSizeCap to "+totalSizeCap.toString()); this.totalSizeCap = totalSizeCap; } }
public void setTotalSizeCap(FileSize totalSizeCap) { addInfo("setting totalSizeCap to "+totalSizeCap.toString()); this.totalSizeCap = totalSizeCap; } }
appender.setContext(context); appender.setFile(currentLogFilename); appender.setBufferSize(new FileSize(bufferSize.toBytes())); triggeringPolicy.setMaxFileSize(new FileSize(maxFileSize.toBytes())); triggeringPolicy.setContext(context); triggeringPolicy.start(); sizeAndTimeBasedRollingPolicy.setMaxFileSize(new FileSize(maxFileSize.toBytes())); rollingPolicy = sizeAndTimeBasedRollingPolicy; rollingPolicy.setTotalSizeCap(new FileSize(totalSizeCap.toBytes())); appender.setContext(context); appender.setFile(currentLogFilename); appender.setBufferSize(new FileSize(bufferSize.toBytes())); return appender;
private void setMaxFileSize( SizeAndTimeBasedRollingPolicy<ILoggingEvent> rollingPolicy, String maxFileSize) { try { rollingPolicy.setMaxFileSize(FileSize.valueOf(maxFileSize)); } catch (NoSuchMethodError ex) { // Logback < 1.1.8 used String configuration Method method = ReflectionUtils.findMethod( SizeAndTimeBasedRollingPolicy.class, "setMaxFileSize", String.class); ReflectionUtils.invokeMethod(method, rollingPolicy, maxFileSize); } }
public boolean isTriggeringEvent(final File activeFile, final E event) { if(invocationGate.skipFurtherWork()) return false; long now = System.currentTimeMillis(); invocationGate.updateMaskIfNecessary(now); return (activeFile.length() >= maxFileSize.getSize()); }
public void setTotalSizeCap(FileSize totalSizeCap) { addInfo("setting totalSizeCap to "+totalSizeCap.toString()); this.totalSizeCap = totalSizeCap; } }
protected Appender buildAppender(String loggerName, String fileStr) { final RollingFileAppender appender = new RollingFileAppender(); appender.setName(loggerName + "RollingFile"); appender.setContext(loggerContext); appender.setImmediateFlush(true); appender.setBufferSize(new FileSize(LOG_IO_BUFFER_SIZE_BYTES)); appender.setFile(fileStr); appender.setEncoder(buildEncoder()); TriggeringPolicy triggeringPolicy = buildTriggeringPolicy(); if (triggeringPolicy != null) { appender.setTriggeringPolicy(triggeringPolicy); } appender.setRollingPolicy(buildRollingPolicy(appender, fileStr)); appender.start(); return appender; }
protected TriggeringPolicy buildTriggeringPolicy() { SizeBasedTriggeringPolicy triggeringPolicy = new SizeBasedTriggeringPolicy(); triggeringPolicy.setContext(loggerContext); triggeringPolicy.setMaxFileSize(FileSize.valueOf(maxLogFileSize)); triggeringPolicy.start(); return triggeringPolicy; }
public boolean isTriggeringEvent(File activeFile, final E event) { long time = getCurrentTime(); if (time >= nextCheck) { Date dateInElapsedPeriod = dateInCurrentPeriod; elapsedPeriodsFileName = tbrp.fileNamePatternWCS .convertMultipleArguments(dateInElapsedPeriod, currentPeriodsCounter); currentPeriodsCounter = 0; setDateInCurrentPeriod(time); computeNextCheck(); return true; } // for performance reasons, check for changes every 16,invocationMask invocations if (((++invocationCounter) & invocationMask) != invocationMask) { return false; } if (invocationMask < 0x0F) { invocationMask = (invocationMask << 1) + 1; } if (activeFile.length() >= maxFileSize.getSize()) { elapsedPeriodsFileName = tbrp.fileNamePatternWCS .convertMultipleArguments(dateInCurrentPeriod, currentPeriodsCounter); currentPeriodsCounter++; return true; } return false; }
public void setBufferSize(FileSize bufferSize) { addInfo("Setting bufferSize to ["+bufferSize.toString()+"]"); this.bufferSize = bufferSize; }
static public FileSize valueOf(String fileSizeStr) { Matcher matcher = FILE_SIZE_PATTERN.matcher(fileSizeStr); long coefficient; if (matcher.matches()) { String lenStr = matcher.group(DOUBLE_GROUP); String unitStr = matcher.group(UNIT_GROUP); long lenValue = Long.valueOf(lenStr); if (unitStr.equalsIgnoreCase("")) { coefficient = 1; } else if (unitStr.equalsIgnoreCase("kb")) { coefficient = KB_COEFFICIENT; } else if (unitStr.equalsIgnoreCase("mb")) { coefficient = MB_COEFFICIENT; } else if (unitStr.equalsIgnoreCase("gb")) { coefficient = GB_COEFFICIENT; } else { throw new IllegalStateException("Unexpected " + unitStr); } return new FileSize(lenValue * coefficient); } else { throw new IllegalArgumentException("String value [" + fileSizeStr + "] is not in the expected format."); } } }
public static void rollingPolicyForAppender(RollingFileAppender rollingFileAppender, String maxFileSize, String totalSizeCap, int maxHistory) { SizeAndTimeBasedRollingPolicy rollingPolicy = new SizeAndTimeBasedRollingPolicy(); rollingPolicy.setContext(LOGGER_CONTEXT); rollingPolicy.setMaxHistory(maxHistory); rollingPolicy.setMaxFileSize(FileSize.valueOf(maxFileSize)); rollingPolicy.setTotalSizeCap(FileSize.valueOf(totalSizeCap)); rollingPolicy.setFileNamePattern(rollingFileAppender.rawFileProperty() + ".%d{yyyy-MM-dd}.%i.gz"); rollingPolicy.setParent(rollingFileAppender); rollingFileAppender.setRollingPolicy(rollingPolicy); rollingPolicy.start(); }
protected boolean isUnboundedTotalSizeCap() { return totalSizeCap.getSize() == UNBOUNDED_TOTAL_SIZE_CAP; }
public void setBufferSize(FileSize bufferSize) { addInfo("Setting bufferSize to ["+bufferSize.toString()+"]"); this.bufferSize = bufferSize; }
private FileSize toFileSize(String s) { return new FileSize(parseLong(s)); }