Created
November 25, 2013 23:03
-
-
Save jvmvik/7650511 to your computer and use it in GitHub Desktop.
Add log4j capability to append two event message on a single line in the console output. Example: log.info("hello \n"); log.info("world !"); Results: [INFO] hello world !
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.apache.log4j.RollingFileAppender | |
import org.apache.log4j.helpers.CountingQuietWriter | |
import org.apache.log4j.spi.LoggingEvent | |
/** | |
* Interactive file appender | |
* | |
* Provide a capability to append two event message on a single line in a log file. | |
* | |
* Example: | |
* log.info("hello \n"); | |
* log.info("world !"); | |
* | |
* Results: | |
* [INFO] hello world ! | |
* | |
* @author vicben01 | |
*/ | |
class InteractiveRollingFileAppender extends RollingFileAppender | |
{ | |
public boolean immediateFlush = false | |
@Override | |
protected void subAppend(LoggingEvent event) | |
{ | |
SingleLineAppenderStrategy.subAppend(event, this) | |
if (fileName != null && qw != null) | |
{ | |
long size = ((CountingQuietWriter) qw).getCount(); | |
if (size >= maxFileSize && size >= nextRollover) | |
{ | |
rollOver(); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.arm.pipd.scf.utils.log4j | |
import org.apache.log4j.AppenderSkeleton | |
import org.apache.log4j.Layout | |
import org.apache.log4j.WriterAppender | |
import org.apache.log4j.spi.LoggingEvent | |
/** | |
* SingeLineAppender strategy. | |
* | |
* Enables to append two event message on a single line in a log file. | |
* | |
* @author vicben01 | |
*/ | |
class SingleLineAppenderStrategy | |
{ | |
static void subAppend(LoggingEvent event, WriterAppender writerAppender) | |
{ | |
// Write message | |
writerAppender.qw.write(text(event, writerAppender)); | |
if (writerAppender.layout.ignoresThrowable()) | |
{ | |
String[] s = event.getThrowableStrRep(); | |
if (s != null) | |
{ | |
int len = s.length; | |
for (int i = 0; i < len; i++) | |
{ | |
writerAppender.qw.write(s[i]); | |
writerAppender.qw.write(Layout.LINE_SEP); | |
} | |
} | |
} | |
if (writerAppender.shouldFlush(event)) | |
{ | |
writerAppender.qw.flush(); | |
} | |
} | |
static String text(LoggingEvent event, AppenderSkeleton appenderSkeleton) | |
{ | |
if(!(event.message instanceof String)) | |
return ""; | |
// Dirty text formatting | |
String text | |
if(event?.message | |
&& (((String) event.message).startsWith('done') | |
|| ((String) event.message).startsWith('fail') | |
|| ((String) event.message).startsWith('using'))) | |
{ | |
text = event.message + '\n' | |
} | |
else | |
text = appenderSkeleton.layout.format(event) | |
// Remove line separator if line is not finished | |
if(!endOfLine(event)) | |
text = text.substring(0, text.length() - 4) | |
return text | |
} | |
/** | |
* Detect if event.message end with /n | |
* and remove /n if placed at the end | |
* | |
* @param event send by logger | |
* @return true if message does not end with \n | |
*/ | |
static boolean endOfLine(LoggingEvent event) | |
{ | |
String msg = (String) event.message | |
if (msg.endsWith('/n')) | |
return false | |
return true | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment