logback-dev
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 9940 discussions
[JIRA] Created: (LBCORE-126) ch.qos.logback.core.db.DBAppenderBase tries to use column "EVENT_ID" but does not exist
by Brian Edwards (JIRA) 22 Mar '10
by Brian Edwards (JIRA) 22 Mar '10
22 Mar '10
ch.qos.logback.core.db.DBAppenderBase tries to use column "EVENT_ID" but does not exist
---------------------------------------------------------------------------------------
Key: LBCORE-126
URL: http://jira.qos.ch/browse/LBCORE-126
Project: logback-core
Issue Type: Bug
Components: Appender
Affects Versions: 0.9.17
Environment: postgresql
Reporter: Brian Edwards
Assignee: Logback dev list
on line 91 in ch.qos.logback.core.db.DBAppenderBase append creates a java.sql.PreparedStatement by calling connection.prepareStatement(getInsertSQL(), new String[] {"EVENT_ID"}); but because postgres is case sensitive the column does not exist because it is called event_id
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
2
2
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-105-g39dbbf9
by git-noreply@pixie.qos.ch 22 Mar '10
by git-noreply@pixie.qos.ch 22 Mar '10
22 Mar '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via 39dbbf9a5f7d414db63e89b18d09d04fd0ae6498 (commit)
from d3a98f905ea1bffb7afda7fb4405c28238635a57 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=39dbbf9a5f7d414db63e89b1…
http://github.com/ceki/logback/commit/39dbbf9a5f7d414db63e89b18d09d04fd0ae6…
commit 39dbbf9a5f7d414db63e89b18d09d04fd0ae6498
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Mon Mar 22 15:37:28 2010 +0100
- The virtual host 'gimmel' got corrupted and was resuscitated as
'haro'.
FileAppenderResilience_AS_ROOT_Test and postgresql() in
DBAppenderIntegrationTest now run on 'haro'.
- Fixed LBCORE-126 by lowercasing the EVENT_ID column name in
prepared statements for PostgreSQL.
- corrected a few compiler warnings for "raw types"
- updated to PostgreSQL JDBC driver to 8.4-701.jdbc4
diff --git a/logback-classic/pom.xml b/logback-classic/pom.xml
index bdb2ec6..41559e0 100644
--- a/logback-classic/pom.xml
+++ b/logback-classic/pom.xml
@@ -82,6 +82,12 @@
</dependency>
<dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<scope>compile</scope>
@@ -304,12 +310,6 @@ org.slf4j.test_osgi
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <version>8.2-507.jdbc3</version>
- </dependency>
-
<!-- locally installed artifact -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
@@ -330,4 +330,4 @@ org.slf4j.test_osgi
</profiles>
-</project>
\ No newline at end of file
+</project>
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java
index e055c5b..e563109 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java
@@ -85,7 +85,7 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
bindLoggingEventWithInsertStatement(insertStatement, event);
// This is expensive... should we do it every time?
bindCallerDataWithPreparedStatement(insertStatement, event.getCallerData());
-
+
int updateCount = insertStatement.executeUpdate();
if (updateCount != 1) {
addWarn("Failed to insert loggingEvent");
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/postgresql.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/postgresql.sql
index 3f2ce1b..55c7343 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/postgresql.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/postgresql.sql
@@ -1,11 +1,11 @@
-# This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender
-#
-# It is intended for PostgreSQL databases.
+-- This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender
+--
+-- It is intended for PostgreSQL databases.
DROP TABLE logging_event_property;
DROP TABLE logging_event_exception;
-DROP SEQUENCE logging_event_id_seq;
DROP TABLE logging_event;
+DROP SEQUENCE logging_event_id_seq;
CREATE SEQUENCE logging_event_id_seq MINVALUE 1 START 1;
diff --git a/logback-classic/src/test/input/integration/db/postgresql-with-driver.xml b/logback-classic/src/test/input/integration/db/postgresql-with-driver.xml
index ce5a3cf..976ddc7 100644
--- a/logback-classic/src/test/input/integration/db/postgresql-with-driver.xml
+++ b/logback-classic/src/test/input/integration/db/postgresql-with-driver.xml
@@ -2,17 +2,17 @@
<configuration>
- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
- <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
- <driverClass>org.postgresql.Driver</driverClass>
- <url>jdbc:postgresql://192.168.1.5:5432/test</url>
- <user>logback</user>
- <password>logback</password>
- </connectionSource>
- </appender>
-
- <root>
- <level value="debug" />
- <appender-ref ref="DB" />
- </root>
+ <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
+ <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
+ <driverClass>org.postgresql.Driver</driverClass>
+ <url>jdbc:postgresql://localhost:5432/test</url>
+ <user>test</user>
+ <password>test</password>
+ </connectionSource>
+ </appender>
+
+ <root>
+ <level value="debug" />
+ <appender-ref ref="DB" />
+ </root>
</configuration>
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java
index e2852b9..8ede4bc 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java
@@ -36,7 +36,7 @@ import ch.qos.logback.core.pattern.PatternLayoutBase;
import ch.qos.logback.core.pattern.parser.AbstractPatternLayoutBaseTest;
import ch.qos.logback.core.testUtil.StringListAppender;
-public class PatternLayoutTest extends AbstractPatternLayoutBaseTest {
+public class PatternLayoutTest extends AbstractPatternLayoutBaseTest<ILoggingEvent> {
private PatternLayout pl = new PatternLayout();
private LoggerContext lc = new LoggerContext();
@@ -44,7 +44,7 @@ public class PatternLayoutTest extends AbstractPatternLayoutBaseTest {
Logger root = lc.getLogger(Logger.ROOT_LOGGER_NAME);
ILoggingEvent le;
- List optionList = new ArrayList();
+ List<String> optionList = new ArrayList<String>();
public PatternLayoutTest() {
super();
@@ -68,7 +68,7 @@ public class PatternLayoutTest extends AbstractPatternLayoutBaseTest {
return makeLoggingEvent(null);
}
- public PatternLayoutBase getPatternLayoutBase() {
+ public PatternLayoutBase<ILoggingEvent> getPatternLayoutBase() {
return new PatternLayout();
}
@@ -170,7 +170,7 @@ public class PatternLayoutTest extends AbstractPatternLayoutBaseTest {
root.getAppender("LIST");
String msg = "Simon says";
logger.debug(msg);
- StringListAppender sla = (StringListAppender) root.getAppender("LIST");
+ StringListAppender<ILoggingEvent> sla = (StringListAppender<ILoggingEvent>) root.getAppender("LIST");
assertNotNull(sla);
assertEquals(1, sla.strList.size());
assertEquals(SampleConverter.SAMPLE_STR+" - "+msg, sla.strList.get(0));
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderIntegrationTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderIntegrationTest.java
index f603972..5d1f26b 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderIntegrationTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderIntegrationTest.java
@@ -38,10 +38,11 @@ public class DBAppenderIntegrationTest {
static String LOCAL_HOST_NAME;
static String[] CONFORMING_HOST_LIST = new String[] { "Orion" };
+ static String[] POSTGRES_CONFORMING_HOST_LIST = new String[] { "haro" };
int diff = new Random(System.nanoTime()).nextInt(10000);
LoggerContext lc = new LoggerContext();
-
+
@BeforeClass
public static void setUpBeforeClass() throws Exception {
InetAddress localhostIA = InetAddress.getLocalHost();
@@ -54,7 +55,7 @@ public class DBAppenderIntegrationTest {
@Before
public void setUp() throws Exception {
- lc.setName("lc"+diff);
+ lc.setName("lc" + diff);
}
@After
@@ -76,18 +77,18 @@ public class DBAppenderIntegrationTest {
logger.debug("This is a debug message. Message number: " + i);
}
logger.error("At last an error.", new Exception("Just testing"));
-
+
// check that there were no errors
StatusPrinter.print(lc);
assertEquals(Status.INFO, lc.getStatusManager().getLevel());
-
+
}
-
- static boolean isConformingHostAndJDK16OrHigher() {
- if(!Env.isJDK6OrHigher()) {
+
+ static boolean isConformingHostAndJDK16OrHigher(String[] conformingHostList) {
+ if (!Env.isJDK6OrHigher()) {
return false;
}
- for (String conformingHost : CONFORMING_HOST_LIST) {
+ for (String conformingHost : conformingHostList) {
if (conformingHost.equalsIgnoreCase(LOCAL_HOST_NAME)) {
return true;
}
@@ -95,6 +96,10 @@ public class DBAppenderIntegrationTest {
return false;
}
+ static boolean isConformingHostAndJDK16OrHigher() {
+ return isConformingHostAndJDK16OrHigher(CONFORMING_HOST_LIST);
+ }
+
@Test
public void sqlserver() throws Exception {
// perform test only on conforming hosts
@@ -123,7 +128,7 @@ public class DBAppenderIntegrationTest {
}
doTest("src/test/input/integration/db/oracle11g-with-driver.xml");
}
-
+
@Test
public void mysql() throws Exception {
// perform test only on conforming hosts
@@ -132,14 +137,15 @@ public class DBAppenderIntegrationTest {
}
doTest("src/test/input/integration/db/mysql-with-driver.xml");
}
-
+
@Test
public void postgres() throws Exception {
// perform test only on conforming hosts
- if (!isConformingHostAndJDK16OrHigher()) {
+ if (!isConformingHostAndJDK16OrHigher(POSTGRES_CONFORMING_HOST_LIST)) {
return;
}
+ System.out.println("doing test");
doTest("src/test/input/integration/db/postgresql-with-driver.xml");
}
-
+
}
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java
index cfd81ca..519c1eb 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/util/InitializationTest.java
@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.ClassicTestConstants;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.joran.spi.JoranException;
@@ -60,7 +61,7 @@ public class InitializationTest {
// However, this is something we try to avoid in order to simplify the life
// of users trying to follows the manual and logback-examples from an IDE
public void atoconfig() {
- Appender appender = root.getAppender("STDOUT");
+ Appender<ILoggingEvent> appender = root.getAppender("STDOUT");
assertNotNull(appender);
assertTrue(appender instanceof ConsoleAppender);
}
@@ -79,7 +80,7 @@ public class InitializationTest {
}
{
lc.stop();
- Appender appender = root.getAppender("STDOUT");
+ Appender<ILoggingEvent> appender = root.getAppender("STDOUT");
assertNull(appender);
}
}
@@ -96,7 +97,7 @@ public class InitializationTest {
//lc.reset();
System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, val);
new ContextInitializer(lc).autoConfig();
- Appender appender = root.getAppender("AUTO_BY_SYSTEM_PROPERTY");
+ Appender<ILoggingEvent> appender = root.getAppender("AUTO_BY_SYSTEM_PROPERTY");
assertNotNull(appender);
}
diff --git a/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java b/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java
index bcac3ef..be8bc33 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java
@@ -24,6 +24,7 @@ import java.sql.Statement;
import ch.qos.logback.core.AppenderBase;
import ch.qos.logback.core.db.dialect.DBUtil;
import ch.qos.logback.core.db.dialect.SQLDialect;
+import ch.qos.logback.core.db.dialect.SQLDialectCode;
/**
* @author Ceki Gülcü
@@ -82,6 +83,7 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
this.connectionSource = connectionSource;
}
+
@Override
public void append(E eventObject) {
Connection connection = null;
@@ -90,8 +92,13 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
connection.setAutoCommit(false);
PreparedStatement insertStatement;
if (cnxSupportsGetGeneratedKeys) {
+ String EVENT_ID_COL_NAME = "EVENT_ID";
+ // see
+ if(connectionSource.getSQLDialectCode() == SQLDialectCode.POSTGRES_DIALECT) {
+ EVENT_ID_COL_NAME = EVENT_ID_COL_NAME.toLowerCase();
+ }
insertStatement = connection.prepareStatement(getInsertSQL(),
- new String[] {"EVENT_ID"});
+ new String[] {EVENT_ID_COL_NAME});
} else {
insertStatement = connection.prepareStatement(getInsertSQL());
}
diff --git a/logback-core/src/main/java/ch/qos/logback/core/sift/AppenderTrackerImpl.java b/logback-core/src/main/java/ch/qos/logback/core/sift/AppenderTrackerImpl.java
index 4697b55..ca86f4c 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/sift/AppenderTrackerImpl.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/sift/AppenderTrackerImpl.java
@@ -91,7 +91,7 @@ public class AppenderTrackerImpl<E> implements AppenderTracker<E> {
if(found != null) {
rearrangePreexistingLinks(e);
map.remove(key);
- Appender appender = e.value;
+ Appender<E> appender = e.value;
appender.stop();
}
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/FileAppenderResilience_AS_ROOT_Test.java b/logback-core/src/test/java/ch/qos/logback/core/FileAppenderResilience_AS_ROOT_Test.java
index a5a7691..2e39ae6 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/FileAppenderResilience_AS_ROOT_Test.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/FileAppenderResilience_AS_ROOT_Test.java
@@ -47,7 +47,7 @@ public class FileAppenderResilience_AS_ROOT_Test {
FileAppender<Object> fa = new FileAppender<Object>();
static boolean isConformingHost() {
- return Env.isLocalHostNameInList(new String[] { "gimmel" });
+ return Env.isLocalHostNameInList(new String[] { "haro" });
}
@Before
diff --git a/logback-core/src/test/java/ch/qos/logback/core/pattern/parser/SamplePatternLayoutTest.java b/logback-core/src/test/java/ch/qos/logback/core/pattern/parser/SamplePatternLayoutTest.java
index 8bed2f4..edd5466 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/pattern/parser/SamplePatternLayoutTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/pattern/parser/SamplePatternLayoutTest.java
@@ -22,7 +22,7 @@ import ch.qos.logback.core.ContextBase;
import ch.qos.logback.core.pattern.PatternLayoutBase;
-public class SamplePatternLayoutTest extends AbstractPatternLayoutBaseTest {
+public class SamplePatternLayoutTest extends AbstractPatternLayoutBaseTest<Object> {
Context context = new ContextBase();
diff --git a/pom.xml b/pom.xml
index d083acf..7f1e6ea 100755
--- a/pom.xml
+++ b/pom.xml
@@ -93,12 +93,11 @@
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
-
<dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <version>1.2.131</version>
- </dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <version>8.4-701.jdbc4</version>
+ </dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>catalina</artifactId>
@@ -125,10 +124,10 @@
<version>1.0</version>
</dependency>
<dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5</version>
- </dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ </dependency>
</dependencies>
</dependencyManagement>
@@ -362,4 +361,4 @@
</profiles>
-</project>
\ No newline at end of file
+</project>
-----------------------------------------------------------------------
Summary of changes:
logback-classic/pom.xml | 14 ++++----
.../java/ch/qos/logback/classic/db/DBAppender.java | 2 +-
.../qos/logback/classic/db/dialect/postgresql.sql | 8 ++--
.../integration/db/postgresql-with-driver.xml | 26 ++++++++--------
.../ch/qos/logback/classic/PatternLayoutTest.java | 8 ++--
.../classic/db/DBAppenderIntegrationTest.java | 30 ++++++++++++--------
.../logback/classic/util/InitializationTest.java | 7 ++--
.../ch/qos/logback/core/db/DBAppenderBase.java | 9 +++++-
.../qos/logback/core/sift/AppenderTrackerImpl.java | 2 +-
.../core/FileAppenderResilience_AS_ROOT_Test.java | 2 +-
.../pattern/parser/SamplePatternLayoutTest.java | 2 +-
pom.xml | 19 ++++++------
12 files changed, 71 insertions(+), 58 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-104-gd3a98f9
by git-noreply@pixie.qos.ch 22 Mar '10
by git-noreply@pixie.qos.ch 22 Mar '10
22 Mar '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via d3a98f905ea1bffb7afda7fb4405c28238635a57 (commit)
from 66fb7325add00aea9f037fc9e813f07df4648518 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=d3a98f905ea1bffb7afda7fb…
http://github.com/ceki/logback/commit/d3a98f905ea1bffb7afda7fb4405c28238635…
commit d3a98f905ea1bffb7afda7fb4405c28238635a57
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Mon Mar 22 15:05:52 2010 +0100
- added req. MDCInsertingServletFilter
- minor refactoring in DBAppenderBase
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java b/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
index 12fedc5..8958016 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
@@ -36,6 +36,7 @@ public class ClassicConstants {
public final static String REQUEST_REMOTE_HOST_MDC_KEY = "req.remoteHost";
public final static String REQUEST_USER_AGENT_MDC_KEY = "req.userAgent";
public final static String REQUEST_REQUEST_URI = "req.requestURI";
+ public final static String REQUEST_QUERY_STRING = "req.queryString";
public final static String REQUEST_REQUEST_URL = "req.requestURL";
public final static String REQUEST_X_FORWARDED_FOR = "req.xForwardedFor";
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java b/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java
index 5efae36..ce2d74f 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java
@@ -67,6 +67,7 @@ public class MDCInsertingServletFilter implements Filter {
if (requestURL != null) {
MDC.put(ClassicConstants.REQUEST_REQUEST_URL, requestURL.toString());
}
+ MDC.put(ClassicConstants.REQUEST_QUERY_STRING, httpServletRequest.getQueryString());
MDC.put(ClassicConstants.REQUEST_USER_AGENT_MDC_KEY, httpServletRequest
.getHeader("User-Agent"));
MDC.put(ClassicConstants.REQUEST_X_FORWARDED_FOR, httpServletRequest
@@ -78,6 +79,7 @@ public class MDCInsertingServletFilter implements Filter {
void clearMDC() {
MDC.remove(ClassicConstants.REQUEST_REMOTE_HOST_MDC_KEY);
MDC.remove(ClassicConstants.REQUEST_REQUEST_URI);
+ MDC.remove(ClassicConstants.REQUEST_QUERY_STRING);
// removing possibly inexistent item is OK
MDC.remove(ClassicConstants.REQUEST_REQUEST_URL);
MDC.remove(ClassicConstants.REQUEST_USER_AGENT_MDC_KEY);
diff --git a/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java b/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java
index bee265d..bcac3ef 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/db/DBAppenderBase.java
@@ -98,10 +98,9 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
subAppend(eventObject, connection, insertStatement);
// we no longer need the insertStatement
- if (insertStatement != null) {
- insertStatement.close();
- insertStatement = null;
- }
+ close(insertStatement);
+ insertStatement = null;
+
connection.commit();
} catch (Throwable sqle) {
addError("problem appending event", sqle);
@@ -137,9 +136,6 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
}
if (!gotGeneratedKeys) {
- insertStatement.close();
- insertStatement = null;
-
idStatement = connection.createStatement();
idStatement.setMaxRows(1);
rs = idStatement.executeQuery(sqlDialect.getSelectInsertId());
@@ -152,14 +148,18 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
rs.close();
- if (idStatement != null) {
- idStatement.close();
- idStatement = null;
- }
-
+ close(idStatement);
+ idStatement = null;
+
return eventId;
}
+ void close(Statement statement) throws SQLException {
+ if(statement != null) {
+ statement.close();
+ }
+ }
+
@Override
public void stop() {
super.stop();
diff --git a/logback-site/src/site/pages/manual/mdc.html b/logback-site/src/site/pages/manual/mdc.html
index 9cf843b..b887d21 100644
--- a/logback-site/src/site/pages/manual/mdc.html
+++ b/logback-site/src/site/pages/manual/mdc.html
@@ -687,6 +687,14 @@ public class UserServletFilter implements Filter {
</tr>
<tr class="alt">
+ <td><code>req.queryString</code></td>
+ <td>
+ as returned by <a
+ href="http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServle…">getQueryString()</a> method
+ </td>
+ </tr>
+
+ <tr>
<td><code>req.userAgent</code></td>
<td>value of the "User-Agent" header
</td>
diff --git a/pom.xml b/pom.xml
index 3fcf402..d083acf 100755
--- a/pom.xml
+++ b/pom.xml
@@ -93,6 +93,12 @@
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
+
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>1.2.131</version>
+ </dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>catalina</artifactId>
-----------------------------------------------------------------------
Summary of changes:
.../ch/qos/logback/classic/ClassicConstants.java | 1 +
.../classic/helpers/MDCInsertingServletFilter.java | 2 +
.../ch/qos/logback/core/db/DBAppenderBase.java | 24 ++++++++++----------
logback-site/src/site/pages/manual/mdc.html | 8 ++++++
pom.xml | 6 +++++
5 files changed, 29 insertions(+), 12 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
[JIRA] Created: (LBCORE-128) Please support implementation of binary log files in RollingFileAppender/FileAppender
by Joern Huxhorn (JIRA) 22 Mar '10
by Joern Huxhorn (JIRA) 22 Mar '10
22 Mar '10
Please support implementation of binary log files in RollingFileAppender/FileAppender
-------------------------------------------------------------------------------------
Key: LBCORE-128
URL: http://jira.qos.ch/browse/LBCORE-128
Project: logback-core
Issue Type: Improvement
Components: Appender
Affects Versions: 0.9.17
Reporter: Joern Huxhorn
Assignee: Logback dev list
This was discussed briefly at http://marc.info/?l=logback-dev&m=124905434331308&w=2 and I forgot to file a ticket about this.
Currently, RandomFileAppender => FileAppender => WriterAppender is using the following method in WriterAppender to actually write the data:
protected void writerWrite(String s, boolean flush) throws IOException
Please add an additional method like
protected void writerWrite(byte[] bytes, boolean flush) throws IOException
to write to the underlying stream directly.
writerWrite(String, boolean) could call that method after performing the transformation internally, making this change transparent for the rest of the implementation.
Using a binary format for logfiles could have tremendous performance impact as can be seen here: http://sourceforge.net/apps/trac/lilith/wiki/SerializationPerformance
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
6
42
[JIRA] Created: (LBCORE-145) option to create new file on start of SizeAndTimeBasedFNATP
by Ryan Cogswell (JIRA) 19 Mar '10
by Ryan Cogswell (JIRA) 19 Mar '10
19 Mar '10
option to create new file on start of SizeAndTimeBasedFNATP
-----------------------------------------------------------
Key: LBCORE-145
URL: http://jira.qos.ch/browse/LBCORE-145
Project: logback-core
Issue Type: Improvement
Components: Appender
Affects Versions: 0.9.18
Reporter: Ryan Cogswell
Assignee: Logback dev list
Priority: Minor
It would be nice to have the option of having the SizeAndTimeBasedFNATP always create a new file on a restart (only applicable when <File> is not specified -- only the <FileNamePattern>). Currently, if a process locks the latest file while the appender is stopped, then the FileAppender.openFile will fail if the file is still locked when the appender starts again.
I'm currently accomplishing this by overriding SizeAndTimeBasedFNATP.start and using reflection to increment the currentPeriodsCounter.
If a boolean option (e.g. "newFileOnStart") was added to SizeAndTimeBasedFNATP and computeCurrentPeriodsHighestCounterValue was modified to return whether or not a matching file was found, then the start method could be modified as shown below:
if (tbrp.getParentsRawFileProperty() == null) {
String regex = tbrp.fileNamePattern.toRegex(dateInCurrentPeriod);
String stemRegex = FileFilterUtil.afterLastSlash(regex);
// beginning of changes
boolean fileExists = computeCurrentPeriodsHighestCounterValue(stemRegex);
if (fileExists && newFileOnStart) {
currentPeriodsCounter++;
}
// end of changes
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
0
[JIRA] Created: (LBCLASSIC-196) ensure that layout setter is still accepted in FileAppender and co.
by Ceki Gulcu (JIRA) 19 Mar '10
by Ceki Gulcu (JIRA) 19 Mar '10
19 Mar '10
ensure that layout setter is still accepted in FileAppender and co.
-------------------------------------------------------------------
Key: LBCLASSIC-196
URL: http://jira.qos.ch/browse/LBCLASSIC-196
Project: logback-classic
Issue Type: Task
Components: appender
Affects Versions: 0.9.19
Reporter: Ceki Gulcu
Assignee: Logback dev list
Priority: Critical
Fix For: 0.9.19
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
2
2
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-103-g66fb732
by git-noreply@pixie.qos.ch 19 Mar '10
by git-noreply@pixie.qos.ch 19 Mar '10
19 Mar '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via 66fb7325add00aea9f037fc9e813f07df4648518 (commit)
from 0805c91cc85c6a36c38024e637f2aa2fe3b09a03 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=66fb7325add00aea9f037fc9…
http://github.com/ceki/logback/commit/66fb7325add00aea9f037fc9e813f07df4648…
commit 66fb7325add00aea9f037fc9e813f07df4648518
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Fri Mar 19 15:34:32 2010 +0100
Fixes http://jira.qos.ch/browse/LBCLASSIC-196
diff --git a/logback-classic/src/test/input/joran/compatibility/layoutInsteadOfEncoder.xml b/logback-classic/src/test/input/joran/compatibility/layoutInsteadOfEncoder.xml
index a50b1da..283ed0b 100644
--- a/logback-classic/src/test/input/joran/compatibility/layoutInsteadOfEncoder.xml
+++ b/logback-classic/src/test/input/joran/compatibility/layoutInsteadOfEncoder.xml
@@ -1,6 +1,6 @@
<configuration>
- <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <appender name="LIOE" class="ch.qos.logback.core.FileAppender">
<file>target/test-output/layoutInsteadOfEncoder.log</file>
<append>true</append>
@@ -10,6 +10,6 @@
</appender>
<root level="debug">
- <appender-ref ref="FILE" />
+ <appender-ref ref="LIOE" />
</root>
</configuration>
\ No newline at end of file
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/encoder/LayoutInsteadOfEncoderTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/encoder/LayoutInsteadOfEncoderTest.java
index f19db29..250c601 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/encoder/LayoutInsteadOfEncoderTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/encoder/LayoutInsteadOfEncoderTest.java
@@ -1,14 +1,18 @@
package ch.qos.logback.classic.encoder;
import static ch.qos.logback.core.CoreConstants.CODES_URL;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
+import org.slf4j.Logger;
import ch.qos.logback.classic.ClassicTestConstants;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.FileAppender;
+import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.status.Status;
import ch.qos.logback.core.status.StatusChecker;
@@ -34,7 +38,14 @@ public class LayoutInsteadOfEncoderTest {
+ "compatibility/layoutInsteadOfEncoder.xml");
StatusPrinter.print(loggerContext);
StatusChecker checker = new StatusChecker(loggerContext);
- assertTrue(checker.containsMatch(Status.ERROR, "This appender no longer admits a layout as a sub-component"));
- assertTrue(checker.containsMatch(Status.ERROR, "See also "+CODES_URL+"#layoutInsteadOfEncoder for details"));
+ assertTrue(checker.containsMatch(Status.WARN, "This appender no longer admits a layout as a sub-component"));
+ assertTrue(checker.containsMatch(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());
+
+ LayoutWrappingEncoder<ILoggingEvent> lwe = (LayoutWrappingEncoder<ILoggingEvent>) fileAppender.getEncoder();
+
}
}
diff --git a/logback-core/src/main/java/ch/qos/logback/core/OutputStreamAppender.java b/logback-core/src/main/java/ch/qos/logback/core/OutputStreamAppender.java
index 373a917..0ba51b4 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/OutputStreamAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/OutputStreamAppender.java
@@ -13,13 +13,15 @@
*/
package ch.qos.logback.core;
+import static ch.qos.logback.core.CoreConstants.CODES_URL;
+
import java.io.IOException;
import java.io.OutputStream;
import ch.qos.logback.core.encoder.Encoder;
+import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
import ch.qos.logback.core.spi.DeferredProcessingAware;
import ch.qos.logback.core.status.ErrorStatus;
-import static ch.qos.logback.core.CoreConstants.CODES_URL;
/**
* OutputStreamAppender appends events to a {@link OutputStream}. This class
@@ -87,9 +89,14 @@ public class OutputStreamAppender<E> extends UnsynchronizedAppenderBase<E> {
}
}
- public void setLayout(Layout layout) {
- addError("This appender no longer admits a layout as a sub-component, set an encoder instead.");
- addError("See also "+CODES_URL+"#layoutInsteadOfEncoder for details");
+ 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;
}
@Override
@@ -223,5 +230,5 @@ public class OutputStreamAppender<E> extends UnsynchronizedAppenderBase<E> {
public void setEncoder(Encoder<E> encoder) {
this.encoder = encoder;
}
-
+
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java b/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java
index a4e5063..19c8afa 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java
@@ -32,7 +32,6 @@ import ch.qos.logback.core.encoder.NopEncoder;
import ch.qos.logback.core.layout.DummyLayout;
import ch.qos.logback.core.status.Status;
import ch.qos.logback.core.status.StatusChecker;
-import ch.qos.logback.core.util.StatusPrinter;
public class ConsoleAppenderTest extends AbstractAppenderTest<Object> {
diff --git a/logback-site/src/site/pages/codes.html b/logback-site/src/site/pages/codes.html
index 3ab510d..6ca3d07 100644
--- a/logback-site/src/site/pages/codes.html
+++ b/logback-site/src/site/pages/codes.html
@@ -59,17 +59,17 @@
<p>In practical terms, this means that configuration files need to
be changed</p>
- <p class="red bold">from (BAD)</p>
+ <p class="red bold">from (DEPRECATED)</p>
<pre class="prettyprint source"><appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
...
<layout class="ch.qos.logback.classic.PatternLayout">
- <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
+ <pattern>%msg%n</pattern>
</layout>
</appender> </pre>
- <p class="red bold">or the shorter equivalent (BAD)</p>
+ <p class="red bold">or the shorter equivalent (DEPRECATED)</p>
<pre class="prettyprint source"><appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
@@ -105,7 +105,11 @@
<p>We hope to make up for this inconvenience with cool new features
- which are only possible using encoders.</p>
+ which are only possible using encoders. <b>During a transition
+ period, layouts passed as parameter will be automatically wrapped by
+ an encoder so that configuration files in the old format (using a
+ layout instead of encoder) will continue to work unmodifed.</b>
+ </p>
<hr/>
diff --git a/logback-site/src/site/pages/news.html b/logback-site/src/site/pages/news.html
index 644d52a..912666c 100644
--- a/logback-site/src/site/pages/news.html
+++ b/logback-site/src/site/pages/news.html
@@ -53,7 +53,10 @@
href="codes.html#layoutInsteadOfEncoder"> modifications to
existing configuration files</a>. We hope to make up for this
inconvenience with cool new features which are only possible using
- encoders.
+ encoders. <b>During a transition period, layouts passed as
+ parameter will be automatically wrapped by an encoder so that
+ configuration files in the old format (using a layout instead of
+ encoder) will continue to work unmodifed.</b>
</p>
</div>
-----------------------------------------------------------------------
Summary of changes:
.../joran/compatibility/layoutInsteadOfEncoder.xml | 4 ++--
.../encoder/LayoutInsteadOfEncoderTest.java | 17 ++++++++++++++---
.../ch/qos/logback/core/OutputStreamAppender.java | 17 ++++++++++++-----
.../logback/core/appender/ConsoleAppenderTest.java | 1 -
logback-site/src/site/pages/codes.html | 12 ++++++++----
logback-site/src/site/pages/news.html | 5 ++++-
6 files changed, 40 insertions(+), 16 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-102-g0805c91
by git-noreply@pixie.qos.ch 19 Mar '10
by git-noreply@pixie.qos.ch 19 Mar '10
19 Mar '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via 0805c91cc85c6a36c38024e637f2aa2fe3b09a03 (commit)
via 13148e6ffc936dfafa2888c1bdb20f097494357e (commit)
via 35a2ffe580a13ad82f6798edf396ef9d5138e65b (commit)
via 2ff886bfdc0e731e8ed39e6da029c3c88d130b75 (commit)
via ffeda045d43d98eeb6bb420e87df9e726b9d34f7 (commit)
from 544292b758f9d296f581b6ec265fbeea954e6c6a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=0805c91cc85c6a36c38024e6…
http://github.com/ceki/logback/commit/0805c91cc85c6a36c38024e637f2aa2fe3b09…
commit 0805c91cc85c6a36c38024e637f2aa2fe3b09a03
Merge: 544292b 13148e6
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Fri Mar 19 13:48:09 2010 +0100
Merge branch 'dbname'
-----------------------------------------------------------------------
Summary of changes:
.gitignore | 4 +-
.../java/ch/qos/logback/classic/db/DBAppender.java | 39 +++++++------
.../java/ch/qos/logback/classic/db/SQLBuilder.java | 60 ++++++++++++++++++++
.../qos/logback/classic/db/names/ColumnName.java | 24 ++++++++
.../classic/db/names/CustomDBNameResolver.java | 52 +++++++++++++++++
.../logback/classic/db/names/DBNameResolver.java | 20 +++++++
.../classic/db/names/DefaultDBNameResolver.java | 30 ++++++++++
.../ch/qos/logback/classic/db/names/TableName.java | 13 ++++
8 files changed, 223 insertions(+), 19 deletions(-)
create mode 100644 logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java
create mode 100644 logback-classic/src/main/java/ch/qos/logback/classic/db/names/ColumnName.java
create mode 100644 logback-classic/src/main/java/ch/qos/logback/classic/db/names/CustomDBNameResolver.java
create mode 100644 logback-classic/src/main/java/ch/qos/logback/classic/db/names/DBNameResolver.java
create mode 100644 logback-classic/src/main/java/ch/qos/logback/classic/db/names/DefaultDBNameResolver.java
create mode 100644 logback-classic/src/main/java/ch/qos/logback/classic/db/names/TableName.java
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-97-g544292b
by git-noreply@pixie.qos.ch 19 Mar '10
by git-noreply@pixie.qos.ch 19 Mar '10
19 Mar '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, master has been updated
via 544292b758f9d296f581b6ec265fbeea954e6c6a (commit)
from ea6065ca315b78c7e0eb40d3fe85faec6441a834 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=544292b758f9d296f581b6ec…
http://github.com/ceki/logback/commit/544292b758f9d296f581b6ec265fbeea954e6…
commit 544292b758f9d296f581b6ec265fbeea954e6c6a
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Fri Mar 19 13:46:55 2010 +0100
- added req.requestURL to MDCInsertingServletFilter
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java b/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
index 492c8e4..12fedc5 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java
@@ -35,7 +35,8 @@ public class ClassicConstants {
public final static String REQUEST_REMOTE_HOST_MDC_KEY = "req.remoteHost";
public final static String REQUEST_USER_AGENT_MDC_KEY = "req.userAgent";
- public final static String REQUEST_REQUST_URI = "req.requestURI";
+ public final static String REQUEST_REQUEST_URI = "req.requestURI";
+ public final static String REQUEST_REQUEST_URL = "req.requestURL";
public final static String REQUEST_X_FORWARDED_FOR = "req.xForwardedFor";
}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java b/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java
index d9f25d6..5efae36 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/helpers/MDCInsertingServletFilter.java
@@ -31,8 +31,9 @@ import ch.qos.logback.classic.ClassicConstants;
* A servlet filter that inserts various values retrieved from the incoming http
* request into the MDC.
*
- * <p>The values are removed after the request is processed.
- *
+ * <p>
+ * The values are removed after the request is processed.
+ *
* @author Ceki Gülcü
*/
public class MDCInsertingServletFilter implements Filter {
@@ -57,11 +58,15 @@ public class MDCInsertingServletFilter implements Filter {
MDC.put(ClassicConstants.REQUEST_REMOTE_HOST_MDC_KEY, request
.getRemoteHost());
-
+
if (request instanceof HttpServletRequest) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
- MDC.put(ClassicConstants.REQUEST_REQUST_URI, httpServletRequest
+ MDC.put(ClassicConstants.REQUEST_REQUEST_URI, httpServletRequest
.getRequestURI());
+ StringBuffer requestURL = httpServletRequest.getRequestURL();
+ if (requestURL != null) {
+ MDC.put(ClassicConstants.REQUEST_REQUEST_URL, requestURL.toString());
+ }
MDC.put(ClassicConstants.REQUEST_USER_AGENT_MDC_KEY, httpServletRequest
.getHeader("User-Agent"));
MDC.put(ClassicConstants.REQUEST_X_FORWARDED_FOR, httpServletRequest
@@ -72,8 +77,11 @@ public class MDCInsertingServletFilter implements Filter {
void clearMDC() {
MDC.remove(ClassicConstants.REQUEST_REMOTE_HOST_MDC_KEY);
- MDC.remove(ClassicConstants.REQUEST_REQUST_URI);
+ MDC.remove(ClassicConstants.REQUEST_REQUEST_URI);
+ // removing possibly inexistent item is OK
+ MDC.remove(ClassicConstants.REQUEST_REQUEST_URL);
MDC.remove(ClassicConstants.REQUEST_USER_AGENT_MDC_KEY);
+ MDC.remove(ClassicConstants.REQUEST_X_FORWARDED_FOR);
}
public void init(FilterConfig arg0) throws ServletException {
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/util/LogbackMDCAdapter.java b/logback-classic/src/main/java/ch/qos/logback/classic/util/LogbackMDCAdapter.java
index 9af2532..2c4f807 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/util/LogbackMDCAdapter.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/util/LogbackMDCAdapter.java
@@ -19,14 +19,16 @@ import java.util.Set;
import org.slf4j.spi.MDCAdapter;
-
/**
- * A <em>Mapped Diagnostic Context</em>, or MDC in short, is an instrument
- * for distinguishing interleaved log output from different sources. Log output
- * is typically interleaved when a server handles multiple clients
- * near-simultaneously. <p> <b><em>The MDC is managed on a per thread basis</em></b>.
- * A child thread automatically inherits a <em>copy</em> of the mapped
- * diagnostic context of its parent. <p>
+ * A <em>Mapped Diagnostic Context</em>, or MDC in short, is an instrument for
+ * distinguishing interleaved log output from different sources. Log output is
+ * typically interleaved when a server handles multiple clients
+ * near-simultaneously.
+ * <p>
+ * <b><em>The MDC is managed on a per thread basis</em></b>. A child thread
+ * automatically inherits a <em>copy</em> of the mapped diagnostic context of
+ * its parent.
+ * <p>
*
* For more information about MDC, please refer to the online manual at
* http://logback.qos.ch/manual/mdc.html
@@ -44,20 +46,22 @@ public class LogbackMDCAdapter implements MDCAdapter {
}
/**
- * Put a context value (the <code>val</code> parameter) as identified with
- * the <code>key</code> parameter into the current thread's context map.
- * Note that contrary to log4j, the <code>val</code> parameter can be null.
+ * Put a context value (the <code>val</code> parameter) as identified with the
+ * <code>key</code> parameter into the current thread's context map. Note that
+ * contrary to log4j, the <code>val</code> parameter can be null.
*
- * <p> If the current thread does not have a context map it is created as a
- * side effect of this call.
+ * <p>
+ * If the current thread does not have a context map it is created as a side
+ * effect of this call.
*
- * <p> Each time a value is added, a new instance of the map is created. This
- * is to be certain that the serialization process will operate on the updated
+ * <p>
+ * Each time a value is added, a new instance of the map is created. This is
+ * to be certain that the serialization process will operate on the updated
* map and not send a reference to the old map, thus not allowing the remote
* logback component to see the latest changes.
*
* @throws IllegalArgumentException
- * in case the "key" parameter is null
+ * in case the "key" parameter is null
*/
public void put(String key, String val) throws IllegalArgumentException {
if (key == null) {
@@ -78,7 +82,8 @@ public class LogbackMDCAdapter implements MDCAdapter {
/**
* Get the context identified by the <code>key</code> parameter.
*
- * <p> This method has no side effects.
+ * <p>
+ * This method has no side effects.
*/
public String get(String key) {
HashMap<String, String> hashMap = copyOnInheritThreadLocal.get();
@@ -93,12 +98,16 @@ public class LogbackMDCAdapter implements MDCAdapter {
/**
* Remove the the context identified by the <code>key</code> parameter.
*
- * <p> Each time a value is removed, a new instance of the map is created.
- * This is to be certain that the serialization process will operate on the
- * updated map and not send a reference to the old map, thus not allowing the
- * remote logback component to see the latest changes.
+ * <p>
+ * Each time a value is removed, a new instance of the map is created. This is
+ * to be certain that the serialization process will operate on the updated
+ * map and not send a reference to the old map, thus not allowing the remote
+ * logback component to see the latest changes.
*/
public void remove(String key) {
+ if(key == null) {
+ return;
+ }
HashMap<String, String> oldMap = copyOnInheritThreadLocal.get();
HashMap<String, String> newMap = new HashMap<String, String>();
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/util/LogbackMDCAdapterTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/util/LogbackMDCAdapterTest.java
index 24dc122..a88d9d0 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/util/LogbackMDCAdapterTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/util/LogbackMDCAdapterTest.java
@@ -51,6 +51,18 @@ public class LogbackMDCAdapterTest {
assertNull(childThread.childHM);
}
+ @Test
+ public void removeForNullKey() {
+ LogbackMDCAdapter lma = new LogbackMDCAdapter();
+ lma.remove(null);
+ }
+
+ @Test
+ public void removeInexistnetKey() {
+ LogbackMDCAdapter lma = new LogbackMDCAdapter();
+ lma.remove("abcdlw0");
+ }
+
class ChildThreadForMDCAdapter extends Thread {
LogbackMDCAdapter logbackMDCAdapter;
diff --git a/logback-site/src/site/pages/index.html b/logback-site/src/site/pages/index.html
index f9942ce..0cd8ee0 100644
--- a/logback-site/src/site/pages/index.html
+++ b/logback-site/src/site/pages/index.html
@@ -56,14 +56,21 @@
</p>
- <h3>Select projects known to rely on logback</h3>
+ <h3>Projects known to rely on logback</h3>
- <ul>
+ <p>Here is a non-exhaustive list of projects known to depend on
+ logback, in alphabetical order:
+ </p>
+
+ <ul>
<li><a href="http://www.jfrog.org/products.php">Artifactory</a></li>
<li><a href="http://www.geomajas.org/">Geomajas</a></li>
+ <li><a href="http://jmxmonitor.sourceforge.net/">jmxmonitor</a></li>
+
+
<li><a href="http://code.google.com/p/openmeetings/">OpenMeetings</a></li>
<li><a href="http://liftweb.net/">Lift</a></li>
diff --git a/logback-site/src/site/pages/manual/mdc.html b/logback-site/src/site/pages/manual/mdc.html
index 6cdfc59..9cf843b 100644
--- a/logback-site/src/site/pages/manual/mdc.html
+++ b/logback-site/src/site/pages/manual/mdc.html
@@ -678,6 +678,15 @@ public class UserServletFilter implements Filter {
</tr>
<tr >
+ <td><code>req.requestURL</code></td>
+ <td>
+ as returned by <a
+ href="http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServle…">getRequestURL()</a>
+ method
+ </td>
+ </tr>
+
+ <tr class="alt">
<td><code>req.userAgent</code></td>
<td>value of the "User-Agent" header
</td>
-----------------------------------------------------------------------
Summary of changes:
.../ch/qos/logback/classic/ClassicConstants.java | 3 +-
.../classic/helpers/MDCInsertingServletFilter.java | 18 +++++--
.../logback/classic/util/LogbackMDCAdapter.java | 49 ++++++++++++--------
.../classic/util/LogbackMDCAdapterTest.java | 12 +++++
logback-site/src/site/pages/index.html | 11 ++++-
logback-site/src/site/pages/manual/mdc.html | 9 ++++
6 files changed, 74 insertions(+), 28 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, dbname, created. v0.9.18-100-g13148e6
by git-noreply@pixie.qos.ch 18 Mar '10
by git-noreply@pixie.qos.ch 18 Mar '10
18 Mar '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, dbname has been created
at 13148e6ffc936dfafa2888c1bdb20f097494357e (commit)
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=13148e6ffc936dfafa2888c1…
http://github.com/ceki/logback/commit/13148e6ffc936dfafa2888c1bdb20f0974943…
commit 13148e6ffc936dfafa2888c1bdb20f097494357e
Merge: ea6065c 35a2ffe
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Thu Mar 18 23:54:24 2010 +0100
- Merge branch 'master' of http://github.com/nurkiewicz/logback into dbname
- plus ceki's simplifications
diff --cc logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java
index 0000000,9c197a0..1390237
mode 000000,100644..100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java
@@@ -1,0 -1,47 +1,60 @@@
++/**
++ * Logback: the reliable, generic, fast and flexible logging framework.
++ * Copyright (C) 1999-2010, QOS.ch. All rights reserved.
++ *
++ * This program and the accompanying materials are dual-licensed under either
++ * the terms of the Eclipse Public License v1.0 as published by the Eclipse
++ * Foundation
++ *
++ * or (per the licensee's choosing)
++ *
++ * under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ */
+ package ch.qos.logback.classic.db;
+
+ import ch.qos.logback.classic.db.names.*;
+
+ /**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-16
+ */
+ public class SQLBuilder {
+
+ static String buildInsertPropertiesSQL(DBNameResolver dbNameResolver) {
+ StringBuilder sqlBuilder = new StringBuilder("INSERT INTO ");
+ sqlBuilder.append(dbNameResolver.getTableName(TableName.LOGGING_EVENT_PROPERTY)).append(" (");
- sqlBuilder.append(dbNameResolver.getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName.EVENT_ID)).append(",");
- sqlBuilder.append(dbNameResolver.getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName.MAPPED_KEY)).append(",");
- sqlBuilder.append(dbNameResolver.getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName.MAPPED_VALUE)).append(") ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.EVENT_ID)).append(",");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.MAPPED_KEY)).append(",");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.MAPPED_VALUE)).append(") ");
+ sqlBuilder.append("VALUES (?, ?, ?)");
+ return sqlBuilder.toString();
+ }
+
+ static String buildInsertExceptionSQL(DBNameResolver dbNameResolver) {
+ StringBuilder sqlBuilder = new StringBuilder("INSERT INTO ");
+ sqlBuilder.append(dbNameResolver.getTableName(TableName.LOGGING_EVENT_EXCEPTION)).append(" (");
- sqlBuilder.append(dbNameResolver.getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName.EVENT_ID)).append(",");
- sqlBuilder.append(dbNameResolver.getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName.I)).append(",");
- sqlBuilder.append(dbNameResolver.getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName.TRACE_LINE)).append(") ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.EVENT_ID)).append(",");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.I)).append(",");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.TRACE_LINE)).append(") ");
+ sqlBuilder.append("VALUES (?, ?, ?)");
+ return sqlBuilder.toString();
+ }
+
+ static String buildInsertSQL(DBNameResolver dbNameResolver) {
+ StringBuilder sqlBuilder = new StringBuilder("INSERT INTO ");
+ sqlBuilder.append(dbNameResolver.getTableName(TableName.LOGGING_EVENT)).append(" (");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.TIMESTMP)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.FORMATTED_MESSAGE)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.LOGGER_NAME)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.LEVEL_STRING)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.THREAD_NAME)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.REFERENCE_FLAG)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_FILENAME)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_CLASS)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_METHOD)).append(", ");
- sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_LINE)).append(") ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.TIMESTMP)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.FORMATTED_MESSAGE)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.LOGGER_NAME)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.LEVEL_STRING)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.THREAD_NAME)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.REFERENCE_FLAG)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_FILENAME)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_CLASS)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_METHOD)).append(", ");
++ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_LINE)).append(") ");
+ sqlBuilder.append(" VALUES (?, ?, ? ,?, ?, ?, ?, ?, ?, ?)");
+ return sqlBuilder.toString();
+ }
+ }
diff --cc logback-classic/src/main/java/ch/qos/logback/classic/db/names/ColumnName.java
index 0000000,0000000..2717331
new file mode 100644
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/ColumnName.java
@@@ -1,0 -1,0 +1,24 @@@
++package ch.qos.logback.classic.db.names;
++
++public enum ColumnName {
++
++ EVENT_ID,
++
++ TIMESTMP,
++ FORMATTED_MESSAGE,
++ LOGGER_NAME,
++ LEVEL_STRING,
++ THREAD_NAME,
++ REFERENCE_FLAG,
++ CALLER_FILENAME,
++ CALLER_CLASS,
++ CALLER_METHOD,
++ CALLER_LINE,
++
++ // MDC
++ MAPPED_KEY,
++ MAPPED_VALUE,
++
++ I,
++ TRACE_LINE;
++}
diff --cc logback-classic/src/main/java/ch/qos/logback/classic/db/names/CustomDBNameResolver.java
index 0000000,0880aa5..e0578f9
mode 000000,100644..100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/CustomDBNameResolver.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/CustomDBNameResolver.java
@@@ -1,0 -1,118 +1,52 @@@
++/**
++ * Logback: the reliable, generic, fast and flexible logging framework.
++ * Copyright (C) 1999-2010, QOS.ch. All rights reserved.
++ *
++ * This program and the accompanying materials are dual-licensed under either
++ * the terms of the Eclipse Public License v1.0 as published by the Eclipse
++ * Foundation
++ *
++ * or (per the licensee's choosing)
++ *
++ * under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ */
+ package ch.qos.logback.classic.db.names;
+
-import java.util.EnumMap;
++import java.util.HashMap;
+ import java.util.Map;
+
+ /**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-16
+ */
+ public class CustomDBNameResolver implements DBNameResolver {
+
+ private final DBNameResolver defaultDbNameResolver = new DefaultDBNameResolver();
- private final Map<TableName, String> tableNameOverrides = new EnumMap<TableName, String>(TableName.class);
- private final Map<LoggingEventColumnName, String> leColumnNameOverrides = new EnumMap<LoggingEventColumnName, String>(LoggingEventColumnName.class);
- private final Map<LoggingEventPropertyColumnName, String> lePropertyColumnNameOverrides = new EnumMap<LoggingEventPropertyColumnName, String>(LoggingEventPropertyColumnName.class);
- private final Map<LoggingEventExceptionColumnName, String> leExceptionColumnNameOverrides = new EnumMap<LoggingEventExceptionColumnName, String>(LoggingEventExceptionColumnName.class);
-
- public String getTableName(TableName tableName) {
++ private final Map<String, String> tableNameOverrides = new HashMap<String, String>();
++ private final Map<String, String> columnNameOverrides = new HashMap<String, String>();
++
++ public <N extends Enum<?>> String getTableName(N tableName) {
+ if (tableNameOverrides.get(tableName) != null)
+ return tableNameOverrides.get(tableName);
+ return defaultDbNameResolver.getTableName(tableName);
+ }
+
- public String getLoggingEventColumnName(LoggingEventColumnName columnName) {
- if (leColumnNameOverrides.get(columnName) != null)
- return leColumnNameOverrides.get(columnName);
- return defaultDbNameResolver.getLoggingEventColumnName(columnName);
++ public <N extends Enum<?>> String getColumnName(N columnName) {
++ if (columnNameOverrides.get(columnName) != null)
++ return columnNameOverrides.get(columnName);
++ return defaultDbNameResolver.getColumnName(columnName);
+ }
-
- public String getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName columnName) {
- if (lePropertyColumnNameOverrides.get(columnName) != null)
- return lePropertyColumnNameOverrides.get(columnName);
- return defaultDbNameResolver.getLoggingEventPropertyColumnName(columnName);
++
++
++ public void overrideTableName(String reference, String name) {
++ tableNameOverrides.put(reference, name);
+ }
-
- public String getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName columnName) {
- if (leExceptionColumnNameOverrides.get(columnName) != null)
- return leExceptionColumnNameOverrides.get(columnName);
- return defaultDbNameResolver.getLoggingEventExceptionColumnName(columnName);
++ public void overrideColumnName(String reference, String name) {
++ columnNameOverrides.put(reference, name);
+ }
+
- public void setLoggingEventTableName(String tableName) {
- tableNameOverrides.put(TableName.LOGGING_EVENT, tableName);
- }
+
- public void setLoggingEventPropertyTableName(String tableName) {
- tableNameOverrides.put(TableName.LOGGING_EVENT_PROPERTY, tableName);
- }
-
- public void setLoggingEventExceptionTableName(String tableName) {
- tableNameOverrides.put(TableName.LOGGING_EVENT_EXCEPTION, tableName);
- }
-
- public void setLoggingEventTimestmpColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.TIMESTMP, columnName);
- }
-
- public void setLoggingEventFormattedMessageColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.FORMATTED_MESSAGE, columnName);
- }
-
- public void setLoggingEventLoggerNameColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.LOGGER_NAME, columnName);
- }
-
- public void setLoggingEventLevelStringColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.LEVEL_STRING, columnName);
- }
-
- public void setLoggingEventThreadNameColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.THREAD_NAME, columnName);
- }
-
- public void setLoggingEventReferenceFlagColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.REFERENCE_FLAG, columnName);
- }
-
- public void setLoggingEventCallerFilenameColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.CALLER_FILENAME, columnName);
- }
-
- public void setLoggingEventCallerClassColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.CALLER_CLASS, columnName);
- }
-
- public void setLoggingEventCallerMethodColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.CALLER_METHOD, columnName);
- }
-
- public void setLoggingEventCallerLineColumnName(String columnName) {
- leColumnNameOverrides.put(LoggingEventColumnName.CALLER_LINE, columnName);
- }
-
- public void setLoggingEventPropertyEventIdColumnName(String columnName) {
- lePropertyColumnNameOverrides.put(LoggingEventPropertyColumnName.EVENT_ID, columnName);
- }
-
- public void setMappedKeyColumnName(String columnName) {
- lePropertyColumnNameOverrides.put(LoggingEventPropertyColumnName.MAPPED_KEY, columnName);
- }
-
- public void setMappedValueColumnName(String columnName) {
- lePropertyColumnNameOverrides.put(LoggingEventPropertyColumnName.MAPPED_VALUE, columnName);
- }
-
- public void setLoggingEventExceptionEventIdColumnName(String columnName) {
- leExceptionColumnNameOverrides.put(LoggingEventExceptionColumnName.EVENT_ID, columnName);
- }
-
- public void setLoggingEventExceptionIColumnName(String columnName) {
- leExceptionColumnNameOverrides.put(LoggingEventExceptionColumnName.I, columnName);
- }
-
- public void setLoggingEventExceptionTraceLineColumnName(String columnName) {
- leExceptionColumnNameOverrides.put(LoggingEventExceptionColumnName.TRACE_LINE, columnName);
- }
++
+
+ }
diff --cc logback-classic/src/main/java/ch/qos/logback/classic/db/names/DBNameResolver.java
index 0000000,2647b00..e715fb5
mode 000000,100644..100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DBNameResolver.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DBNameResolver.java
@@@ -1,0 -1,13 +1,20 @@@
++/**
++ * Logback: the reliable, generic, fast and flexible logging framework.
++ * Copyright (C) 1999-2010, QOS.ch. All rights reserved.
++ *
++ * This program and the accompanying materials are dual-licensed under either
++ * the terms of the Eclipse Public License v1.0 as published by the Eclipse
++ * Foundation
++ *
++ * or (per the licensee's choosing)
++ *
++ * under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ */
+ package ch.qos.logback.classic.db.names;
+
+ public interface DBNameResolver {
+
- String getTableName(TableName tableName);
-
- String getLoggingEventColumnName(LoggingEventColumnName columnName);
-
- String getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName columnName);
-
- String getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName columnName);
-
++ <N extends Enum<?>> String getTableName(N tableName);
++ <N extends Enum<?>> String getColumnName(N columnName);
+ }
diff --cc logback-classic/src/main/java/ch/qos/logback/classic/db/names/DefaultDBNameResolver.java
index 0000000,fbf17cb..db88a52
mode 000000,100644..100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DefaultDBNameResolver.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DefaultDBNameResolver.java
@@@ -1,0 -1,23 +1,30 @@@
++/**
++ * Logback: the reliable, generic, fast and flexible logging framework.
++ * Copyright (C) 1999-2010, QOS.ch. All rights reserved.
++ *
++ * This program and the accompanying materials are dual-licensed under either
++ * the terms of the Eclipse Public License v1.0 as published by the Eclipse
++ * Foundation
++ *
++ * or (per the licensee's choosing)
++ *
++ * under the terms of the GNU Lesser General Public License version 2.1 as
++ * published by the Free Software Foundation.
++ */
+ package ch.qos.logback.classic.db.names;
+
+ /**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-16
+ */
+ public class DefaultDBNameResolver implements DBNameResolver {
- public String getTableName(TableName tableName) {
- return tableName.name().toLowerCase();
- }
+
- public String getLoggingEventColumnName(LoggingEventColumnName columnName) {
- return columnName.name().toLowerCase();
++ public <N extends Enum<?>> String getTableName(N tableName) {
++ return tableName.toString();
+ }
+
- public String getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName columnName) {
- return columnName.name().toLowerCase();
++ public <N extends Enum<?>> String getColumnName(N columnName) {
++ return columnName.toString();
+ }
+
- public String getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName columnName) {
- return columnName.name().toLowerCase();
- }
+ }
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=35a2ffe580a13ad82f6798ed…
http://github.com/ceki/logback/commit/35a2ffe580a13ad82f6798edf396ef9d5138e…
commit 35a2ffe580a13ad82f6798edf396ef9d5138e65b
Merge: 2ff886b fd195dc
Author: Tomasz Nurkiewicz <nurkiewicz(a)gmail.com>
Date: Wed Mar 17 00:04:16 2010 +0100
Merge branch 'master' of git://github.com/ceki/logback
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=2ff886bfdc0e731e8ed39e6d…
http://github.com/ceki/logback/commit/2ff886bfdc0e731e8ed39e6da029c3c88d130…
commit 2ff886bfdc0e731e8ed39e6da029c3c88d130b75
Author: Tomasz Nurkiewicz <nurkiewicz(a)gmail.com>
Date: Tue Mar 16 23:54:25 2010 +0100
[LBCLASSIC-188] Make table and column names overridable
* default implementation
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java
index c4ecaa8..e055c5b 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java
@@ -22,6 +22,8 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import ch.qos.logback.classic.db.names.DBNameResolver;
+import ch.qos.logback.classic.db.names.DefaultDBNameResolver;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.StackTraceElementProxy;
import ch.qos.logback.core.db.DBAppenderBase;
@@ -38,27 +40,14 @@ import ch.qos.logback.core.db.DBAppenderBase;
* @author Sébastien Pennec
*/
public class DBAppender extends DBAppenderBase<ILoggingEvent> {
- protected final String insertPropertiesSQL = "INSERT INTO logging_event_property (event_id, mapped_key, mapped_value) VALUES (?, ?, ?)";
- protected final String insertExceptionSQL = "INSERT INTO logging_event_exception (event_id, i, trace_line) VALUES (?, ?, ?)";
- protected static final String insertSQL;
+ protected String insertPropertiesSQL;
+ protected String insertExceptionSQL;
+ protected String insertSQL;
protected static final Method GET_GENERATED_KEYS_METHOD;
+ private DBNameResolver dbNameResolver;
+
static {
- StringBuffer sql = new StringBuffer();
- sql.append("INSERT INTO logging_event (");
- sql.append("timestmp, ");
- sql.append("formatted_message, ");
- sql.append("logger_name, ");
- sql.append("level_string, ");
- sql.append("thread_name, ");
- sql.append("reference_flag, ");
- sql.append("caller_filename, ");
- sql.append("caller_class, ");
- sql.append("caller_method, ");
- sql.append("caller_line) ");
- sql.append(" VALUES (?, ?, ? ,?, ?, ?, ?, ?, ?,?)");
- insertSQL = sql.toString();
-
// PreparedStatement.getGeneratedKeys() method was added in JDK 1.4
Method getGeneratedKeysMethod;
try {
@@ -74,6 +63,20 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
public DBAppender() {
}
+ public void setDbNameResolver(DBNameResolver dbNameResolver) {
+ this.dbNameResolver = dbNameResolver;
+ }
+
+ @Override
+ public void start() {
+ if(dbNameResolver == null)
+ dbNameResolver = new DefaultDBNameResolver();
+ insertExceptionSQL = SQLBuilder.buildInsertExceptionSQL(dbNameResolver);
+ insertPropertiesSQL = SQLBuilder.buildInsertPropertiesSQL(dbNameResolver);
+ insertSQL = SQLBuilder.buildInsertSQL(dbNameResolver);
+ super.start();
+ }
+
@Override
protected void subAppend(Object eventObject, Connection connection,
PreparedStatement insertStatement) throws Throwable {
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java
new file mode 100644
index 0000000..9c197a0
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java
@@ -0,0 +1,47 @@
+package ch.qos.logback.classic.db;
+
+import ch.qos.logback.classic.db.names.*;
+
+/**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-16
+ */
+public class SQLBuilder {
+
+ static String buildInsertPropertiesSQL(DBNameResolver dbNameResolver) {
+ StringBuilder sqlBuilder = new StringBuilder("INSERT INTO ");
+ sqlBuilder.append(dbNameResolver.getTableName(TableName.LOGGING_EVENT_PROPERTY)).append(" (");
+ sqlBuilder.append(dbNameResolver.getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName.EVENT_ID)).append(",");
+ sqlBuilder.append(dbNameResolver.getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName.MAPPED_KEY)).append(",");
+ sqlBuilder.append(dbNameResolver.getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName.MAPPED_VALUE)).append(") ");
+ sqlBuilder.append("VALUES (?, ?, ?)");
+ return sqlBuilder.toString();
+ }
+
+ static String buildInsertExceptionSQL(DBNameResolver dbNameResolver) {
+ StringBuilder sqlBuilder = new StringBuilder("INSERT INTO ");
+ sqlBuilder.append(dbNameResolver.getTableName(TableName.LOGGING_EVENT_EXCEPTION)).append(" (");
+ sqlBuilder.append(dbNameResolver.getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName.EVENT_ID)).append(",");
+ sqlBuilder.append(dbNameResolver.getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName.I)).append(",");
+ sqlBuilder.append(dbNameResolver.getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName.TRACE_LINE)).append(") ");
+ sqlBuilder.append("VALUES (?, ?, ?)");
+ return sqlBuilder.toString();
+ }
+
+ static String buildInsertSQL(DBNameResolver dbNameResolver) {
+ StringBuilder sqlBuilder = new StringBuilder("INSERT INTO ");
+ sqlBuilder.append(dbNameResolver.getTableName(TableName.LOGGING_EVENT)).append(" (");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.TIMESTMP)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.FORMATTED_MESSAGE)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.LOGGER_NAME)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.LEVEL_STRING)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.THREAD_NAME)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.REFERENCE_FLAG)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_FILENAME)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_CLASS)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_METHOD)).append(", ");
+ sqlBuilder.append(dbNameResolver.getLoggingEventColumnName(LoggingEventColumnName.CALLER_LINE)).append(") ");
+ sqlBuilder.append(" VALUES (?, ?, ? ,?, ?, ?, ?, ?, ?, ?)");
+ return sqlBuilder.toString();
+ }
+}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/CustomDBNameResolver.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/CustomDBNameResolver.java
new file mode 100644
index 0000000..0880aa5
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/CustomDBNameResolver.java
@@ -0,0 +1,118 @@
+package ch.qos.logback.classic.db.names;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+/**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-16
+ */
+public class CustomDBNameResolver implements DBNameResolver {
+
+ private final DBNameResolver defaultDbNameResolver = new DefaultDBNameResolver();
+ private final Map<TableName, String> tableNameOverrides = new EnumMap<TableName, String>(TableName.class);
+ private final Map<LoggingEventColumnName, String> leColumnNameOverrides = new EnumMap<LoggingEventColumnName, String>(LoggingEventColumnName.class);
+ private final Map<LoggingEventPropertyColumnName, String> lePropertyColumnNameOverrides = new EnumMap<LoggingEventPropertyColumnName, String>(LoggingEventPropertyColumnName.class);
+ private final Map<LoggingEventExceptionColumnName, String> leExceptionColumnNameOverrides = new EnumMap<LoggingEventExceptionColumnName, String>(LoggingEventExceptionColumnName.class);
+
+ public String getTableName(TableName tableName) {
+ if (tableNameOverrides.get(tableName) != null)
+ return tableNameOverrides.get(tableName);
+ return defaultDbNameResolver.getTableName(tableName);
+ }
+
+ public String getLoggingEventColumnName(LoggingEventColumnName columnName) {
+ if (leColumnNameOverrides.get(columnName) != null)
+ return leColumnNameOverrides.get(columnName);
+ return defaultDbNameResolver.getLoggingEventColumnName(columnName);
+ }
+
+ public String getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName columnName) {
+ if (lePropertyColumnNameOverrides.get(columnName) != null)
+ return lePropertyColumnNameOverrides.get(columnName);
+ return defaultDbNameResolver.getLoggingEventPropertyColumnName(columnName);
+ }
+
+ public String getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName columnName) {
+ if (leExceptionColumnNameOverrides.get(columnName) != null)
+ return leExceptionColumnNameOverrides.get(columnName);
+ return defaultDbNameResolver.getLoggingEventExceptionColumnName(columnName);
+ }
+
+ public void setLoggingEventTableName(String tableName) {
+ tableNameOverrides.put(TableName.LOGGING_EVENT, tableName);
+ }
+
+ public void setLoggingEventPropertyTableName(String tableName) {
+ tableNameOverrides.put(TableName.LOGGING_EVENT_PROPERTY, tableName);
+ }
+
+ public void setLoggingEventExceptionTableName(String tableName) {
+ tableNameOverrides.put(TableName.LOGGING_EVENT_EXCEPTION, tableName);
+ }
+
+ public void setLoggingEventTimestmpColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.TIMESTMP, columnName);
+ }
+
+ public void setLoggingEventFormattedMessageColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.FORMATTED_MESSAGE, columnName);
+ }
+
+ public void setLoggingEventLoggerNameColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.LOGGER_NAME, columnName);
+ }
+
+ public void setLoggingEventLevelStringColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.LEVEL_STRING, columnName);
+ }
+
+ public void setLoggingEventThreadNameColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.THREAD_NAME, columnName);
+ }
+
+ public void setLoggingEventReferenceFlagColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.REFERENCE_FLAG, columnName);
+ }
+
+ public void setLoggingEventCallerFilenameColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.CALLER_FILENAME, columnName);
+ }
+
+ public void setLoggingEventCallerClassColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.CALLER_CLASS, columnName);
+ }
+
+ public void setLoggingEventCallerMethodColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.CALLER_METHOD, columnName);
+ }
+
+ public void setLoggingEventCallerLineColumnName(String columnName) {
+ leColumnNameOverrides.put(LoggingEventColumnName.CALLER_LINE, columnName);
+ }
+
+ public void setLoggingEventPropertyEventIdColumnName(String columnName) {
+ lePropertyColumnNameOverrides.put(LoggingEventPropertyColumnName.EVENT_ID, columnName);
+ }
+
+ public void setMappedKeyColumnName(String columnName) {
+ lePropertyColumnNameOverrides.put(LoggingEventPropertyColumnName.MAPPED_KEY, columnName);
+ }
+
+ public void setMappedValueColumnName(String columnName) {
+ lePropertyColumnNameOverrides.put(LoggingEventPropertyColumnName.MAPPED_VALUE, columnName);
+ }
+
+ public void setLoggingEventExceptionEventIdColumnName(String columnName) {
+ leExceptionColumnNameOverrides.put(LoggingEventExceptionColumnName.EVENT_ID, columnName);
+ }
+
+ public void setLoggingEventExceptionIColumnName(String columnName) {
+ leExceptionColumnNameOverrides.put(LoggingEventExceptionColumnName.I, columnName);
+ }
+
+ public void setLoggingEventExceptionTraceLineColumnName(String columnName) {
+ leExceptionColumnNameOverrides.put(LoggingEventExceptionColumnName.TRACE_LINE, columnName);
+ }
+
+}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DBNameResolver.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DBNameResolver.java
new file mode 100644
index 0000000..2647b00
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DBNameResolver.java
@@ -0,0 +1,13 @@
+package ch.qos.logback.classic.db.names;
+
+public interface DBNameResolver {
+
+ String getTableName(TableName tableName);
+
+ String getLoggingEventColumnName(LoggingEventColumnName columnName);
+
+ String getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName columnName);
+
+ String getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName columnName);
+
+}
\ No newline at end of file
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DefaultDBNameResolver.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DefaultDBNameResolver.java
new file mode 100644
index 0000000..fbf17cb
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/DefaultDBNameResolver.java
@@ -0,0 +1,23 @@
+package ch.qos.logback.classic.db.names;
+
+/**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-16
+ */
+public class DefaultDBNameResolver implements DBNameResolver {
+ public String getTableName(TableName tableName) {
+ return tableName.name().toLowerCase();
+ }
+
+ public String getLoggingEventColumnName(LoggingEventColumnName columnName) {
+ return columnName.name().toLowerCase();
+ }
+
+ public String getLoggingEventPropertyColumnName(LoggingEventPropertyColumnName columnName) {
+ return columnName.name().toLowerCase();
+ }
+
+ public String getLoggingEventExceptionColumnName(LoggingEventExceptionColumnName columnName) {
+ return columnName.name().toLowerCase();
+ }
+}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventColumnName.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventColumnName.java
new file mode 100644
index 0000000..bc25465
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventColumnName.java
@@ -0,0 +1,20 @@
+package ch.qos.logback.classic.db.names;
+
+/**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-15
+ */
+public enum LoggingEventColumnName {
+
+ TIMESTMP,
+ FORMATTED_MESSAGE,
+ LOGGER_NAME,
+ LEVEL_STRING,
+ THREAD_NAME,
+ REFERENCE_FLAG,
+ CALLER_FILENAME,
+ CALLER_CLASS,
+ CALLER_METHOD,
+ CALLER_LINE
+
+}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventExceptionColumnName.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventExceptionColumnName.java
new file mode 100644
index 0000000..2e12f1c
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventExceptionColumnName.java
@@ -0,0 +1,13 @@
+package ch.qos.logback.classic.db.names;
+
+/**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-15
+ */
+public enum LoggingEventExceptionColumnName {
+
+ EVENT_ID,
+ I,
+ TRACE_LINE
+
+}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventPropertyColumnName.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventPropertyColumnName.java
new file mode 100644
index 0000000..f123e2d
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/LoggingEventPropertyColumnName.java
@@ -0,0 +1,13 @@
+package ch.qos.logback.classic.db.names;
+
+/**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-15
+ */
+public enum LoggingEventPropertyColumnName {
+
+ EVENT_ID,
+ MAPPED_KEY,
+ MAPPED_VALUE
+
+}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/TableName.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/TableName.java
new file mode 100644
index 0000000..9995361
--- /dev/null
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/TableName.java
@@ -0,0 +1,13 @@
+package ch.qos.logback.classic.db.names;
+
+/**
+ * @author Tomasz Nurkiewicz
+ * @since 2010-03-15
+ */
+public enum TableName {
+
+ LOGGING_EVENT,
+ LOGGING_EVENT_PROPERTY,
+ LOGGING_EVENT_EXCEPTION
+
+}
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=ffeda045d43d98eeb6bb420e…
http://github.com/ceki/logback/commit/ffeda045d43d98eeb6bb420e87df9e726b9d3…
commit ffeda045d43d98eeb6bb420e87df9e726b9d34f7
Author: Tomasz Nurkiewicz <nurkiewicz(a)gmail.com>
Date: Mon Mar 15 23:48:11 2010 +0100
Ignore IntelliJ IDEA files
diff --git a/.gitignore b/.gitignore
index 6b74944..7e52e85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,6 @@
target
.classpath
.project
-*~
\ No newline at end of file
+.idea
+*~
+*.iml
\ No newline at end of file
-----------------------------------------------------------------------
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0