@Override public void configure(final LoggerContext lc) { final ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<>(); ca.setContext(lc); ca.setName("console"); final LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<>(); encoder.setContext(lc); final TTLLLayout layout = new TTLLLayout(); layout.setContext(lc); layout.start(); encoder.setLayout(layout); ca.setEncoder(encoder); ca.start(); final Logger rootLogger = lc.getLogger("ROOT"); rootLogger.setLevel(Level.WARN); rootLogger.addAppender(ca); }
@Override public void configure(LoggerContext lc) { addInfo("Setting up robot logging configuration."); ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<>(); ca.setContext(lc); ca.setName("console"); LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<>(); encoder.setContext(lc); PatternLayout layout = new PatternLayout(); layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); layout.setContext(lc); layout.start(); encoder.setLayout(layout); ca.setEncoder(encoder); ca.start(); Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME); rootLogger.addAppender(ca); rootLogger.setLevel(Level.DEBUG); }
@Test public void encoderCharset() throws JoranException, IOException, InterruptedException { String configFileAsStr = ClassicTestConstants.JORAN_INPUT_PREFIX + "encoderCharset.xml"; configure(configFileAsStr); ConsoleAppender<ILoggingEvent> consoleAppender = (ConsoleAppender<ILoggingEvent>) root.getAppender("CONSOLE"); assertNotNull(consoleAppender); LayoutWrappingEncoder<ILoggingEvent> encoder = (LayoutWrappingEncoder<ILoggingEvent>) consoleAppender.getEncoder(); assertEquals("UTF-8", encoder.getCharset().displayName()); StatusChecker checker = new StatusChecker(loggerContext); checker.assertIsErrorFree(); }
private static void setupOwnLogger() { LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); logger = (Logger) LoggerFactory.getLogger(Values.BOT_NAME); ConsoleAppender<ILoggingEvent> consoleAppender = new ConsoleAppender<>(); consoleAppender.setContext(lc); consoleAppender.setName("console"); LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<>(); PatternLayout layout = new PatternLayout(); layout.setPattern("[%d{HH:mm:ss}] [%level] [%logger] %msg%n"); layout.setContext(lc); layout.start(); encoder.setLayout(layout); consoleAppender.setEncoder(encoder); consoleAppender.start(); // disable default appender logger.setAdditive(false); // enable custom console appender logger.addAppender(consoleAppender); // set logging level if(a.isDebug()) { logger.setLevel(Level.DEBUG); } else { logger.setLevel(Level.INFO); } }
/** * レイアウトの設定<br> * 通常は {@link #setEncoder(Encoder)}を利用する * * @param layout {@code <layout>} */ public void setLayout(Layout<E> layout) { LayoutWrappingEncoder<E> lwe = new LayoutWrappingEncoder<>(); lwe.setLayout(layout); lwe.setContext(this.context); this.encoder = lwe; }
/** * Charset取得 (取れる範囲で) * * @return Charset */ protected Charset getCharset() { Charset charset = null; if (this.encoder instanceof LayoutWrappingEncoder) { charset = ((LayoutWrappingEncoder<?>) this.encoder).getCharset(); } return charset != null ? charset : Charset.defaultCharset(); }
@Override public void configure(LoggerContext lc) { addInfo("Setting up robot logging configuration."); FileAppender<ILoggingEvent> fa = new FileAppender<>(); fa.setFile("tct.log"); fa.setAppend(true); ConsoleAppender<ILoggingEvent> ca = new ConsoleAppender<>(); ca.setContext(lc); ca.setName("console"); fa.setContext(lc); fa.setName("logfile"); LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<>(); encoder.setContext(lc); PatternLayout layout = new PatternLayout(); layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); layout.setContext(lc); layout.start(); encoder.setLayout(layout); ca.setEncoder(encoder); // ca.start(); fa.setEncoder(encoder); fa.start(); Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME); // rootLogger.addAppender(ca); rootLogger.addAppender(fa); rootLogger.setLevel(Level.WARN); }
/** * Sets up SLF4J logging for {@link System#out} and {@link System#err} at INFO level. * The logger also logs to {@link ClientSettings#LOGGING_FILE}, with the same format as for the console. */ private static void setupConsoleLogging() { Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); root.setLevel(Level.INFO); ConsoleAppender<ILoggingEvent> consoleAppender = (ConsoleAppender<ILoggingEvent>) root.getAppender("console"); LayoutWrappingEncoder<ILoggingEvent> consoleWrappingEncoder = (LayoutWrappingEncoder<ILoggingEvent>) consoleAppender.getEncoder(); LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<>(); encoder.setLayout(consoleWrappingEncoder.getLayout()); encoder.setCharset(Charset.forName("UTF-16")); encoder.setContext(root.getLoggerContext()); encoder.start(); FileAppender<ILoggingEvent> logFileAppender = new FileAppender<>(); logFileAppender.setFile(ClientSettings.LOGGING_FILE); logFileAppender.setContext(root.getLoggerContext()); logFileAppender.setEncoder(encoder); logFileAppender.setAppend(false); logFileAppender.start(); root.addAppender(logFileAppender); SysOutOverSLF4J.sendSystemOutAndErrToSLF4J(); }
public boolean setImmediateFlush(boolean enable) { FileAppender<ILoggingEvent> fileLogger = getFileLogger(); Encoder<ILoggingEvent> encoder = fileLogger.getEncoder(); if (encoder instanceof LayoutWrappingEncoder) { ((LayoutWrappingEncoder) encoder).setImmediateFlush(enable); return true; } return false; }
public boolean isImmediateFlush() { FileAppender<ILoggingEvent> fileLogger = getFileLogger(); Encoder<ILoggingEvent> encoder = fileLogger.getEncoder(); if (encoder instanceof LayoutWrappingEncoder) { return ((LayoutWrappingEncoder) encoder).isImmediateFlush(); } return false; }
public void setLayout(Layout<E> layout) { addWarn("This appender no longer admits a layout as a sub-component, set an encoder instead."); addWarn("To ensure compatibility, wrapping your layout in LayoutWrappingEncoder."); addWarn("See also "+CODES_URL+"#layoutInsteadOfEncoder for details"); LayoutWrappingEncoder<E> lwe = new LayoutWrappingEncoder<E>(); lwe.setLayout(layout); lwe.setContext(context); this.encoder = lwe; }
public void headerFooterCheck(String fileHeader, String presentationHeader, String presentationFooter, String fileFooter) { OutputStreamAppender<Object> wa = new OutputStreamAppender<Object>(); wa.setContext(context); ByteArrayOutputStream baos = new ByteArrayOutputStream(); SamplePatternLayout<Object> spl = new SamplePatternLayout<Object>(); spl.setContext(context); spl.setFileHeader(fileHeader); spl.setPresentationHeader(presentationHeader); spl.setPresentationFooter(presentationFooter); spl.setFileFooter(fileFooter); spl.start(); LayoutWrappingEncoder<Object> encoder = new LayoutWrappingEncoder<Object>(); encoder.setLayout(spl); encoder.setContext(context); wa.setEncoder(encoder); wa.setOutputStream(baos); wa.start(); wa.stop(); String result = baos.toString(); String expectedHeader = emtptyIfNull(fileHeader) + emtptyIfNull(presentationHeader); System.out.println(result); assertTrue(result, result.startsWith(expectedHeader)); String expectedFooter = emtptyIfNull(presentationFooter) + emtptyIfNull(fileFooter); assertTrue(result, result.endsWith(expectedFooter)); }
@Test public void layoutInsteadOfEncoer() throws JoranException { jc.doConfigure(ClassicTestConstants.JORAN_INPUT_PREFIX + "compatibility/layoutInsteadOfEncoder.xml"); StatusPrinter.print(loggerContext); StatusChecker checker = new StatusChecker(loggerContext); checker.assertContainsMatch(Status.WARN, "This appender no longer admits a layout as a sub-component"); checker.assertContainsMatch(Status.WARN, "See also "+CODES_URL+"#layoutInsteadOfEncoder for details"); ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) loggerContext.getLogger(Logger.ROOT_LOGGER_NAME); FileAppender<ILoggingEvent> fileAppender = (FileAppender<ILoggingEvent>) root.getAppender("LIOE"); assertTrue(fileAppender.isStarted()); assertTrue(fileAppender.getEncoder() instanceof LayoutWrappingEncoder); }
@Override public String getEncoding() { if (getTarget() instanceof OutputStreamAppender) { OutputStreamAppender<?> appender = (OutputStreamAppender<?>) getTarget(); Encoder<?> encoder = appender.getEncoder(); if (encoder instanceof LayoutWrappingEncoder) { LayoutWrappingEncoder<?> base = (LayoutWrappingEncoder<?>) encoder; if (base.getCharset() != null) { return base.getCharset().name(); } return null; } } return null; }
@Override public Appender<ILoggingEvent> createAppender(LoggerContext context, String defaultLogFormat) { LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<>(); encoder.setLayout(createLayout(context, defaultLogFormat)); FileAppender<ILoggingEvent> appender = (rollingPolicy == null) ? createSingleFileAppender(encoder, context) : createRollingFileAppender(encoder, context, rollingPolicy); return asAsync(appender); }
protected ConsoleAppender<ILoggingEvent> createConsoleAppender(LoggerContext context, String defaultLogFormat) { ConsoleAppender<ILoggingEvent> appender = new ConsoleAppender<>(); appender.setName("console"); appender.setContext(context); appender.setTarget(target.getLogbackTarget()); LayoutWrappingEncoder<ILoggingEvent> layoutEncoder = new LayoutWrappingEncoder<>(); layoutEncoder.setLayout(createLayout(context, defaultLogFormat)); appender.setEncoder(layoutEncoder); appender.start(); return appender; }
public final void setCharset(Charset charset) { if (encoder instanceof LayoutWrappingEncoder) { ((LayoutWrappingEncoder<?>) encoder).setCharset(charset); } else if (encoder instanceof CharacterEncoder) { ((CharacterEncoder<?>) encoder).setCharset(charset); } this.charset = charset; }
/** * Creates Logger that will write logs in html file using slf4j and logback. * The logs will be included in Phial Attachment * * @param context application context */ public PhialLogger(Context context) { logDir = createLogDir(context); clearOldLogs(logDir); final String logDirectory = logDir.getAbsolutePath(); // reset the default context (which may already have been initialized) // since we want to reconfigure it LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); loggerContext.reset(); RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<>(); rollingFileAppender.setContext(loggerContext); rollingFileAppender.setAppend(true); rollingFileAppender.setFile(logDirectory + "/" + LOG_PREFIX + "-latest.html"); SizeAndTimeBasedFNATP<ILoggingEvent> fileNamingPolicy = new SizeAndTimeBasedFNATP<>(); fileNamingPolicy.setContext(loggerContext); fileNamingPolicy.setMaxFileSize(MAX_FILE_SIZE); TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<>(); rollingPolicy.setContext(loggerContext); rollingPolicy.setFileNamePattern(logDirectory + "/" + LOG_PREFIX + HISTORY_FILE_NAME_PATTERN); rollingPolicy.setMaxHistory(5); rollingPolicy.setTimeBasedFileNamingAndTriggeringPolicy(fileNamingPolicy); rollingPolicy.setParent(rollingFileAppender); // parent and context required! rollingPolicy.start(); HTMLLayout htmlLayout = new HTMLLayout(); htmlLayout.setContext(loggerContext); htmlLayout.setPattern(PATTERN); htmlLayout.start(); LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<>(); encoder.setContext(loggerContext); encoder.setLayout(htmlLayout); encoder.start(); rollingFileAppender.setRollingPolicy(rollingPolicy); rollingFileAppender.setEncoder(encoder); rollingFileAppender.start(); // add the newly created appenders to the root logger; // qualify Logger to disambiguate from org.slf4j.Logger Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); root.setLevel(Level.DEBUG); root.addAppender(rollingFileAppender); // print any status messages (warnings, etc) encountered in logback config StatusPrinter.print(loggerContext); }
private void figureoutLogConfiguration(Logger Logger, LinkedList<LogProfileInfo> list, String appid) { Iterator<Appender<ILoggingEvent>> appenders = Logger.iteratorForAppenders(); while (appenders != null && appenders.hasNext()) { LogProfileInfo logProfileInfo = new LogProfileInfo(); if (appid != null) { logProfileInfo.setAppId(appid); } logProfileInfo.setLogType(LogProfileInfo.LogType.Log4j); Map<String, String> attributes = new HashMap<String, String>(); attributes.put(LogProfileInfo.ENGINE, "logback"); Appender<ILoggingEvent> appender = appenders.next(); if (!(appender instanceof FileAppender<?>)) { continue; } FileAppender<ILoggingEvent> fileAppender = (FileAppender<ILoggingEvent>) appender; @SuppressWarnings("rawtypes") LayoutWrappingEncoder encoder = (LayoutWrappingEncoder) fileAppender.getEncoder(); Layout<?> layout = encoder.getLayout(); if (null != layout) { if (layout instanceof PatternLayout) { PatternLayout patternLayout = (PatternLayout) encoder.getLayout(); attributes.put(LogProfileInfo.PATTERN, patternLayout.getPattern()); } else if (layout instanceof HTMLLayout) { attributes.put(LogProfileInfo.PATTERN, "HTMLLayout"); } else if (layout instanceof XMLLayout) { attributes.put(LogProfileInfo.PATTERN, "XMLLayout"); } else if (layout instanceof TTLLLayout) { attributes.put(LogProfileInfo.PATTERN, "TTCCLayout"); } } logProfileInfo.setFilePath(fileAppender.getFile()); logProfileInfo.setAttributes(attributes); list.add(logProfileInfo); } }
public LayoutWrappingEncoder<ILoggingEvent> getEncoder() { return encoder; }
public void setEncoder(LayoutWrappingEncoder<ILoggingEvent> encoder) { this.encoder = encoder; }
public final void setLayout(Layout<E> layout) { LayoutWrappingEncoder<E> enc = new LayoutWrappingEncoder<>(); enc.setLayout(layout); setEncoder(enc); }
protected void configEncoderToUtf8IfNecessary() { Encoder<ILoggingEvent> layoutWrappingEncoder = getEncoder(); if (layoutWrappingEncoder instanceof LayoutWrappingEncoder<?>) { ((LayoutWrappingEncoder<?>) layoutWrappingEncoder).setCharset(Charset.forName("UTF-8")); } }