From 53c266cab38217909701b6cd734eadb8a7c199ee Mon Sep 17 00:00:00 2001 From: Anton Larin Date: Mon, 7 Oct 2013 11:53:17 +0600 Subject: [PATCH 1/4] Added ability to set tags line in separate attribute of log4j properties. --- .gitignore | 1 + .settings/org.maven.ide.eclipse.prefs | 1 - pom.xml | 2 +- readme.md | 7 ++-- .../com/spidertracks/loggly/EmbeddedDb.java | 3 -- .../spidertracks/loggly/LogglyAppender.java | 36 ++++++++++++++----- .../loggly/LogglyAppenderManualTest.java | 5 +-- 7 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index c7ddbf8..6a9844f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ .project logs /pom.xml.versionsBackup +/bin diff --git a/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs index f4865fc..cfdba58 100644 --- a/.settings/org.maven.ide.eclipse.prefs +++ b/.settings/org.maven.ide.eclipse.prefs @@ -1,4 +1,3 @@ -#Fri Apr 29 11:43:59 NZST 2011 activeProfiles= eclipse.preferences.version=1 fullBuildGoals=process-test-resources diff --git a/pom.xml b/pom.xml index 5637b9f..dba6899 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ org.hsqldb hsqldb - 2.2.9 + 2.3.0 diff --git a/readme.md b/readme.md index c8f7af4..7df0f63 100644 --- a/readme.md +++ b/readme.md @@ -9,6 +9,7 @@ Usage is relatively straight forward. class="com.spidertracks.loggly.LogglyAppender"> + @@ -23,7 +24,8 @@ or log4j.appender.loggly=com.spidertracks.loggly.LogglyAppender log4j.appender.loggly.dirName=logs/ - log4j.appender.loggly.logglyUrl=https://logs.loggly.com/inputs/xxxxx-xxxx + log4j.appender.loggly.logglyUrl=https://logs-01.loggly.com/inputs/xxxxx-xxxx + log4j.appender.loggly.logglyTags=myApp1,newYork,middleware log4j.appender.loggly.proxyHost=example.com log4j.appender.loggly.proxyPort=8080 log4j.appender.loggly.batchSize=50 @@ -44,4 +46,5 @@ This supports guaranteed delivery. If the logger cannot contact Loggly, Excepts when the request http status codes i 400 Bad Request - then the messages is dumped. ex. a too large message. - +# Authentic source +http://www.loggly.com/docs/api-sending-data/ \ No newline at end of file diff --git a/src/main/java/com/spidertracks/loggly/EmbeddedDb.java b/src/main/java/com/spidertracks/loggly/EmbeddedDb.java index 6c01b43..c2f7650 100644 --- a/src/main/java/com/spidertracks/loggly/EmbeddedDb.java +++ b/src/main/java/com/spidertracks/loggly/EmbeddedDb.java @@ -1,6 +1,3 @@ -/** - * - */ package com.spidertracks.loggly; import java.sql.*; diff --git a/src/main/java/com/spidertracks/loggly/LogglyAppender.java b/src/main/java/com/spidertracks/loggly/LogglyAppender.java index 560b672..23c4065 100644 --- a/src/main/java/com/spidertracks/loggly/LogglyAppender.java +++ b/src/main/java/com/spidertracks/loggly/LogglyAppender.java @@ -10,8 +10,9 @@ import org.apache.log4j.spi.LoggingEvent; /** - * Currently uses an asynchronous blocking queue to write messages. Messages are written to files with sequential identifiers, these sequential files are then read by the reader thread. When a file is - * fully consumed, it is removed. + * Currently uses an asynchronous blocking queue to write messages. + * Messages are written to files with sequential identifiers, these sequential files are then read by the reader thread. + * When a file is fully consumed, it is removed. * * @author Todd Nine */ @@ -21,11 +22,11 @@ public class LogglyAppender extends AppenderSkeleton { private EmbeddedDb db; - // private LogglyMessageQueue messageQ; - private String dirName; private String logglyUrl; + + private String logglyTags; private int batchSize = 50; @@ -176,7 +177,7 @@ public void run() { } } } catch (IOException e) { - errorHandler.error(String.format("Unable to send data to loggly at URL %s", logglyUrl), e, 2); + errorHandler.error(String.format("Unable to send data to loggly at URL %s", getLogglyPreparedURL()), e, 2); } } @@ -242,7 +243,7 @@ public boolean waitUntilDbInitialized() { */ private int sendData(List messages) throws IOException { - URL url = new URL(logglyUrl); + URL url = new URL(getLogglyPreparedURL()); Proxy proxy = Proxy.NO_PROXY; if (proxyHost != null) { SocketAddress addr = new InetSocketAddress(proxyHost, proxyPort); @@ -283,15 +284,25 @@ private int sendData(List messages) throws IOException { while ((value = in.read()) != -1) { response.append((char) value); } - errorHandler.error(String.format("Unable to send data to loggly at URL %s Response %s (Logging error, this will not functioning of the main program)", logglyUrl, + errorHandler.error(String.format("Unable to send data to loggly at URL %s Response %s (Logging error, this will not functioning of the main program)", getLogglyPreparedURL(), response)); } catch (IOException ee) { - errorHandler.error(String.format("Unable to send data to loggly at URL %s (Logging error, this will not functioning of the main program)", logglyUrl), e, 2); + errorHandler.error(String.format("Unable to send data to loggly at URL %s (Logging error, this will not functioning of the main program)", getLogglyPreparedURL()), e, 2); } } return respCode; } + /** + * @return URL to loggly with tags appended if exist. + */ + private String getLogglyPreparedURL() { + if (logglyTags != null && !logglyTags.isEmpty()) { + return logglyUrl + "/tag/" + logglyTags; + } + return logglyUrl; + } + /** * Stop this thread sending data and write the last read position */ @@ -362,4 +373,13 @@ public void setBatchSize(int batchSize) { this.batchSize = batchSize; } + /** + * Tags, which Loggly will apply as meta data to your event. + * + * @param logglyTags + */ + public void setLogglyTags(String logglyTags) { + this.logglyTags = logglyTags; + } + } diff --git a/src/main/java/com/spidertracks/loggly/LogglyAppenderManualTest.java b/src/main/java/com/spidertracks/loggly/LogglyAppenderManualTest.java index 3d26451..5262ca1 100644 --- a/src/main/java/com/spidertracks/loggly/LogglyAppenderManualTest.java +++ b/src/main/java/com/spidertracks/loggly/LogglyAppenderManualTest.java @@ -1,6 +1,3 @@ -/* - * $Id$ - */ package com.spidertracks.loggly; import java.util.Properties; @@ -53,7 +50,7 @@ public static void configureLoggingToConsole(String apiKey) { loggingProperties.setProperty("log4j.appender.loggly","com.spidertracks.loggly.LogglyAppender"); loggingProperties.setProperty("log4j.appender.loggly.dirName","logs/"); - loggingProperties.setProperty("log4j.appender.loggly.logglyUrl","https://logs.loggly.com/inputs/" + apiKey); + loggingProperties.setProperty("log4j.appender.loggly.logglyUrl","https://logs-01.loggly.com/inputs/" + apiKey); loggingProperties.setProperty("log4j.appender.loggly.batchSize","50"); loggingProperties.setProperty("log4j.appender.loggly.layout","org.apache.log4j.EnhancedPatternLayout"); loggingProperties.setProperty("log4j.appender.loggly.layout.ConversionPattern","%d{ISO8601}{GMT}Z %5p [%t] %m%n"); From c205a4e6aa0b29657a3f72825c01a1188aa8b88e Mon Sep 17 00:00:00 2001 From: Anton Larin Date: Wed, 16 Oct 2013 18:33:31 +0600 Subject: [PATCH 2/4] Multyline stacktraces to Loggly. --- .../java/com/spidertracks/loggly/LogglyAppender.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/spidertracks/loggly/LogglyAppender.java b/src/main/java/com/spidertracks/loggly/LogglyAppender.java index 23c4065..08d7e1f 100644 --- a/src/main/java/com/spidertracks/loggly/LogglyAppender.java +++ b/src/main/java/com/spidertracks/loggly/LogglyAppender.java @@ -64,11 +64,15 @@ protected void append(LoggingEvent event) { /** * We always only produce to the current file. So there's no need for locking */ - assert this.layout != null : "Cannot log, there is no layout configured."; String output = this.layout.format(event); - + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + if (event.getThrowableInformation() != null && event.getThrowableInformation().getThrowable() != null) { + event.getThrowableInformation().getThrowable().printStackTrace(pw); + output += sw.toString().replace("\t", "<\br>"); + } synchronized (waitLock) { db.writeEntry(output, System.nanoTime()); waitLock.notify(); @@ -241,7 +245,6 @@ public boolean waitUntilDbInitialized() { * @param message * @throws IOException */ - private int sendData(List messages) throws IOException { URL url = new URL(getLogglyPreparedURL()); Proxy proxy = Proxy.NO_PROXY; @@ -306,7 +309,6 @@ private String getLogglyPreparedURL() { /** * Stop this thread sending data and write the last read position */ - public void stop() { LogLog.debug("Loggly: Stopping background thread"); requestedState = ThreadState.STOPPED; From af255b005fdf0a700b03ab39850422b81b124ef4 Mon Sep 17 00:00:00 2001 From: Anton Larin Date: Mon, 21 Oct 2013 13:46:06 +0600 Subject: [PATCH 3/4] New allowed size to submit to the Loggly via HTTP is 1MB. --- src/main/java/com/spidertracks/loggly/LogglyAppender.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/spidertracks/loggly/LogglyAppender.java b/src/main/java/com/spidertracks/loggly/LogglyAppender.java index 08d7e1f..e45fd8b 100644 --- a/src/main/java/com/spidertracks/loggly/LogglyAppender.java +++ b/src/main/java/com/spidertracks/loggly/LogglyAppender.java @@ -116,9 +116,9 @@ private enum ThreadState { START, RUNNING, STOP_REQUESTED, STOPPED }; private class HttpPost implements Runnable { /** - * Loggly max message size as stated by http://www.loggly.com/blog/2011/09/logging-out-of-your-java-code/ + * Loggly max message size as stated by https://loggly.desk.com/customer/portal/questions/3431783-maximum-rest-api-request-size */ - private static final int LOGGLY_MAX_MESSAGE_SIZE = 32 * 1024; + private static final int LOGGLY_MAX_MESSAGE_SIZE = 1024 * 1024; // State variables needs to be volatile, otherwise it can be cached local to the thread and stop() will never work volatile ThreadState curState = ThreadState.START; From 44d78350bd71477014185b71ce5dfbc491c7b3f9 Mon Sep 17 00:00:00 2001 From: Anton Larin Date: Mon, 21 Oct 2013 18:15:06 +0600 Subject: [PATCH 4/4] No ability to create newlines. --- src/main/java/com/spidertracks/loggly/LogglyAppender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/spidertracks/loggly/LogglyAppender.java b/src/main/java/com/spidertracks/loggly/LogglyAppender.java index e45fd8b..9261435 100644 --- a/src/main/java/com/spidertracks/loggly/LogglyAppender.java +++ b/src/main/java/com/spidertracks/loggly/LogglyAppender.java @@ -71,7 +71,7 @@ protected void append(LoggingEvent event) { PrintWriter pw = new PrintWriter(sw); if (event.getThrowableInformation() != null && event.getThrowableInformation().getThrowable() != null) { event.getThrowableInformation().getThrowable().printStackTrace(pw); - output += sw.toString().replace("\t", "<\br>"); + output += sw.toString(); } synchronized (waitLock) { db.writeEntry(output, System.nanoTime());