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
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-116-g6f85983
by git-noreply@pixie.qos.ch 24 Mar '10
by git-noreply@pixie.qos.ch 24 Mar '10
24 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 6f8598363daefc3139aa08f3c741e4eae284dc81 (commit)
from 1fd3f4ed5e26bd3ddff55f043a0729afc67efdc3 (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=6f8598363daefc3139aa08f3…
http://github.com/ceki/logback/commit/6f8598363daefc3139aa08f3c741e4eae284d…
commit 6f8598363daefc3139aa08f3c741e4eae284dc81
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Wed Mar 24 20:17:29 2010 +0100
minor edit
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 93c5868..dc0a58a 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
@@ -101,13 +101,15 @@ public class DBAppenderIntegrationTest {
Exception e = new Exception("Just testing", getCause());
logger.error("At last an error.", e);
+ StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
+
long lastEventId = getLastEventId();
verify(lastEventId);
// check that there were no errors
StatusChecker checker = new StatusChecker(lc);
assertTrue(checker.isErrorFree());
- StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
+
}
long getLastEventId() throws SQLException {
@@ -241,7 +243,7 @@ public class DBAppenderIntegrationTest {
if (!isConformingHostAndJDK16OrHigher(POSTGRES_CONFORMING_HOST_LIST)) {
return;
}
- System.out.println("doing test");
+ System.out.println("running postgres() test");
doTest("src/test/input/integration/db/postgresql-with-driver.xml");
}
-----------------------------------------------------------------------
Summary of changes:
.../classic/db/DBAppenderIntegrationTest.java | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
Deadlock with DBAppender
------------------------
Key: LBCLASSIC-148
URL: http://jira.qos.ch/browse/LBCLASSIC-148
Project: logback-classic
Issue Type: Bug
Affects Versions: 0.917
Environment: MacBook Pro 17"
Intel Core 2 Duo
2.33 GHz
OS X 10.5.7 (9J61)
java version "1.6.0_13"
slf4j 1.5.8
c3p0 0.9.1.2
Reporter: Mel T.
Assignee: Logback dev list
A deadlock occurs when running the attached application. For this lock to occur, we need to:
- load a configuration other than the default in java app.
- not have any default logback.xml in the classpath.
- have these jars in the classpath
c3p0-0.9.1.2.jar
logback-core-0.9.17.jar
logback-classic-0.9.17.jar
log4j-over-slf4j-1.5.8.jar
slf4j-api-1.5.8.jar
mysql.jar
- Place attached the logback2.xml file in the same package as the attached MainTest class.
- adapt the logback2.xml file to your DB schema. (note that you do not need to have the DB tables created for the lock to occur, but the test is more conclusive if you have a valid DB connection and schema.)
- Execute this
java -cp ".:../c3p0-0.9.1.2.jar:../logback-core-0.9.17.jar:../logback-classic-0.9.17.jar:../log4j-over-slf4j-1.5.8.jar:../slf4j-api-1.5.8.jar:../mysql.jar" MainTest
The application should output the logger status and hang.
Workaround:
- Do not include log4j-over-slf4j in the classpath,
- or add a default logback.xml that will be loaded first (just copy and rename logback2.xml in same default package)
- or use the attached logback2-works.xml instead of logback2.xml (modify MainTest to load that file instead.)
In this last one, the change is that the DB appender is only used in a logger element instead of the root.
I did not spend the time to look at the cause of this locking problem as the workarounds allow me to move on. So I hope this really belong in jira, and not a config/usage error on my part.
--
Mel T.
--
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
11
[JIRA] Created: (LBCLASSIC-187) Log request arguments should be placed in separate columns
by Ceki Gulcu (JIRA) 24 Mar '10
by Ceki Gulcu (JIRA) 24 Mar '10
24 Mar '10
Log request arguments should be placed in separate columns
----------------------------------------------------------
Key: LBCLASSIC-187
URL: http://jira.qos.ch/browse/LBCLASSIC-187
Project: logback-classic
Issue Type: Sub-task
Components: appender
Affects Versions: 0.9.18
Reporter: Ceki Gulcu
Assignee: Logback dev list
Originally reported by Greg Thomas:
http://jira.qos.ch/browse/LBCLASSIC-169?focusedCommentId=11565#action_11565
I'm not so much interested in table/column names, but what I would like to see is the ability to record the individual values for the placeholders in the log message.
If you're logging to a database, there's the possibility of running report on that database. Instead of having to parse out the data from the re-combined log message (e.g. "New call made; now 4 calls active"), it would be easier to record the value of arguments directly in the database. e.g. if you've configured it so that the first argument is stored in column arg1, and the second is stored in arg2, then the log entry
logger.info( "New call made; now {} calls active", activeCallCount );
could appear in the database as (ignoring the other columns for this example) ...
formatted_message: "New call made; now 4 calls active"
arg1: "4"
arg2: null
--
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
3
4
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-115-g1fd3f4e
by git-noreply@pixie.qos.ch 24 Mar '10
by git-noreply@pixie.qos.ch 24 Mar '10
24 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 1fd3f4ed5e26bd3ddff55f043a0729afc67efdc3 (commit)
from cc1540f6a907d3f366cc1acbafc6056824b89875 (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=1fd3f4ed5e26bd3ddff55f04…
http://github.com/ceki/logback/commit/1fd3f4ed5e26bd3ddff55f043a0729afc67ef…
commit 1fd3f4ed5e26bd3ddff55f043a0729afc67efdc3
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Wed Mar 24 19:50:33 2010 +0100
- fixed LBCLASSIC-187 by adding 4 new columns to the logging_event table
diff --git a/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java b/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java
index b8e3a25..e8b1057 100644
--- a/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java
+++ b/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java
@@ -70,9 +70,8 @@ public class DBAppender extends DBAppenderBase<AccessEvent> {
}
@Override
- protected void subAppend(Object eventObject, Connection connection,
+ protected void subAppend(AccessEvent event, Connection connection,
PreparedStatement insertStatement) throws Throwable {
- AccessEvent event = (AccessEvent) eventObject;
addAccessEvent(insertStatement, event);
@@ -80,9 +79,11 @@ public class DBAppender extends DBAppenderBase<AccessEvent> {
if (updateCount != 1) {
addWarn("Failed to insert access event");
}
-
+ }
+
+ protected void secondarySubAppend(AccessEvent event, Connection connection,
+ long eventId) throws Throwable {
if (insertHeaders) {
- long eventId = selectEventId(insertStatement, connection);
addRequestHeaders(event, connection, eventId);
}
}
diff --git a/logback-access/src/test/java/ch/qos/logback/access/db/DBAppenderTest.java b/logback-access/src/test/java/ch/qos/logback/access/db/DBAppenderTest.java
index 88c5aa2..fa8f90e 100644
--- a/logback-access/src/test/java/ch/qos/logback/access/db/DBAppenderTest.java
+++ b/logback-access/src/test/java/ch/qos/logback/access/db/DBAppenderTest.java
@@ -138,7 +138,7 @@ public class DBAppenderTest {
AccessEvent event = createAccessEvent();
appender.append(event);
-
+
Statement stmt = connectionSource.getConnection().createStatement();
ResultSet rs = null;
rs = stmt.executeQuery("SELECT * FROM access_event_header");
@@ -169,12 +169,15 @@ public class DBAppenderTest {
@Test
public void testAppendMultipleEvents() throws SQLException {
+ setInsertHeadersAndStart(false);
String uri = "testAppendMultipleEvents";
for (int i = 0; i < 10; i++) {
AccessEvent event = createAccessEvent(uri);
appender.append(event);
}
+ StatusPrinter.print(context);
+
Statement stmt = connectionSource.getConnection().createStatement();
ResultSet rs = null;
rs = stmt.executeQuery("SELECT * FROM access_event where requestURI='"+uri+"'");
diff --git a/logback-classic/doc/designDiscussion/LoggingEvent Serialization.odt b/logback-classic/doc/designDiscussion/LoggingEvent Serialization.odt
deleted file mode 100644
index 993ee65..0000000
Binary files a/logback-classic/doc/designDiscussion/LoggingEvent Serialization.odt and /dev/null differ
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 b0c298a..0bbc74e 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
@@ -50,6 +50,22 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
private DBNameResolver dbNameResolver;
+ static final int TIMESTMP_INDEX = 1;
+ static final int FORMATTED_MESSAGE_INDEX = 2;
+ static final int LOGGER_NAME_INDEX = 3;
+ static final int LEVEL_STRING_INDEX = 4;
+ static final int THREAD_NAME_INDEX = 5;
+ static final int REFERENCE_FLAG_INDEX = 6;
+ static final int ARG0_INDEX = 7;
+ static final int ARG1_INDEX = 8;
+ static final int ARG2_INDEX = 9;
+ static final int ARG3_INDEX = 10;
+ static final int CALLER_FILENAME_INDEX = 11;
+ static final int CALLER_CLASS_INDEX = 12;
+ static final int CALLER_METHOD_INDEX = 13;
+ static final int CALLER_LINE_INDEX = 14;
+ static final int EVENT_ID_INDEX = 15;
+
static {
// PreparedStatement.getGeneratedKeys() method was added in JDK 1.4
Method getGeneratedKeysMethod;
@@ -81,11 +97,12 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
}
@Override
- protected void subAppend(Object eventObject, Connection connection,
+ protected void subAppend(ILoggingEvent event, Connection connection,
PreparedStatement insertStatement) throws Throwable {
- ILoggingEvent event = (ILoggingEvent) eventObject;
bindLoggingEventWithInsertStatement(insertStatement, event);
+ bindLoggingEventArgumentsWithPreparedStatement(insertStatement, event.getArgumentArray());
+
// This is expensive... should we do it every time?
bindCallerDataWithPreparedStatement(insertStatement, event.getCallerData());
@@ -93,9 +110,10 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
if (updateCount != 1) {
addWarn("Failed to insert loggingEvent");
}
-
- long eventId = selectEventId(insertStatement, connection);
-
+ }
+
+ protected void secondarySubAppend(ILoggingEvent event, Connection connection,
+ long eventId) throws Throwable {
Map<String, String> mergedMap = mergePropertyMaps(event);
insertProperties(mergedMap, connection, eventId);
@@ -106,22 +124,48 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
void bindLoggingEventWithInsertStatement(PreparedStatement stmt,
ILoggingEvent event) throws SQLException {
- stmt.setLong(1, event.getTimeStamp());
- stmt.setString(2, event.getFormattedMessage());
- stmt.setString(3, event.getLoggerName());
- stmt.setString(4, event.getLevel().toString());
- stmt.setString(5, event.getThreadName());
- stmt.setShort(6, DBHelper.computeReferenceMask(event));
+ stmt.setLong(TIMESTMP_INDEX, event.getTimeStamp());
+ stmt.setString(FORMATTED_MESSAGE_INDEX, event.getFormattedMessage());
+ stmt.setString(LOGGER_NAME_INDEX, event.getLoggerName());
+ stmt.setString(LEVEL_STRING_INDEX, event.getLevel().toString());
+ stmt.setString(THREAD_NAME_INDEX, event.getThreadName());
+ stmt.setShort(REFERENCE_FLAG_INDEX, DBHelper.computeReferenceMask(event));
}
+ void bindLoggingEventArgumentsWithPreparedStatement(PreparedStatement stmt,
+ Object[] argArray) throws SQLException {
+
+ int arrayLen = argArray != null ? argArray.length : 0;
+
+ for(int i = 0; i < arrayLen && i < 4; i++) {
+ stmt.setString(ARG0_INDEX+i, truncateTo254(argArray[i].toString()));
+ }
+ if(arrayLen < 4) {
+ for(int i = arrayLen; i < 4; i++) {
+ stmt.setString(ARG0_INDEX+i, null);
+ }
+ }
+ }
+
+ String truncateTo254(String s) {
+ if(s == null) {
+ return null;
+ }
+ if(s.length() <= 254) {
+ return s;
+ } else {
+ return s.substring(0, 254);
+ }
+ }
+
void bindCallerDataWithPreparedStatement(PreparedStatement stmt,
StackTraceElement[] callerDataArray) throws SQLException {
StackTraceElement callerData = callerDataArray[0];
if (callerData != null) {
- stmt.setString(7, callerData.getFileName());
- stmt.setString(8, callerData.getClassName());
- stmt.setString(9, callerData.getMethodName());
- stmt.setString(10, Integer.toString(callerData.getLineNumber()));
+ stmt.setString(CALLER_FILENAME_INDEX, callerData.getFileName());
+ stmt.setString(CALLER_CLASS_INDEX, callerData.getClassName());
+ stmt.setString(CALLER_METHOD_INDEX, callerData.getMethodName());
+ stmt.setString(CALLER_LINE_INDEX, Integer.toString(callerData.getLineNumber()));
}
}
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
index 1390237..8ebeece 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
@@ -50,11 +50,15 @@ public class SQLBuilder {
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.ARG0)).append(", ");
+ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.ARG1)).append(", ");
+ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.ARG2)).append(", ");
+ sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.ARG3)).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 (?, ?, ? ,?, ?, ?, ?, ?, ?, ?)");
+ sqlBuilder.append(" VALUES (?, ?, ? ,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
return sqlBuilder.toString();
}
}
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/db2.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/db2.sql
index 16db5a0..94964fe 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/db2.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/db2.sql
@@ -20,6 +20,10 @@ CREATE TABLE logging_event
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
+ arg0 VARCHAR(254),
+ arg1 VARCHAR(254),
+ arg2 VARCHAR(254),
+ arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/deleteTables.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/deleteTables.sql
deleted file mode 100644
index bd7c256..0000000
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/deleteTables.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-
-delete from access_event_property;
-delete from access_event;
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
index f053863..94306c8 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
@@ -14,6 +14,10 @@ CREATE TABLE logging_event (
level_string VARCHAR(256) NOT NULL,
thread_name VARCHAR(256),
reference_flag SMALLINT,
+ arg0 VARCHAR(256),
+ arg1 VARCHAR(256),
+ arg2 VARCHAR(256),
+ arg3 VARCHAR(256),
caller_filename VARCHAR(256),
caller_class VARCHAR(256),
caller_method VARCHAR(256),
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
index 07cf847..671f675 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
@@ -13,6 +13,10 @@ CREATE TABLE logging_event (
level_string VARCHAR(256) NOT NULL,
thread_name VARCHAR(256),
reference_flag SMALLINT,
+ arg0 VARCHAR(256),
+ arg1 VARCHAR(256),
+ arg2 VARCHAR(256),
+ arg3 VARCHAR(256),
caller_filename VARCHAR(256),
caller_class VARCHAR(256),
caller_method VARCHAR(256),
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mssql.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mssql.sql
index 734757c..cbe4ef6 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mssql.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mssql.sql
@@ -13,6 +13,10 @@ CREATE TABLE logging_event
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
+ arg0 VARCHAR(254),
+ arg1 VARCHAR(254),
+ arg2 VARCHAR(254),
+ arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql
index 5195dcf..e6ee387 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql
@@ -20,6 +20,10 @@ CREATE TABLE logging_event
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
+ arg0 VARCHAR(254),
+ arg1 VARCHAR(254),
+ arg2 VARCHAR(254),
+ arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql
index 89e244e..3d239ad 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql
@@ -22,6 +22,10 @@ CREATE TABLE logging_event
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
+ arg0 VARCHAR(254),
+ arg1 VARCHAR(254),
+ arg2 VARCHAR(254),
+ arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
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 25a3dd1..576f26c 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
@@ -19,6 +19,10 @@ CREATE TABLE logging_event
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
+ arg0 VARCHAR(254),
+ arg1 VARCHAR(254),
+ arg2 VARCHAR(254),
+ arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/sybaseSqlAnywhere.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/sybaseSqlAnywhere.sql
index 4daa77d..9ad7e70 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/sybaseSqlAnywhere.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/sybaseSqlAnywhere.sql
@@ -7,18 +7,22 @@ DROP TABLE logging_event
CREATE TABLE logging_event
(
-timestmp bigint NOT NULL,
-formatted_message LONG VARCHAR NOT NULL,
-logger_name VARCHAR(254) NOT NULL,
-level_string VARCHAR(254) NOT NULL,
-thread_name VARCHAR(254),
-reference_flag SMALLINT,
-caller_filename VARCHAR(254) NOT NULL,
-caller_class VARCHAR(254) NOT NULL,
-caller_method VARCHAR(254) NOT NULL,
-caller_line varCHAR(4) NOT NULL,
-event_id int NOT NULL DEFAULT AUTOINCREMENT,
-PRIMARY KEY(event_id)
+ timestmp bigint NOT NULL,
+ formatted_message LONG VARCHAR NOT NULL,
+ logger_name VARCHAR(254) NOT NULL,
+ level_string VARCHAR(254) NOT NULL,
+ thread_name VARCHAR(254),
+ reference_flag SMALLINT,
+ arg0 VARCHAR(254),
+ arg1 VARCHAR(254),
+ arg2 VARCHAR(254),
+ arg3 VARCHAR(254),
+ caller_filename VARCHAR(254) NOT NULL,
+ caller_class VARCHAR(254) NOT NULL,
+ caller_method VARCHAR(254) NOT NULL,
+ caller_line varCHAR(4) NOT NULL,
+ event_id int NOT NULL DEFAULT AUTOINCREMENT,
+ PRIMARY KEY(event_id)
)
CREATE TABLE logging_event_property
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/ColumnName.java b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/ColumnName.java
index 2717331..0ed90fb 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/names/ColumnName.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/names/ColumnName.java
@@ -10,6 +10,10 @@ public enum ColumnName {
LEVEL_STRING,
THREAD_NAME,
REFERENCE_FLAG,
+ ARG0,
+ ARG1,
+ ARG2,
+ ARG3,
CALLER_FILENAME,
CALLER_CLASS,
CALLER_METHOD,
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java
index 286d570..f8daa42 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java
@@ -92,16 +92,17 @@ public class DBAppenderH2Test {
ResultSet rs = null;
rs = stmt.executeQuery("SELECT * FROM logging_event");
if (rs.next()) {
- assertEquals(event.getTimeStamp(), rs.getLong(1));
- assertEquals(event.getFormattedMessage(), rs.getString(2));
- assertEquals(event.getLoggerName(), rs.getString(3));
- assertEquals(event.getLevel().toString(), rs.getString(4));
- assertEquals(event.getThreadName(), rs.getString(5));
- assertEquals(DBHelper.computeReferenceMask(event), rs.getShort(6));
+ assertEquals(event.getTimeStamp(), rs.getLong(DBAppender.TIMESTMP_INDEX));
+ assertEquals(event.getFormattedMessage(), rs.getString(DBAppender.FORMATTED_MESSAGE_INDEX));
+ assertEquals(event.getLoggerName(), rs.getString(DBAppender.LOGGER_NAME_INDEX));
+ assertEquals(event.getLevel().toString(), rs.getString(DBAppender.LEVEL_STRING_INDEX));
+ assertEquals(event.getThreadName(), rs.getString(DBAppender.THREAD_NAME_INDEX));
+ assertEquals(DBHelper.computeReferenceMask(event), rs.getShort(DBAppender.REFERENCE_FLAG_INDEX));
+ assertEquals(String.valueOf(diff), rs.getString(DBAppender.ARG0_INDEX));
StackTraceElement callerData = event.getCallerData()[0];
- assertEquals(callerData.getFileName(), rs.getString(7));
- assertEquals(callerData.getClassName(), rs.getString(8));
- assertEquals(callerData.getMethodName(), rs.getString(9));
+ assertEquals(callerData.getFileName(), rs.getString(DBAppender.CALLER_FILENAME_INDEX));
+ assertEquals(callerData.getClassName(), rs.getString(DBAppender.CALLER_CLASS_INDEX));
+ assertEquals(callerData.getMethodName(), rs.getString(DBAppender.CALLER_METHOD_INDEX));
} else {
fail("No row was inserted in the database");
}
@@ -182,7 +183,7 @@ public class DBAppenderH2Test {
private ILoggingEvent createLoggingEvent() {
ILoggingEvent le = new LoggingEvent(this.getClass().getName(), logger,
- Level.DEBUG, "test message", new Exception("test Ex"), null);
+ Level.DEBUG, "test message", new Exception("test Ex"), new Integer[] {diff});
return le;
}
}
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java
index 810e73a..8cbe70b 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java
@@ -87,6 +87,10 @@ public class DBAppenderH2TestFixture {
buf.append("LEVEL_STRING VARCHAR(256) NOT NULL,");
buf.append("THREAD_NAME VARCHAR(256),");
buf.append("REFERENCE_FLAG SMALLINT,");
+ buf.append("ARG0 VARCHAR(256),");
+ buf.append("ARG1 VARCHAR(256),");
+ buf.append("ARG2 VARCHAR(256),");
+ buf.append("ARG3 VARCHAR(256),");
buf.append("CALLER_FILENAME VARCHAR(256), ");
buf.append("CALLER_CLASS VARCHAR(256), ");
buf.append("CALLER_METHOD VARCHAR(256), ");
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java
index 20cead3..9fd2b72 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java
@@ -34,6 +34,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.db.DriverManagerConnectionSource;
import ch.qos.logback.core.testUtil.RandomUtil;
+import ch.qos.logback.core.util.StatusPrinter;
public class DBAppenderHSQLTest {
@@ -81,22 +82,23 @@ public class DBAppenderHSQLTest {
ILoggingEvent event = createLoggingEvent();
appender.append(event);
- //StatusPrinter.print(lc.getStatusManager());
+ StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
Statement stmt = connectionSource.getConnection().createStatement();
ResultSet rs = null;
rs = stmt.executeQuery("SELECT * FROM logging_event");
if (rs.next()) {
- assertEquals(event.getTimeStamp(), rs.getLong(1));
- assertEquals(event.getFormattedMessage(), rs.getString(2));
- assertEquals(event.getLoggerName(), rs.getString(3));
- assertEquals(event.getLevel().toString(), rs.getString(4));
- assertEquals(event.getThreadName(), rs.getString(5));
- assertEquals(DBHelper.computeReferenceMask(event), rs.getShort(6));
+ assertEquals(event.getTimeStamp(), rs.getLong(DBAppender.TIMESTMP_INDEX));
+ assertEquals(event.getFormattedMessage(), rs.getString(DBAppender.FORMATTED_MESSAGE_INDEX));
+ assertEquals(event.getLoggerName(), rs.getString(DBAppender.LOGGER_NAME_INDEX));
+ assertEquals(event.getLevel().toString(), rs.getString(DBAppender.LEVEL_STRING_INDEX));
+ assertEquals(event.getThreadName(), rs.getString(DBAppender.THREAD_NAME_INDEX));
+ assertEquals(DBHelper.computeReferenceMask(event), rs.getShort(DBAppender.REFERENCE_FLAG_INDEX));
+ assertEquals(String.valueOf(diff), rs.getString(DBAppender.ARG0_INDEX));
StackTraceElement callerData = event.getCallerData()[0];
- assertEquals(callerData.getFileName(), rs.getString(7));
- assertEquals(callerData.getClassName(), rs.getString(8));
- assertEquals(callerData.getMethodName(), rs.getString(9));
+ assertEquals(callerData.getFileName(), rs.getString(DBAppender.CALLER_FILENAME_INDEX));
+ assertEquals(callerData.getClassName(), rs.getString(DBAppender.CALLER_CLASS_INDEX));
+ assertEquals(callerData.getMethodName(), rs.getString(DBAppender.CALLER_METHOD_INDEX));
} else {
fail("No row was inserted in the database");
}
@@ -180,7 +182,7 @@ public class DBAppenderHSQLTest {
private ILoggingEvent createLoggingEvent() {
ILoggingEvent le = new LoggingEvent(this.getClass().getName(), logger,
- Level.DEBUG, "test message", new Exception("test Ex"), null);
+ Level.DEBUG, "test message", new Exception("test Ex"), new Integer[] {diff});
return le;
}
}
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java
index 30f8a58..fdac186 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java
@@ -115,6 +115,13 @@ public class DBAppenderHSQLTestFixture {
buf.append("LEVEL_STRING VARCHAR(256) NOT NULL,");
buf.append("THREAD_NAME VARCHAR(256),");
buf.append("REFERENCE_FLAG SMALLINT,");
+
+ buf.append("ARG0 VARCHAR(256),");
+ buf.append("ARG1 VARCHAR(256),");
+ buf.append("ARG2 VARCHAR(256),");
+ buf.append("ARG3 VARCHAR(256),");
+
+
buf.append("CALLER_FILENAME VARCHAR(256), ");
buf.append("CALLER_CLASS VARCHAR(256), ");
buf.append("CALLER_METHOD VARCHAR(256), ");
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 34c6001..93c5868 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
@@ -48,7 +48,7 @@ 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" };
- static String[] MYSQL_CONFORMING_HOST_LIST = new String[] { "haro" };
+ static String[] MYSQL_CONFORMING_HOST_LIST = new String[] { "hetz", "haro" };
static String[] ORACLE_CONFORMING_HOST_LIST = new String[] { "haro" };
int diff = RandomUtil.getPositiveInt();
@@ -144,6 +144,7 @@ public class DBAppenderIntegrationTest {
assertEquals("This is a debug message. Message number: " + (diff + 5), msg);
}
+ @SuppressWarnings("unchecked")
void verifyProperty(long lastEventId) throws SQLException {
DriverManagerConnectionSource cs = getConnectionSource();
Connection con = cs.getConnection();
@@ -155,7 +156,7 @@ public class DBAppenderIntegrationTest {
Map<String, String> witness = lc.getCopyOfPropertyMap();
witness.putAll(MDC.getCopyOfContextMap());
- Map map = new HashMap();
+ Map<String, String> map = new HashMap<String, String>();
while (rs.next()) {
String key = rs.getString(1);
String val = rs.getString(2);
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 373ce6c..de7d6ad 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
@@ -21,7 +21,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
-import ch.qos.logback.core.AppenderBase;
+import ch.qos.logback.core.UnsynchronizedAppenderBase;
import ch.qos.logback.core.db.dialect.DBUtil;
import ch.qos.logback.core.db.dialect.SQLDialect;
import ch.qos.logback.core.db.dialect.SQLDialectCode;
@@ -31,7 +31,7 @@ import ch.qos.logback.core.db.dialect.SQLDialectCode;
* @author Ray DeCampo
* @author Sébastien Pennec
*/
-public abstract class DBAppenderBase<E> extends AppenderBase<E> {
+public abstract class DBAppenderBase<E> extends UnsynchronizedAppenderBase<E> {
protected ConnectionSource connectionSource;
protected boolean cnxSupportsGetGeneratedKeys = false;
@@ -76,13 +76,12 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
/**
* @param connectionSource
- * The connectionSource to set.
+ * The connectionSource to set.
*/
public void setConnectionSource(ConnectionSource connectionSource) {
this.connectionSource = connectionSource;
}
-
@Override
public void append(E eventObject) {
Connection connection = null;
@@ -90,23 +89,32 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
connection = connectionSource.getConnection();
connection.setAutoCommit(false);
PreparedStatement insertStatement;
+
if (cnxSupportsGetGeneratedKeys) {
String EVENT_ID_COL_NAME = "EVENT_ID";
- // see
- if(connectionSource.getSQLDialectCode() == SQLDialectCode.POSTGRES_DIALECT) {
+ // see
+ if (connectionSource.getSQLDialectCode() == SQLDialectCode.POSTGRES_DIALECT) {
EVENT_ID_COL_NAME = EVENT_ID_COL_NAME.toLowerCase();
}
insertStatement = connection.prepareStatement(getInsertSQL(),
- new String[] {EVENT_ID_COL_NAME});
+ new String[] { EVENT_ID_COL_NAME });
} else {
insertStatement = connection.prepareStatement(getInsertSQL());
}
- subAppend(eventObject, connection, insertStatement);
+
+ long eventId;
+ // inserting an event and getting the result must be exclusive
+ synchronized (this) {
+ subAppend(eventObject, connection, insertStatement);
+ eventId = selectEventId(insertStatement, connection);
+ }
+ System.out.println("eventid="+eventId);
+ secondarySubAppend(eventObject, connection, eventId);
// we no longer need the insertStatement
close(insertStatement);
insertStatement = null;
-
+
connection.commit();
} catch (Throwable sqle) {
addError("problem appending event", sqle);
@@ -115,9 +123,12 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
}
}
- protected abstract void subAppend(Object eventObject, Connection connection,
+ protected abstract void subAppend(E eventObject, Connection connection,
PreparedStatement statement) throws Throwable;
+ protected abstract void secondarySubAppend(E eventObject, Connection connection,
+ long eventId) throws Throwable;
+
protected long selectEventId(PreparedStatement insertStatement,
Connection connection) throws SQLException, InvocationTargetException {
ResultSet rs = null;
@@ -144,7 +155,8 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
if (!gotGeneratedKeys) {
idStatement = connection.createStatement();
idStatement.setMaxRows(1);
- rs = idStatement.executeQuery(sqlDialect.getSelectInsertId());
+ String selectInsertIdStr = sqlDialect.getSelectInsertId();
+ rs = idStatement.executeQuery(selectInsertIdStr);
}
// A ResultSet cursor is initially positioned before the first row;
@@ -156,16 +168,16 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
close(idStatement);
idStatement = null;
-
+
return eventId;
}
void close(Statement statement) throws SQLException {
- if(statement != null) {
+ if (statement != null) {
statement.close();
}
}
-
+
@Override
public void stop() {
super.stop();
diff --git a/logback-site/src/site/pages/news.html b/logback-site/src/site/pages/news.html
index 92ca237..3374279 100644
--- a/logback-site/src/site/pages/news.html
+++ b/logback-site/src/site/pages/news.html
@@ -61,6 +61,35 @@
</div>
+ <br/>
+
+ <div style="border: 1px solid #F44; background-color: #FED; padding-left: 1ex; padding-right: 1ex;">
+
+ <h4>Breaking change: DBAppender in logback-classic expects four
+ additional columns
+ </h4>
+
+ <p>Instead of lumping log request arguments into a field,
+ <code>DBAppender</code> (in logback-classic) now outputs up to
+ four arguments in the logging request in separate columns, named
+ <code>arg0</code>, <code>arg1</code>, <code>arg2</code> and
+ <code>arg4</code>. This solves <a
+ href="http://jira.qos.ch/browse/LBCLASSIC-187">LBCLASSIC-187</a>
+ reported by Greg Thomas.</p>
+
+ <p>Existing databases can be migrated to the new table structure
+ by altering the existing tables. Here is how it would be done
+ in PostgreSQL.</p>
+
+ <pre class="prettyprint">
+ALTER TABLE logging_event ADD COLUMN arg0 CARCHAR(254);
+ALTER TABLE logging_event ADD COLUMN arg1 VARCHAR(254);
+ALTER TABLE logging_event ADD COLUMN arg3 VARCHAR(254);
+ALTER TABLE logging_event ADD COLUMN arg3 VARCHAR(254);
+</pre>
+
+
+ </div>
<p><code>FileAppender</code> and derived classes can now
gracefully deal with IO failures and recover quickly after the
original cause of the IO failure is corrected. For example, if the
@@ -150,9 +179,19 @@
in <a href="http://jira.qos.ch/browse/LBCORE-126">LBCORE-126</a>
by Brian Edwards.</p>
+ <p>Event id values in DBAppender are now 64bit instead of 32. This
+ change was requested in <a
+ href="http://jira.qos.ch/browse/LBCLASSIC-198">LBCLASSIC-198</a>
+ by Michael Lynch.
+ </p>
+
<p>Added Sybase SQLAnywhere support in DBAppender. This feature
was requested by Michael Lynch in <a
href="http://jira.qos.ch/browse/LBCLASSIC-197">LBCLASSIC-197</a>.
+ </p>
+
+ <p>Added H2 support in DBAppender.</p>
+
<p>Fixed <a
href="http://jira.qos.ch/browse/LBSITE-36">LBSITE-36</a> reported
-----------------------------------------------------------------------
Summary of changes:
.../java/ch/qos/logback/access/db/DBAppender.java | 9 ++-
.../ch/qos/logback/access/db/DBAppenderTest.java | 5 +-
.../LoggingEvent Serialization.odt | Bin 12724 -> 0 bytes
.../java/ch/qos/logback/classic/db/DBAppender.java | 74 ++++++++++++++++----
.../java/ch/qos/logback/classic/db/SQLBuilder.java | 6 ++-
.../java/ch/qos/logback/classic/db/dialect/db2.sql | 4 +
.../logback/classic/db/dialect/deleteTables.sql | 3 -
.../java/ch/qos/logback/classic/db/dialect/h2.sql | 4 +
.../ch/qos/logback/classic/db/dialect/hsqldb.sql | 4 +
.../ch/qos/logback/classic/db/dialect/mssql.sql | 4 +
.../ch/qos/logback/classic/db/dialect/mysql.sql | 4 +
.../ch/qos/logback/classic/db/dialect/oracle.sql | 4 +
.../qos/logback/classic/db/dialect/postgresql.sql | 4 +
.../classic/db/dialect/sybaseSqlAnywhere.sql | 28 ++++---
.../qos/logback/classic/db/names/ColumnName.java | 4 +
.../qos/logback/classic/db/DBAppenderH2Test.java | 21 +++---
.../classic/db/DBAppenderH2TestFixture.java | 4 +
.../qos/logback/classic/db/DBAppenderHSQLTest.java | 24 ++++---
.../classic/db/DBAppenderHSQLTestFixture.java | 7 ++
.../classic/db/DBAppenderIntegrationTest.java | 5 +-
.../ch/qos/logback/core/db/DBAppenderBase.java | 40 +++++++----
logback-site/src/site/pages/news.html | 39 ++++++++++
22 files changed, 224 insertions(+), 73 deletions(-)
delete mode 100644 logback-classic/doc/designDiscussion/LoggingEvent Serialization.odt
delete mode 100644 logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/deleteTables.sql
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
Hello:
I am a new subscriber to this list, so please forgive me if these
questions have already been asked and answered.
Being quite experienced with log4j, migrating to Logback would probably be
a relatively easy exercise. However, while reading the manual, I have a
few questions, which might be best addressed to the developers, rather
than the users.
1) using parameterized logging instead of wrapping the log statment in a
conditional isEnabled, is very convenient, however I wonder whether there
is an implementation of printf
function (or whether there are plans to do so).
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#format(jav…,
java.lang.Object...)
Implementation of log statements with such functionality and a variable
arg list would be fairly trivial, but I found no references to such in
Logback Javadocs, FAQ or search engine queries.
2) If the answer to (1) is NO, then is there an easy way to extend Logback
to incorporate such functions?
3) the need to migrate to Logback arose when we started to look into
modularizing our application with OSGi Apache Felix. What OSGi bundles of
Logback/SLF4J would you recommend?
Your response is greatly appreciated.
Regards,
Pavel Bortnovskiy.
Jefferies archives and monitors outgoing and incoming e-mail. The contents of this email, including any attachments, are confidential to the ordinary user of the email address to which it was addressed. If you are not the addressee of this email you may not copy, forward, disclose or otherwise use it or any part of it in any form whatsoever. This email may be produced at the request of regulators or in connection with civil litigation. Jefferies accepts no liability for any errors or omissions arising as a result of transmission. Use by other than intended recipients is prohibited. In the United Kingdom, Jefferies operates as Jefferies International Limited; registered in England: no. 1978621; registered office: Vintners Place, 68 Upper Thames Street, London EC4V 3BJ. Jefferies International Limited is authorised and regulated by the Financial Services Authority.
2
3
[JIRA] Created: (LBCLASSIC-199) better structure for exception in DBAppender
by Ceki Gulcu (JIRA) 23 Mar '10
by Ceki Gulcu (JIRA) 23 Mar '10
23 Mar '10
better structure for exception in DBAppender
--------------------------------------------
Key: LBCLASSIC-199
URL: http://jira.qos.ch/browse/LBCLASSIC-199
Project: logback-classic
Issue Type: Sub-task
Components: appender
Reporter: Ceki Gulcu
Assignee: Logback dev list
Placing each stack trace line in a new row in string form (without explicit columns for the class, file and line number) is a little silly. Instead of aggregating the stack trace into a single line, a separate column for the various exception fields would have been better because it would allow searches based on exception classes/messages or stack traces.
IMO, the nicest approach table structure would be akin to:
CREATE TABLE logging_event_exception (
event_id INT NOT NULL,
i SMALLINT NOT NULL, -- 0 for the topmost exception, incremented by one for each nested exception
exception_class VARCHAR(256) NOT NULL,
exception_msg VARCHAR(1024),
stack_trace VARCHAR(16384)
PRIMARY KEY(event_id, i),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
where i would be incremented by one for each 'root cause'. If in addition, the LOGGING_EVENT table contained the total number of nested exception, it would be rather easy to retrieve the original exception plus its root causes.
--
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
2
[JIRA] Created: (LBCLASSIC-198) DBAppender: Support long event_id values in logging_event
by Michael Lynch (JIRA) 23 Mar '10
by Michael Lynch (JIRA) 23 Mar '10
23 Mar '10
DBAppender: Support long event_id values in logging_event
---------------------------------------------------------
Key: LBCLASSIC-198
URL: http://jira.qos.ch/browse/LBCLASSIC-198
Project: logback-classic
Issue Type: Improvement
Components: appender
Affects Versions: 0.9.18
Reporter: Michael Lynch
Assignee: Logback dev list
Want to retain longer history of logging events.
--
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
8
23 Mar '10
Add support for H2 in DBAppender
--------------------------------
Key: LBGENERAL-39
URL: http://jira.qos.ch/browse/LBGENERAL-39
Project: logback-general
Issue Type: New Feature
Reporter: Ceki Gulcu
Assignee: Logback dev list
--
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
1
[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v0.9.18-114-gcc1540f
by git-noreply@pixie.qos.ch 23 Mar '10
by git-noreply@pixie.qos.ch 23 Mar '10
23 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 cc1540f6a907d3f366cc1acbafc6056824b89875 (commit)
from 2181956a1dae32a14218f9da2d844e8913bb218e (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=cc1540f6a907d3f366cc1acb…
http://github.com/ceki/logback/commit/cc1540f6a907d3f366cc1acbafc6056824b89…
commit cc1540f6a907d3f366cc1acbafc6056824b89875
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Tue Mar 23 23:51:48 2010 +0100
- table and col names converted to lower case
- tests pass for PostgreSQL, Oracle 10, MySQL, H2, HSQL
diff --git a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/hsqldb.sql b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/hsqldb.sql
index c82b677..714630c 100644
--- a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/hsqldb.sql
+++ b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/hsqldb.sql
@@ -17,11 +17,11 @@ CREATE TABLE access_event (
method VARCHAR(254),
serverName VARCHAR(254),
postContent VARCHAR(254),
- event_id INT NOT NULL IDENTITY);
+ event_id BIGINT NOT NULL IDENTITY);
CREATE TABLE access_event_header (
- event_id INT NOT NULL,
+ event_id BIGINT NOT NULL,
header_key VARCHAR(254) NOT NULL,
header_value LONGVARCHAR,
PRIMARY KEY(event_id, header_key),
diff --git a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/mysql.sql b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/mysql.sql
index 6c6a055..70bb9f6 100644
--- a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/mysql.sql
+++ b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/mysql.sql
@@ -10,10 +10,10 @@ DROP TABLE IF EXISTS access_event;
COMMIT;
BEGIN;
-CREATE TABLE access_event
+CREATE TABLE ACCESS_EVENT
(
timestmp BIGINT NOT NULL,
- requestURI VARCHAR(254),
+ requestURI VARCHAR(254),
requestURL VARCHAR(254),
remoteHost VARCHAR(254),
remoteUser VARCHAR(254),
@@ -22,14 +22,14 @@ CREATE TABLE access_event
method VARCHAR(254),
serverName VARCHAR(254),
postContent VARCHAR(254),
- event_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
+ event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
COMMIT;
BEGIN;
CREATE TABLE access_event_header
(
- event_id INT NOT NULL,
+ event_id BIGINT NOT NULL,
header_key VARCHAR(254) NOT NULL,
header_value VARCHAR(1024),
PRIMARY KEY(event_id, header_key),
diff --git a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/oracle.sql b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/oracle.sql
index a41ac46..9533d1e 100644
--- a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/oracle.sql
+++ b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/oracle.sql
@@ -9,7 +9,7 @@ CREATE SEQUENCE access_event_id_seq MINVALUE 1 START WITH 1;
CREATE TABLE access_event
(
timestmp NUMBER(20) NOT NULL,
- requestURI VARCHAR(254),
+ requestURI VARCHAR(254),
requestURL VARCHAR(254),
remoteHost VARCHAR(254),
remoteUser VARCHAR(254),
@@ -18,7 +18,7 @@ CREATE TABLE access_event
method VARCHAR(254),
serverName VARCHAR(254),
postContent VARCHAR(254),
- event_id NUMBER(10) PRIMARY KEY
+ event_id NUMBER(20) PRIMARY KEY
);
-- the / suffix may or may not be needed depending on your SQL Client
@@ -38,7 +38,7 @@ CREATE TRIGGER access_event_id_seq_trig
CREATE TABLE access_event_header
(
- event_id NUMBER(10) NOT NULL,
+ event_id NUMBER(20) NOT NULL,
header_key VARCHAR2(254) NOT NULL,
header_value VARCHAR2(1024),
PRIMARY KEY(event_id, header_key),
diff --git a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/postgresql.sql b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/postgresql.sql
index 00e4af1..ba5cce7 100644
--- a/logback-access/src/main/java/ch/qos/logback/access/db/dialect/postgresql.sql
+++ b/logback-access/src/main/java/ch/qos/logback/access/db/dialect/postgresql.sql
@@ -11,7 +11,7 @@ CREATE SEQUENCE access_event_id_seq MINVALUE 1 START 1;
CREATE TABLE access_event
(
timestmp BIGINT NOT NULL,
- requestURI VARCHAR(254),
+ requestURI VARCHAR(254),
requestURL VARCHAR(254),
remoteHost VARCHAR(254),
remoteUser VARCHAR(254),
@@ -20,12 +20,12 @@ CREATE TABLE access_event
method VARCHAR(254),
serverName VARCHAR(254),
postContent VARCHAR(254),
- event_id INT DEFAULT nextval('access_event_id_seq') PRIMARY KEY
+ event_id BIGINT DEFAULT nextval('access_event_id_seq') PRIMARY KEY
);
CREATE TABLE access_event_header
(
- event_id INT NOT NULL,
+ event_id BIGINT NOT NULL,
header_key VARCHAR(254) NOT NULL,
header_value VARCHAR(1024),
PRIMARY KEY(event_id, header_key),
diff --git a/logback-access/src/test/input/integration/db/postgresql-with-driver.xml b/logback-access/src/test/input/integration/db/postgresql-with-driver.xml
index 8b047ab..34fc95c 100644
--- a/logback-access/src/test/input/integration/db/postgresql-with-driver.xml
+++ b/logback-access/src/test/input/integration/db/postgresql-with-driver.xml
@@ -2,15 +2,15 @@
<configuration>
- <appender name="DB" class="ch.qos.logback.access.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>
+ <appender name="DB" class="ch.qos.logback.access.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>
- <appender-ref ref="DB" />
+ <appender-ref ref="DB" />
</configuration>
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 68c398f..b0c298a 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
@@ -95,8 +95,6 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
}
long eventId = selectEventId(insertStatement, connection);
-
- System.out.println("eventId"+eventId);
Map<String, String> mergedMap = mergePropertyMaps(event);
insertProperties(mergedMap, connection, eventId);
@@ -248,7 +246,6 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
if (cnxSupportsBatchUpdates) {
exceptionStatement.executeBatch();
- System.out.println("executin batch");
}
exceptionStatement.close();
exceptionStatement = null;
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
index f8660c0..f053863 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
@@ -3,34 +3,34 @@
# It is intended for H2 databases.
-DROP TABLE LOGGING_EVENT_EXCEPTION IF EXISTSu;
-DROP TABLE LOGGING_EVENT_PROPERTY IF EXISTS;
-DROP TABLE LOGGING_EVENT IF EXISTS;
+DROP TABLE logging_event_exception IF EXISTSu;
+DROP TABLE logging_event_property IF EXISTS;
+DROP TABLE logging_event IF EXISTS;
-CREATE TABLE LOGGING_EVENT (
- TIMESTMP BIGINT NOT NULL,
- FORMATTED_MESSAGE LONGVARCHAR NOT NULL,
- LOGGER_NAME VARCHAR(256) NOT NULL,
- LEVEL_STRING VARCHAR(256) NOT NULL,
- THREAD_NAME VARCHAR(256),
- REFERENCE_FLAG SMALLINT,
- CALLER_FILENAME VARCHAR(256),
- CALLER_CLASS VARCHAR(256),
- CALLER_METHOD VARCHAR(256),
- CALLER_LINE CHAR(4),
- EVENT_ID IDENTITY NOT NULL);
+CREATE TABLE logging_event (
+ timestmp BIGINT NOT NULL,
+ formatted_message LONGVARCHAR NOT NULL,
+ logger_name VARCHAR(256) NOT NULL,
+ level_string VARCHAR(256) NOT NULL,
+ thread_name VARCHAR(256),
+ reference_flag SMALLINT,
+ caller_filename VARCHAR(256),
+ caller_class VARCHAR(256),
+ caller_method VARCHAR(256),
+ caller_line CHAR(4),
+ event_id IDENTITY NOT NULL);
-CREATE TABLE LOGGING_EVENT_PROPERTY (
- EVENT_ID BIGINT NOT NULL,
- MAPPED_KEY VARCHAR(254) NOT NULL,
- MAPPED_VALUE LONGVARCHAR,
- PRIMARY KEY(EVENT_ID, MAPPED_KEY),
- FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
+CREATE TABLE logging_event_property (
+ event_id BIGINT NOT NULL,
+ mapped_key VARCHAR(254) NOT NULL,
+ mapped_value LONGVARCHAR,
+ PRIMARY KEY(event_id, mapped_key),
+ FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
-CREATE TABLE LOGGING_EVENT_EXCEPTION (
- EVENT_ID BIGINT NOT NULL,
- I SMALLINT NOT NULL,
- TRACE_LINE VARCHAR(256) NOT NULL,
- PRIMARY KEY(EVENT_ID, I),
- FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
+CREATE TABLE logging_event_exception (
+ event_id BIGINT NOT NULL,
+ i SMALLINT NOT NULL,
+ trace_line VARCHAR(256) NOT NULL,
+ PRIMARY KEY(event_id, i),
+ FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
index e308f34..07cf847 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
@@ -2,34 +2,34 @@
#
# It is intended for HSQL databases. It has been tested on HSQL 1.8.07.
-DROP TABLE LOGGING_EVENT_EXCEPTION IF EXISTSu;
-DROP TABLE LOGGING_EVENT_PROPERTY IF EXISTS;
-DROP TABLE LOGGING_EVENT IF EXISTS;
+DROP TABLE logging_event_exception IF EXISTS;
+DROP TABLE logging_event_property IF EXISTS;
+DROP TABLE logging_event IF EXISTS;
-CREATE TABLE LOGGING_EVENT (
- TIMESTMP BIGINT NOT NULL,
- FORMATTED_MESSAGE LONGVARCHAR NOT NULL,
- LOGGER_NAME VARCHAR(256) NOT NULL,
- LEVEL_STRING VARCHAR(256) NOT NULL,
- THREAD_NAME VARCHAR(256),
- REFERENCE_FLAG SMALLINT,
- CALLER_FILENAME VARCHAR(256),
- CALLER_CLASS VARCHAR(256),
- CALLER_METHOD VARCHAR(256),
- CALLER_LINE CHAR(4),
- EVENT_ID BIGINT NOT NULL IDENTITY);
+CREATE TABLE logging_event (
+ timestmp BIGINT NOT NULL,
+ formatted_message LONGVARCHAR NOT NULL,
+ logger_name VARCHAR(256) NOT NULL,
+ level_string VARCHAR(256) NOT NULL,
+ thread_name VARCHAR(256),
+ reference_flag SMALLINT,
+ caller_filename VARCHAR(256),
+ caller_class VARCHAR(256),
+ caller_method VARCHAR(256),
+ caller_line CHAR(4),
+ event_id BIGINT NOT NULL IDENTITY);
-CREATE TABLE LOGGING_EVENT_PROPERTY (
- EVENT_ID BIGINT NOT NULL,
- MAPPED_KEY VARCHAR(254) NOT NULL,
- MAPPED_VALUE LONGVARCHAR,
- PRIMARY KEY(EVENT_ID, MAPPED_KEY),
- FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
+CREATE TABLE logging_event_property (
+ event_id BIGINT NOT NULL,
+ mapped_key VARCHAR(254) NOT NULL,
+ mapped_value LONGVARCHAR,
+ PRIMARY KEY(event_id, mapped_key),
+ FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
-CREATE TABLE LOGGING_EVENT_EXCEPTION (
- EVENT_ID BIGINT NOT NULL,
- I SMALLINT NOT NULL,
- TRACE_LINE VARCHAR(256) NOT NULL,
- PRIMARY KEY(EVENT_ID, I),
- FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
\ No newline at end of file
+CREATE TABLE logging_event_exception (
+ event_id BIGINT NOT NULL,
+ i SMALLINT NOT NULL,
+ trace_line VARCHAR(256) NOT NULL,
+ PRIMARY KEY(event_id, i),
+ FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
\ No newline at end of file
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql
index e8c2fb3..5195dcf 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mysql.sql
@@ -5,47 +5,47 @@
BEGIN;
-DROP TABLE IF EXISTS LOGGING_EVENT_PROPERTY;
-DROP TABLE IF EXISTS LOGGING_EVENT_EXCEPTION;
-DROP TABLE IF EXISTS LOGGING_EVENT;
+DROP TABLE IF EXISTS logging_event_property;
+DROP TABLE IF EXISTS logging_event_exception;
+DROP TABLE IF EXISTS logging_event;
COMMIT;
BEGIN;
-CREATE TABLE LOGGING_EVENT
+CREATE TABLE logging_event
(
- TIMESTMP BIGINT NOT NULL,
- FORMATTED_MESSAGE TEXT NOT NULL,
- LOGGER_NAME VARCHAR(254) NOT NULL,
- LEVEL_STRING VARCHAR(254) NOT NULL,
- THREAD_NAME VARCHAR(254),
- REFERENCE_FLAG SMALLINT,
- CALLER_FILENAME VARCHAR(254) NOT NULL,
- CALLER_CLASS VARCHAR(254) NOT NULL,
- CALLER_METHOD VARCHAR(254) NOT NULL,
- CALLER_LINE CHAR(4) NOT NULL,
- EVENT_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
+ timestmp BIGINT NOT NULL,
+ formatted_message TEXT NOT NULL,
+ logger_name VARCHAR(254) NOT NULL,
+ level_string VARCHAR(254) NOT NULL,
+ thread_name VARCHAR(254),
+ reference_flag SMALLINT,
+ caller_filename VARCHAR(254) NOT NULL,
+ caller_class VARCHAR(254) NOT NULL,
+ caller_method VARCHAR(254) NOT NULL,
+ caller_line CHAR(4) NOT NULL,
+ event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
COMMIT;
BEGIN;
-CREATE TABLE LOGGING_EVENT_PROPERTY
+CREATE TABLE logging_event_property
(
- EVENT_ID INT NOT NULL,
- MAPPED_KEY VARCHAR(254) NOT NULL,
- MAPPED_VALUE TEXT,
- PRIMARY KEY(EVENT_ID, MAPPED_KEY),
- FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID)
+ event_id BIGINT NOT NULL,
+ mapped_key VARCHAR(254) NOT NULL,
+ mapped_value TEXT,
+ PRIMARY KEY(event_id, mapped_key),
+ FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
BEGIN;
-CREATE TABLE LOGGING_EVENT_EXCEPTION
+CREATE TABLE logging_event_exception
(
- EVENT_ID INT NOT NULL,
- I SMALLINT NOT NULL,
- TRACE_LINE VARCHAR(254) NOT NULL,
- PRIMARY KEY(EVENT_ID, I),
- FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID)
+ event_id BIGINT NOT NULL,
+ i SMALLINT NOT NULL,
+ trace_line VARCHAR(254) NOT NULL,
+ PRIMARY KEY(event_id, i),
+ FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
\ No newline at end of file
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql
index 9ac0b79..89e244e 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/oracle.sql
@@ -13,7 +13,7 @@
CREATE SEQUENCE logging_event_id_seq MINVALUE 1 START WITH 1;
-CREATE SEQUENCE logging_event_id_seq MINVALUE 1 START WITH 1;
+
CREATE TABLE logging_event
(
timestmp NUMBER(20) NOT NULL,
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 55c7343..25a3dd1 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
@@ -14,7 +14,7 @@ CREATE SEQUENCE logging_event_id_seq MINVALUE 1 START 1;
CREATE TABLE logging_event
(
timestmp BIGINT NOT NULL,
- formatted_message TEXT NOT NULL,
+ formatted_message TEXT NOT NULL,
logger_name VARCHAR(254) NOT NULL,
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
@@ -23,12 +23,12 @@ CREATE TABLE logging_event
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
caller_line CHAR(4) NOT NULL,
- event_id INT DEFAULT nextval('logging_event_id_seq') PRIMARY KEY
+ event_id BIGINT DEFAULT nextval('logging_event_id_seq') PRIMARY KEY
);
CREATE TABLE logging_event_property
(
- event_id INT NOT NULL,
+ event_id BIGINT NOT NULL,
mapped_key VARCHAR(254) NOT NULL,
mapped_value VARCHAR(1024),
PRIMARY KEY(event_id, mapped_key),
@@ -37,7 +37,7 @@ CREATE TABLE logging_event_property
CREATE TABLE logging_event_exception
(
- event_id INT NOT NULL,
+ event_id BIGINT NOT NULL,
i SMALLINT NOT NULL,
trace_line VARCHAR(254) NOT NULL,
PRIMARY KEY(event_id, i),
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
index db88a52..e7ce6c8 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
@@ -14,17 +14,21 @@
package ch.qos.logback.classic.db.names;
/**
+ * The default name resolver simply returns the enum passes as parameter
+ * as a lower case string.
+ *
* @author Tomasz Nurkiewicz
- * @since 2010-03-16
+ * @author Ceki Gulcu
+ * @since 0.9.19
*/
public class DefaultDBNameResolver implements DBNameResolver {
public <N extends Enum<?>> String getTableName(N tableName) {
- return tableName.toString();
+ return tableName.toString().toLowerCase();
}
public <N extends Enum<?>> String getColumnName(N columnName) {
- return columnName.toString();
+ return columnName.toString().toLowerCase();
}
}
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 976ddc7..0bcade1 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
@@ -12,7 +12,7 @@
</appender>
<root>
- <level value="debug" />
+ <level value="DEBUG" />
<appender-ref ref="DB" />
</root>
</configuration>
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 ce0d3da..34c6001 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
@@ -14,9 +14,16 @@
package ch.qos.logback.classic.db;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import java.net.InetAddress;
-import java.util.Random;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Map;
import org.junit.After;
import org.junit.AfterClass;
@@ -29,9 +36,11 @@ import org.slf4j.MDC;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
+import ch.qos.logback.core.db.DriverManagerConnectionSource;
import ch.qos.logback.core.joran.spi.JoranException;
-import ch.qos.logback.core.status.Status;
+import ch.qos.logback.core.status.StatusChecker;
import ch.qos.logback.core.testUtil.Env;
+import ch.qos.logback.core.testUtil.RandomUtil;
import ch.qos.logback.core.util.StatusPrinter;
public class DBAppenderIntegrationTest {
@@ -41,8 +50,8 @@ public class DBAppenderIntegrationTest {
static String[] POSTGRES_CONFORMING_HOST_LIST = new String[] { "haro" };
static String[] MYSQL_CONFORMING_HOST_LIST = new String[] { "haro" };
static String[] ORACLE_CONFORMING_HOST_LIST = new String[] { "haro" };
-
- int diff = new Random(System.nanoTime()).nextInt(10000);
+
+ int diff = RandomUtil.getPositiveInt();
LoggerContext lc = new LoggerContext();
@BeforeClass
@@ -66,7 +75,17 @@ public class DBAppenderIntegrationTest {
lc.stop();
}
- public void doTest(String configFile) throws JoranException {
+ DriverManagerConnectionSource getConnectionSource() {
+ ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) lc
+ .getLogger(Logger.ROOT_LOGGER_NAME);
+
+ DBAppender dbAppender = (DBAppender) root.getAppender("DB");
+ assertNotNull(dbAppender);
+ return (DriverManagerConnectionSource) dbAppender.getConnectionSource();
+
+ }
+
+ public void doTest(String configFile) throws JoranException, SQLException {
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
configurator.doConfigure(configFile);
@@ -76,16 +95,86 @@ public class DBAppenderIntegrationTest {
MDC.put("userid", "user" + diff);
int runLength = 5;
for (int i = 1; i <= runLength; i++) {
- logger.debug("This is a debug message. Message number: " + i);
+ logger.debug("This is a debug message. Message number: " + (diff + i));
}
Exception e = new Exception("Just testing", getCause());
- logger
- .error("At last an error.", e);
+ logger.error("At last an error.", e);
+
+ long lastEventId = getLastEventId();
+ verify(lastEventId);
+
// check that there were no errors
- StatusPrinter.print(lc);
- assertEquals(Status.INFO, lc.getStatusManager().getLevel());
+ StatusChecker checker = new StatusChecker(lc);
+ assertTrue(checker.isErrorFree());
+ StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
+ }
+
+ long getLastEventId() throws SQLException {
+ DriverManagerConnectionSource cs = getConnectionSource();
+
+ Connection con = cs.getConnection();
+ Statement statement = con.createStatement();
+ statement.setMaxRows(1);
+ ResultSet rs = statement
+ .executeQuery("select event_id from logging_event order by event_id desc");
+ rs.next();
+ long eventId = rs.getLong(1);
+ rs.close();
+ statement.close();
+ return eventId;
+ }
+
+ void verify(long lastEventId) throws SQLException {
+ verifyDebugMsg(lastEventId);
+ verifyException(lastEventId);
+ verifyProperty(lastEventId);
+
+ }
+
+ void verifyDebugMsg(long lastEventId) throws SQLException {
+ DriverManagerConnectionSource cs = getConnectionSource();
+ Connection con = cs.getConnection();
+ Statement statement = con.createStatement();
+ ResultSet rs = statement
+ .executeQuery("select formatted_message from logging_event where event_id='"
+ + (lastEventId - 1) + "'");
+ rs.next();
+ String msg = rs.getString(1);
+ assertEquals("This is a debug message. Message number: " + (diff + 5), msg);
+ }
+
+ void verifyProperty(long lastEventId) throws SQLException {
+ DriverManagerConnectionSource cs = getConnectionSource();
+ Connection con = cs.getConnection();
+ Statement statement = con.createStatement();
+ ResultSet rs = statement
+ .executeQuery("select mapped_key, mapped_value from logging_event_property where event_id='"
+ + (lastEventId - 1) + "'");
+
+ Map<String, String> witness = lc.getCopyOfPropertyMap();
+ witness.putAll(MDC.getCopyOfContextMap());
+
+ Map map = new HashMap();
+ while (rs.next()) {
+ String key = rs.getString(1);
+ String val = rs.getString(2);
+ map.put(key, val);
+ }
+
+ assertEquals(witness, map);
+ }
+ void verifyException(long lastEventId) throws SQLException {
+ DriverManagerConnectionSource cs = getConnectionSource();
+ Connection con = cs.getConnection();
+ Statement statement = con.createStatement();
+ ResultSet rs = statement
+ .executeQuery("select trace_line from logging_event_exception where event_id='"
+ + (lastEventId) + "' AND I='0'");
+ rs.next();
+ String traceLine = rs.getString(1);
+ assertEquals("java.lang.Exception: Just testing", traceLine);
}
Throwable getCause() {
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/pattern/ExtendedThrowableProxyConverterTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/pattern/ExtendedThrowableProxyConverterTest.java
index 8a2e364..3ccdd39 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/pattern/ExtendedThrowableProxyConverterTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/pattern/ExtendedThrowableProxyConverterTest.java
@@ -93,7 +93,7 @@ public class ExtendedThrowableProxyConverterTest {
ILoggingEvent le = createLoggingEvent(t);
String result = etpc.convert(le);
result = result.replace("common frames omitted", "more");
- result = result.replaceAll(" \\[.*\\]", "");
+ result = result.replaceAll(" ~?\\[.*\\]", "");
assertEquals(sw.toString(), result);
}
-----------------------------------------------------------------------
Summary of changes:
.../ch/qos/logback/access/db/dialect/hsqldb.sql | 4 +-
.../ch/qos/logback/access/db/dialect/mysql.sql | 8 +-
.../ch/qos/logback/access/db/dialect/oracle.sql | 6 +-
.../qos/logback/access/db/dialect/postgresql.sql | 6 +-
.../integration/db/postgresql-with-driver.xml | 18 ++--
.../java/ch/qos/logback/classic/db/DBAppender.java | 3 -
.../java/ch/qos/logback/classic/db/dialect/h2.sql | 54 +++++-----
.../ch/qos/logback/classic/db/dialect/hsqldb.sql | 54 +++++-----
.../ch/qos/logback/classic/db/dialect/mysql.sql | 54 +++++-----
.../ch/qos/logback/classic/db/dialect/oracle.sql | 2 +-
.../qos/logback/classic/db/dialect/postgresql.sql | 8 +-
.../classic/db/names/DefaultDBNameResolver.java | 10 ++-
.../integration/db/postgresql-with-driver.xml | 2 +-
.../classic/db/DBAppenderIntegrationTest.java | 109 ++++++++++++++++++--
.../ExtendedThrowableProxyConverterTest.java | 2 +-
15 files changed, 215 insertions(+), 125 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-113-g2181956
by git-noreply@pixie.qos.ch 23 Mar '10
by git-noreply@pixie.qos.ch 23 Mar '10
23 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 2181956a1dae32a14218f9da2d844e8913bb218e (commit)
from 16e8cfbd6a3a9cb96a883270907792400790dc49 (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=2181956a1dae32a14218f9da…
http://github.com/ceki/logback/commit/2181956a1dae32a14218f9da2d844e8913bb2…
commit 2181956a1dae32a14218f9da2d844e8913bb218e
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Tue Mar 23 19:58:33 2010 +0100
- event_id is now expected to be of type LONG. This is a first step in
fixing http://jira.qos.ch/browse/LBCLASSIC-198 (more tests to follow)
diff --git a/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java b/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java
index 0f1879d..b8e3a25 100644
--- a/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java
+++ b/logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java
@@ -82,7 +82,7 @@ public class DBAppender extends DBAppenderBase<AccessEvent> {
}
if (insertHeaders) {
- int eventId = selectEventId(insertStatement, connection);
+ long eventId = selectEventId(insertStatement, connection);
addRequestHeaders(event, connection, eventId);
}
}
@@ -102,7 +102,7 @@ public class DBAppender extends DBAppenderBase<AccessEvent> {
}
void addRequestHeaders(AccessEvent event,
- Connection connection, int eventId) throws SQLException {
+ Connection connection, long eventId) throws SQLException {
Enumeration names = event.getRequestHeaderNames();
if (names.hasMoreElements()) {
PreparedStatement insertHeaderStatement = connection
@@ -113,7 +113,7 @@ public class DBAppender extends DBAppenderBase<AccessEvent> {
String key = (String) names.nextElement();
String value = (String) event.getRequestHeader(key);
- insertHeaderStatement.setInt(1, eventId);
+ insertHeaderStatement.setLong(1, eventId);
insertHeaderStatement.setString(2, key);
insertHeaderStatement.setString(3, value);
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 7c92e50..68c398f 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
@@ -94,8 +94,10 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
addWarn("Failed to insert loggingEvent");
}
- int eventId = selectEventId(insertStatement, connection);
+ long eventId = selectEventId(insertStatement, connection);
+ System.out.println("eventId"+eventId);
+
Map<String, String> mergedMap = mergePropertyMaps(event);
insertProperties(mergedMap, connection, eventId);
@@ -155,7 +157,7 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
}
protected void insertProperties(Map<String, String> mergedMap,
- Connection connection, int eventId) throws SQLException {
+ Connection connection, long eventId) throws SQLException {
Set propertiesKeys = mergedMap.keySet();
if (propertiesKeys.size() > 0) {
PreparedStatement insertPropertiesStatement = connection
@@ -165,7 +167,7 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
String key = (String) i.next();
String value = (String) mergedMap.get(key);
- insertPropertiesStatement.setInt(1, eventId);
+ insertPropertiesStatement.setLong(1, eventId);
insertPropertiesStatement.setString(2, key);
insertPropertiesStatement.setString(3, value);
@@ -190,8 +192,8 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
* batch updates are not supported.
*/
void updateExceptionStatement(PreparedStatement exceptionStatement,
- String txt, short i, int eventId) throws SQLException {
- exceptionStatement.setInt(1, eventId);
+ String txt, short i, long eventId) throws SQLException {
+ exceptionStatement.setLong(1, eventId);
exceptionStatement.setShort(2, i);
exceptionStatement.setString(3, txt);
if (cnxSupportsBatchUpdates) {
@@ -202,7 +204,7 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
}
short buildExceptionStatement(IThrowableProxy tp, short baseIndex,
- PreparedStatement insertExceptionStatement, int eventId)
+ PreparedStatement insertExceptionStatement, long eventId)
throws SQLException {
StringBuilder buf = new StringBuilder();
@@ -232,7 +234,7 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
}
protected void insertThrowable(IThrowableProxy tp, Connection connection,
- int eventId) throws SQLException {
+ long eventId) throws SQLException {
PreparedStatement exceptionStatement = connection
.prepareStatement(insertExceptionSQL);
@@ -246,6 +248,7 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
if (cnxSupportsBatchUpdates) {
exceptionStatement.executeBatch();
+ System.out.println("executin batch");
}
exceptionStatement.close();
exceptionStatement = null;
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
index 0ba314d..f8660c0 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql
@@ -1,35 +1,36 @@
# This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.
#
-# It is intended for HSQL databases. It has been tested on HSQL 1.8.07.
+# It is intended for H2 databases.
-DROP TABLE logging_event_exception IF EXISTS;
-DROP TABLE logging_event_property IF EXISTS;
-DROP TABLE logging_event IF EXISTS;
-CREATE TABLE logging_event (
- timestmp BIGINT NOT NULL,
- formatted_message LONGVARCHAR NOT NULL,
- logger_name VARCHAR(256) NOT NULL,
- level_string VARCHAR(256) NOT NULL,
- thread_name VARCHAR(256),
- reference_flag SMALLINT,
- caller_filename VARCHAR(256),
- caller_class VARCHAR(256),
- caller_method VARCHAR(256),
- caller_line CHAR(4),
- event_id INT NOT NULL IDENTITY);
+DROP TABLE LOGGING_EVENT_EXCEPTION IF EXISTSu;
+DROP TABLE LOGGING_EVENT_PROPERTY IF EXISTS;
+DROP TABLE LOGGING_EVENT IF EXISTS;
+CREATE TABLE LOGGING_EVENT (
+ TIMESTMP BIGINT NOT NULL,
+ FORMATTED_MESSAGE LONGVARCHAR NOT NULL,
+ LOGGER_NAME VARCHAR(256) NOT NULL,
+ LEVEL_STRING VARCHAR(256) NOT NULL,
+ THREAD_NAME VARCHAR(256),
+ REFERENCE_FLAG SMALLINT,
+ CALLER_FILENAME VARCHAR(256),
+ CALLER_CLASS VARCHAR(256),
+ CALLER_METHOD VARCHAR(256),
+ CALLER_LINE CHAR(4),
+ EVENT_ID IDENTITY NOT NULL);
-CREATE TABLE logging_event_property (
- event_id INT NOT NULL,
- mapped_key VARCHAR(254) NOT NULL,
- mapped_value LONGVARCHAR,
- PRIMARY KEY(event_id, mapped_key),
- FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
-CREATE TABLE logging_event_exception (
- event_id INT NOT NULL,
- i SMALLINT NOT NULL,
- trace_line VARCHAR(256) NOT NULL,
- PRIMARY KEY(event_id, i),
- FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
\ No newline at end of file
+CREATE TABLE LOGGING_EVENT_PROPERTY (
+ EVENT_ID BIGINT NOT NULL,
+ MAPPED_KEY VARCHAR(254) NOT NULL,
+ MAPPED_VALUE LONGVARCHAR,
+ PRIMARY KEY(EVENT_ID, MAPPED_KEY),
+ FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
+
+CREATE TABLE LOGGING_EVENT_EXCEPTION (
+ EVENT_ID BIGINT NOT NULL,
+ I SMALLINT NOT NULL,
+ TRACE_LINE VARCHAR(256) NOT NULL,
+ PRIMARY KEY(EVENT_ID, I),
+ FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
index 3cdeccc..e308f34 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql
@@ -2,34 +2,34 @@
#
# It is intended for HSQL databases. It has been tested on HSQL 1.8.07.
-DROP TABLE logging_event_exception IF EXISTS;
-DROP TABLE logging_event_property IF EXISTS;
-DROP TABLE logging_event IF EXISTS;
+DROP TABLE LOGGING_EVENT_EXCEPTION IF EXISTSu;
+DROP TABLE LOGGING_EVENT_PROPERTY IF EXISTS;
+DROP TABLE LOGGING_EVENT IF EXISTS;
-CREATE TABLE logging_event (
- timestmp BIGINT NOT NULL,
- formatted_message LONGVARCHAR NOT NULL,
- logger_name VARCHAR(256) NOT NULL,
- level_string VARCHAR(256) NOT NULL,
- thread_name VARCHAR(256),
- reference_flag SMALLINT,
- caller_filename VARCHAR(256),
- caller_class VARCHAR(256),
- caller_method VARCHAR(256),
- caller_line CHAR(4),
- event_id INT NOT NULL IDENTITY);
+CREATE TABLE LOGGING_EVENT (
+ TIMESTMP BIGINT NOT NULL,
+ FORMATTED_MESSAGE LONGVARCHAR NOT NULL,
+ LOGGER_NAME VARCHAR(256) NOT NULL,
+ LEVEL_STRING VARCHAR(256) NOT NULL,
+ THREAD_NAME VARCHAR(256),
+ REFERENCE_FLAG SMALLINT,
+ CALLER_FILENAME VARCHAR(256),
+ CALLER_CLASS VARCHAR(256),
+ CALLER_METHOD VARCHAR(256),
+ CALLER_LINE CHAR(4),
+ EVENT_ID BIGINT NOT NULL IDENTITY);
-CREATE TABLE logging_event_property (
- event_id INT NOT NULL,
- mapped_key VARCHAR(254) NOT NULL,
- mapped_value LONGVARCHAR,
- PRIMARY KEY(event_id, mapped_key),
- FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
+CREATE TABLE LOGGING_EVENT_PROPERTY (
+ EVENT_ID BIGINT NOT NULL,
+ MAPPED_KEY VARCHAR(254) NOT NULL,
+ MAPPED_VALUE LONGVARCHAR,
+ PRIMARY KEY(EVENT_ID, MAPPED_KEY),
+ FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
-CREATE TABLE logging_event_exception (
- event_id INT NOT NULL,
- i SMALLINT NOT NULL,
- trace_line VARCHAR(256) NOT NULL,
- PRIMARY KEY(event_id, i),
- FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
\ No newline at end of file
+CREATE TABLE LOGGING_EVENT_EXCEPTION (
+ EVENT_ID BIGINT NOT NULL,
+ I SMALLINT NOT NULL,
+ TRACE_LINE VARCHAR(256) NOT NULL,
+ PRIMARY KEY(EVENT_ID, I),
+ FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));
\ No newline at end of file
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java
index 3ba8e00..286d570 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2Test.java
@@ -14,6 +14,7 @@
package ch.qos.logback.classic.db;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.sql.ResultSet;
@@ -21,6 +22,7 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
+import org.apache.log4j.MDC;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -31,6 +33,7 @@ import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.db.DriverManagerConnectionSource;
+import ch.qos.logback.core.testUtil.RandomUtil;
import ch.qos.logback.core.util.StatusPrinter;
public class DBAppenderH2Test {
@@ -39,8 +42,8 @@ public class DBAppenderH2Test {
Logger logger;
DBAppender appender;
DriverManagerConnectionSource connectionSource;
-
DBAppenderH2TestFixture dbAppenderH2TestFixture;
+ int diff = RandomUtil.getPositiveInt();
@Before
public void setUp() throws SQLException {
@@ -58,6 +61,7 @@ public class DBAppenderH2Test {
connectionSource.setContext(lc);
connectionSource.setDriverClass(DBAppenderH2TestFixture.H2_DRIVER_CLASS);
connectionSource.setUrl(dbAppenderH2TestFixture.url);
+ System.out.println("cs.url="+dbAppenderH2TestFixture.url);
connectionSource.setUser(dbAppenderH2TestFixture.user);
connectionSource.setPassword(dbAppenderH2TestFixture.password);
@@ -109,17 +113,23 @@ public class DBAppenderH2Test {
@Test
public void testAppendThrowable() throws SQLException {
ILoggingEvent event = createLoggingEvent();
-
appender.append(event);
-
Statement stmt = connectionSource.getConnection().createStatement();
ResultSet rs = null;
- rs = stmt.executeQuery("SELECT * FROM logging_event_exception where event_id = 0");
+ rs = stmt.executeQuery("SELECT * FROM LOGGING_EVENT_EXCEPTION WHERE EVENT_ID=1");
+ rs.next();
+ String expected = "java.lang.Exception: test Ex";
+ String firstLine = rs.getString(3);
+ assertTrue("["+firstLine+"] does not match ["+expected+"]", firstLine.contains(expected));
+
int i = 0;
while (rs.next()) {
- assertEquals(event.getThrowableProxy().getStackTraceElementProxyArray()[i].toString(), rs.getString(3));
+ expected = event.getThrowableProxy().getStackTraceElementProxyArray()[i].toString();
+ String st = rs.getString(3);
+ assertTrue("["+st+"] does not match ["+expected+"]", st.contains(expected));
i++;
}
+ assertTrue(i != 0);
rs.close();
stmt.close();
@@ -127,21 +137,24 @@ public class DBAppenderH2Test {
@Test
public void testContextInfo() throws SQLException {
- ILoggingEvent event = createLoggingEvent();
lc.putProperty("testKey1", "testValue1");
+ MDC.put("k"+diff, "v"+diff);
+ ILoggingEvent event = createLoggingEvent();
appender.append(event);
Statement stmt = connectionSource.getConnection().createStatement();
ResultSet rs = null;
- rs = stmt.executeQuery("SELECT * FROM logging_event_property where event_id = 0");
+ rs = stmt.executeQuery("SELECT * FROM LOGGING_EVENT_PROPERTY WHERE EVENT_ID=1");
Map<String, String> map = appender.mergePropertyMaps(event);
+ int i = 0;
while (rs.next()) {
String key = rs.getString(2);
assertEquals(map.get(key), rs.getString(3));
- //System.out.println("value: " + map.get(key));
+ i++;
}
-
+ assertTrue(map.size() != 0);
+ assertEquals(map.size(), i);
rs.close();
stmt.close();
}
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java
index 8727b25..810e73a 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderH2TestFixture.java
@@ -31,7 +31,6 @@ public class DBAppenderH2TestFixture {
}
public static final String H2_DRIVER_CLASS = "org.h2.Driver";
- // String serverProps;
String url = null;
String user = "sa";
String password = "";
@@ -70,6 +69,7 @@ public class DBAppenderH2TestFixture {
}
Connection newConnection() throws SQLException {
+ System.out.println("url="+url);
org.h2.Driver driver = Driver.load();
Properties props = new Properties();
props.setProperty("user", user);
@@ -80,50 +80,50 @@ public class DBAppenderH2TestFixture {
private void createTables() throws SQLException {
assertNotNull(connection);
StringBuffer buf = new StringBuffer();
- buf.append("CREATE TABLE logging_event (");
- buf.append("timestmp BIGINT NOT NULL,");
- buf.append("formatted_message LONGVARCHAR NOT NULL,");
- buf.append("logger_name VARCHAR(256) NOT NULL,");
- buf.append("level_string VARCHAR(256) NOT NULL,");
- buf.append("thread_name VARCHAR(256),");
- buf.append("reference_flag SMALLINT,");
- buf.append("caller_filename VARCHAR(256), ");
- buf.append("caller_class VARCHAR(256), ");
- buf.append("caller_method VARCHAR(256), ");
- buf.append("caller_line CHAR(4), ");
- buf.append("event_id INT NOT NULL IDENTITY);");
+ buf.append("CREATE TABLE LOGGING_EVENT (");
+ buf.append("TIMESTMP BIGINT NOT NULL,");
+ buf.append("FORMATTED_MESSAGE LONGVARCHAR NOT NULL,");
+ buf.append("LOGGER_NAME VARCHAR(256) NOT NULL,");
+ buf.append("LEVEL_STRING VARCHAR(256) NOT NULL,");
+ buf.append("THREAD_NAME VARCHAR(256),");
+ buf.append("REFERENCE_FLAG SMALLINT,");
+ buf.append("CALLER_FILENAME VARCHAR(256), ");
+ buf.append("CALLER_CLASS VARCHAR(256), ");
+ buf.append("CALLER_METHOD VARCHAR(256), ");
+ buf.append("CALLER_LINE CHAR(4), ");
+ buf.append("EVENT_ID IDENTITY NOT NULL);");
executeQuery(connection, buf.toString());
buf = new StringBuffer();
- buf.append("CREATE TABLE logging_event_property (");
- buf.append("event_id INT NOT NULL,");
- buf.append("mapped_key VARCHAR(254) NOT NULL,");
- buf.append("mapped_value LONGVARCHAR,");
- buf.append("PRIMARY KEY(event_id, mapped_key),");
- buf.append("FOREIGN KEY (event_id) REFERENCES logging_event(event_id));");
+ buf.append("CREATE TABLE LOGGING_EVENT_PROPERTY (");
+ buf.append("EVENT_ID BIGINT NOT NULL,");
+ buf.append("MAPPED_KEY VARCHAR(254) NOT NULL,");
+ buf.append("MAPPED_VALUE LONGVARCHAR,");
+ buf.append("PRIMARY KEY(EVENT_ID, MAPPED_KEY),");
+ buf.append("FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));");
executeQuery(connection, buf.toString());
buf = new StringBuffer();
- buf.append("CREATE TABLE logging_event_exception (");
- buf.append("event_id INT NOT NULL,");
- buf.append("i SMALLINT NOT NULL,");
- buf.append("trace_line VARCHAR(256) NOT NULL,");
- buf.append("PRIMARY KEY(event_id, i),");
- buf.append("FOREIGN KEY (event_id) REFERENCES logging_event(event_id));");
+ buf.append("CREATE TABLE LOGGING_EVENT_EXCEPTION (");
+ buf.append("EVENT_ID BIGINT NOT NULL,");
+ buf.append("I SMALLINT NOT NULL,");
+ buf.append("TRACE_LINE VARCHAR(256) NOT NULL,");
+ buf.append("PRIMARY KEY(EVENT_ID, I),");
+ buf.append("FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));");
executeQuery(connection, buf.toString());
}
private void dropTables() throws SQLException {
StringBuffer buf = new StringBuffer();
- buf.append("DROP TABLE logging_event_exception IF EXISTS;");
+ buf.append("DROP TABLE LOGGING_EVENT_EXCEPTION IF EXISTS;");
executeQuery(connection, buf.toString());
buf = new StringBuffer();
- buf.append("DROP TABLE logging_event_property IF EXISTS;");
+ buf.append("DROP TABLE LOGGING_EVENT_PROPERTY IF EXISTS;");
executeQuery(connection, buf.toString());
buf = new StringBuffer();
- buf.append("DROP TABLE logging_event IF EXISTS;");
+ buf.append("DROP TABLE LOGGING_EVENT IF EXISTS;");
executeQuery(connection, buf.toString());
}
@@ -132,7 +132,7 @@ public class DBAppenderH2TestFixture {
st = conn.createStatement();
int i = st.executeUpdate(expression);
if (i == -1) {
- System.out.println("db error : " + expression);
+ throw new IllegalStateException("db error : " + expression);
}
st.close();
}
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java
index 51117cd..20cead3 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTest.java
@@ -14,6 +14,7 @@
package ch.qos.logback.classic.db;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.sql.ResultSet;
@@ -21,6 +22,7 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
+import org.apache.log4j.MDC;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -31,6 +33,7 @@ import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.db.DriverManagerConnectionSource;
+import ch.qos.logback.core.testUtil.RandomUtil;
public class DBAppenderHSQLTest {
@@ -40,6 +43,7 @@ public class DBAppenderHSQLTest {
DriverManagerConnectionSource connectionSource;
DBAppenderHSQLTestFixture dbAppenderHSQLTestFixture;
+ int diff = RandomUtil.getPositiveInt();
@Before
public void setUp() throws SQLException {
@@ -109,34 +113,46 @@ public class DBAppenderHSQLTest {
Statement stmt = connectionSource.getConnection().createStatement();
ResultSet rs = null;
- rs = stmt.executeQuery("SELECT * FROM logging_event_exception where event_id = 0");
+ rs = stmt.executeQuery("SELECT * FROM LOGGING_EVENT_EXCEPTION where EVENT_ID = 0");
+
+ rs.next();
+ String expected = "java.lang.Exception: test Ex";
+ String firstLine = rs.getString(3);
+ assertTrue("["+firstLine+"] does not match ["+expected+"]", firstLine.contains(expected));
+
int i = 0;
while (rs.next()) {
- assertEquals(event.getThrowableProxy().getStackTraceElementProxyArray()[i].toString(), rs.getString(3));
+ expected = event.getThrowableProxy().getStackTraceElementProxyArray()[i].toString();
+ String st = rs.getString(3);
+ assertTrue("["+st+"] does not match ["+expected+"]", st.contains(expected));
i++;
}
-
+ assertTrue(i != 0);
rs.close();
stmt.close();
}
@Test
public void testContextInfo() throws SQLException {
- ILoggingEvent event = createLoggingEvent();
lc.putProperty("testKey1", "testValue1");
+ MDC.put("k"+diff, "v"+diff);
+ ILoggingEvent event = createLoggingEvent();
appender.append(event);
Statement stmt = connectionSource.getConnection().createStatement();
ResultSet rs = null;
- rs = stmt.executeQuery("SELECT * FROM logging_event_property where event_id = 0");
+ rs = stmt.executeQuery("SELECT * FROM LOGGING_EVENT_PROPERTY WHERE EVENT_ID = 0");
Map<String, String> map = appender.mergePropertyMaps(event);
+ System.out.println("ma.size="+map.size());
+ int i = 0;
while (rs.next()) {
String key = rs.getString(2);
assertEquals(map.get(key), rs.getString(3));
- //System.out.println("value: " + map.get(key));
+ i++;
}
-
+ assertTrue(map.size() != 0);
+ assertEquals(map.size(), i);
rs.close();
stmt.close();
}
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java
index 1f6e00f..30f8a58 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/DBAppenderHSQLTestFixture.java
@@ -108,51 +108,51 @@ public class DBAppenderHSQLTestFixture {
Connection conn = newConnection();
assertNotNull(conn);
StringBuffer buf = new StringBuffer();
- buf.append("CREATE TABLE logging_event (");
- buf.append("timestmp BIGINT NOT NULL,");
- buf.append("formatted_message LONGVARCHAR NOT NULL,");
- buf.append("logger_name VARCHAR(256) NOT NULL,");
- buf.append("level_string VARCHAR(256) NOT NULL,");
- buf.append("thread_name VARCHAR(256),");
- buf.append("reference_flag SMALLINT,");
- buf.append("caller_filename VARCHAR(256), ");
- buf.append("caller_class VARCHAR(256), ");
- buf.append("caller_method VARCHAR(256), ");
- buf.append("caller_line CHAR(4), ");
- buf.append("event_id INT NOT NULL IDENTITY);");
+ buf.append("CREATE TABLE LOGGING_EVENT (");
+ buf.append("TIMESTMP BIGINT NOT NULL,");
+ buf.append("FORMATTED_MESSAGE LONGVARCHAR NOT NULL,");
+ buf.append("LOGGER_NAME VARCHAR(256) NOT NULL,");
+ buf.append("LEVEL_STRING VARCHAR(256) NOT NULL,");
+ buf.append("THREAD_NAME VARCHAR(256),");
+ buf.append("REFERENCE_FLAG SMALLINT,");
+ buf.append("CALLER_FILENAME VARCHAR(256), ");
+ buf.append("CALLER_CLASS VARCHAR(256), ");
+ buf.append("CALLER_METHOD VARCHAR(256), ");
+ buf.append("CALLER_LINE CHAR(4), ");
+ buf.append("EVENT_ID BIGINT NOT NULL IDENTITY);");
query(conn, buf.toString());
buf = new StringBuffer();
- buf.append("CREATE TABLE logging_event_property (");
- buf.append("event_id INT NOT NULL,");
- buf.append("mapped_key VARCHAR(254) NOT NULL,");
- buf.append("mapped_value LONGVARCHAR,");
- buf.append("PRIMARY KEY(event_id, mapped_key),");
- buf.append("FOREIGN KEY (event_id) REFERENCES logging_event(event_id));");
+ buf.append("CREATE TABLE LOGGING_EVENT_PROPERTY (");
+ buf.append("EVENT_ID BIGINT NOT NULL,");
+ buf.append("MAPPED_KEY VARCHAR(254) NOT NULL,");
+ buf.append("MAPPED_VALUE LONGVARCHAR,");
+ buf.append("PRIMARY KEY(EVENT_ID, MAPPED_KEY),");
+ buf.append("FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));");
query(conn, buf.toString());
buf = new StringBuffer();
- buf.append("CREATE TABLE logging_event_exception (");
- buf.append("event_id INT NOT NULL,");
- buf.append("i SMALLINT NOT NULL,");
- buf.append("trace_line VARCHAR(256) NOT NULL,");
- buf.append("PRIMARY KEY(event_id, i),");
- buf.append("FOREIGN KEY (event_id) REFERENCES logging_event(event_id));");
+ buf.append("CREATE TABLE LOGGING_EVENT_EXCEPTION (");
+ buf.append("EVENT_ID BIGINT NOT NULL,");
+ buf.append("I SMALLINT NOT NULL,");
+ buf.append("TRACE_LINE VARCHAR(256) NOT NULL,");
+ buf.append("PRIMARY KEY(EVENT_ID, I),");
+ buf.append("FOREIGN KEY (EVENT_ID) REFERENCES LOGGING_EVENT(EVENT_ID));");
query(conn, buf.toString());
}
private void dropTables() throws SQLException {
Connection conn = newConnection();
StringBuffer buf = new StringBuffer();
- buf.append("DROP TABLE logging_event_exception IF EXISTS;");
+ buf.append("DROP TABLE LOGGING_EVENT_EXCEPTION IF EXISTS;");
query(conn, buf.toString());
buf = new StringBuffer();
- buf.append("DROP TABLE logging_event_property IF EXISTS;");
+ buf.append("DROP TABLE LOGGING_EVENT_PROPERTY IF EXISTS;");
query(conn, buf.toString());
buf = new StringBuffer();
- buf.append("DROP TABLE logging_event IF EXISTS;");
+ buf.append("DROP TABLE LOGGING_EVENT IF EXISTS;");
query(conn, buf.toString());
}
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java
index 869fe27..5c90451 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java
@@ -18,6 +18,7 @@ import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
-@SuiteClasses( {DBAppenderHSQLTest.class})
+@SuiteClasses( { DBAppenderHSQLTest.class, DBAppenderH2Test.class,
+ DBAppenderIntegrationTest.class })
public class PackageTest {
}
\ No newline at end of file
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 ed08712..373ce6c 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
@@ -118,7 +118,7 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
protected abstract void subAppend(Object eventObject, Connection connection,
PreparedStatement statement) throws Throwable;
- protected int selectEventId(PreparedStatement insertStatement,
+ protected long selectEventId(PreparedStatement insertStatement,
Connection connection) throws SQLException, InvocationTargetException {
ResultSet rs = null;
Statement idStatement = null;
@@ -150,7 +150,7 @@ public abstract class DBAppenderBase<E> extends AppenderBase<E> {
// A ResultSet cursor is initially positioned before the first row;
// the first call to the method next makes the first row the current row
rs.next();
- int eventId = rs.getInt(1);
+ long eventId = rs.getLong(1);
rs.close();
-----------------------------------------------------------------------
Summary of changes:
.../java/ch/qos/logback/access/db/DBAppender.java | 6 +-
.../java/ch/qos/logback/classic/db/DBAppender.java | 17 ++++---
.../java/ch/qos/logback/classic/db/dialect/h2.sql | 57 ++++++++++----------
.../ch/qos/logback/classic/db/dialect/hsqldb.sql | 54 +++++++++---------
.../qos/logback/classic/db/DBAppenderH2Test.java | 31 ++++++++---
.../classic/db/DBAppenderH2TestFixture.java | 58 ++++++++++----------
.../qos/logback/classic/db/DBAppenderHSQLTest.java | 30 ++++++++---
.../classic/db/DBAppenderHSQLTestFixture.java | 54 +++++++++---------
.../ch/qos/logback/classic/db/PackageTest.java | 3 +-
.../ch/qos/logback/core/db/DBAppenderBase.java | 4 +-
10 files changed, 174 insertions(+), 140 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0