Skip to content

Commit 1fd3f4e

Browse files
committed
- fixed LBCLASSIC-187 by adding 4 new columns to the logging_event table
1 parent cc1540f commit 1fd3f4e

22 files changed

Lines changed: 224 additions & 73 deletions

File tree

logback-access/src/main/java/ch/qos/logback/access/db/DBAppender.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,20 @@ public DBAppender() {
7070
}
7171

7272
@Override
73-
protected void subAppend(Object eventObject, Connection connection,
73+
protected void subAppend(AccessEvent event, Connection connection,
7474
PreparedStatement insertStatement) throws Throwable {
75-
AccessEvent event = (AccessEvent) eventObject;
7675

7776
addAccessEvent(insertStatement, event);
7877

7978
int updateCount = insertStatement.executeUpdate();
8079
if (updateCount != 1) {
8180
addWarn("Failed to insert access event");
8281
}
83-
82+
}
83+
84+
protected void secondarySubAppend(AccessEvent event, Connection connection,
85+
long eventId) throws Throwable {
8486
if (insertHeaders) {
85-
long eventId = selectEventId(insertStatement, connection);
8687
addRequestHeaders(event, connection, eventId);
8788
}
8889
}

logback-access/src/test/java/ch/qos/logback/access/db/DBAppenderTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public void testAppendHeaders() throws SQLException {
138138

139139
AccessEvent event = createAccessEvent();
140140
appender.append(event);
141-
141+
142142
Statement stmt = connectionSource.getConnection().createStatement();
143143
ResultSet rs = null;
144144
rs = stmt.executeQuery("SELECT * FROM access_event_header");
@@ -169,12 +169,15 @@ public void testAppendHeaders() throws SQLException {
169169

170170
@Test
171171
public void testAppendMultipleEvents() throws SQLException {
172+
setInsertHeadersAndStart(false);
172173
String uri = "testAppendMultipleEvents";
173174
for (int i = 0; i < 10; i++) {
174175
AccessEvent event = createAccessEvent(uri);
175176
appender.append(event);
176177
}
177178

179+
StatusPrinter.print(context);
180+
178181
Statement stmt = connectionSource.getConnection().createStatement();
179182
ResultSet rs = null;
180183
rs = stmt.executeQuery("SELECT * FROM access_event where requestURI='"+uri+"'");
Binary file not shown.

logback-classic/src/main/java/ch/qos/logback/classic/db/DBAppender.java

Lines changed: 59 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,22 @@ public class DBAppender extends DBAppenderBase<ILoggingEvent> {
5050

5151
private DBNameResolver dbNameResolver;
5252

53+
static final int TIMESTMP_INDEX = 1;
54+
static final int FORMATTED_MESSAGE_INDEX = 2;
55+
static final int LOGGER_NAME_INDEX = 3;
56+
static final int LEVEL_STRING_INDEX = 4;
57+
static final int THREAD_NAME_INDEX = 5;
58+
static final int REFERENCE_FLAG_INDEX = 6;
59+
static final int ARG0_INDEX = 7;
60+
static final int ARG1_INDEX = 8;
61+
static final int ARG2_INDEX = 9;
62+
static final int ARG3_INDEX = 10;
63+
static final int CALLER_FILENAME_INDEX = 11;
64+
static final int CALLER_CLASS_INDEX = 12;
65+
static final int CALLER_METHOD_INDEX = 13;
66+
static final int CALLER_LINE_INDEX = 14;
67+
static final int EVENT_ID_INDEX = 15;
68+
5369
static {
5470
// PreparedStatement.getGeneratedKeys() method was added in JDK 1.4
5571
Method getGeneratedKeysMethod;
@@ -81,21 +97,23 @@ public void start() {
8197
}
8298

8399
@Override
84-
protected void subAppend(Object eventObject, Connection connection,
100+
protected void subAppend(ILoggingEvent event, Connection connection,
85101
PreparedStatement insertStatement) throws Throwable {
86-
ILoggingEvent event = (ILoggingEvent) eventObject;
87102

88103
bindLoggingEventWithInsertStatement(insertStatement, event);
104+
bindLoggingEventArgumentsWithPreparedStatement(insertStatement, event.getArgumentArray());
105+
89106
// This is expensive... should we do it every time?
90107
bindCallerDataWithPreparedStatement(insertStatement, event.getCallerData());
91108

92109
int updateCount = insertStatement.executeUpdate();
93110
if (updateCount != 1) {
94111
addWarn("Failed to insert loggingEvent");
95112
}
96-
97-
long eventId = selectEventId(insertStatement, connection);
98-
113+
}
114+
115+
protected void secondarySubAppend(ILoggingEvent event, Connection connection,
116+
long eventId) throws Throwable {
99117
Map<String, String> mergedMap = mergePropertyMaps(event);
100118
insertProperties(mergedMap, connection, eventId);
101119

@@ -106,22 +124,48 @@ protected void subAppend(Object eventObject, Connection connection,
106124

107125
void bindLoggingEventWithInsertStatement(PreparedStatement stmt,
108126
ILoggingEvent event) throws SQLException {
109-
stmt.setLong(1, event.getTimeStamp());
110-
stmt.setString(2, event.getFormattedMessage());
111-
stmt.setString(3, event.getLoggerName());
112-
stmt.setString(4, event.getLevel().toString());
113-
stmt.setString(5, event.getThreadName());
114-
stmt.setShort(6, DBHelper.computeReferenceMask(event));
127+
stmt.setLong(TIMESTMP_INDEX, event.getTimeStamp());
128+
stmt.setString(FORMATTED_MESSAGE_INDEX, event.getFormattedMessage());
129+
stmt.setString(LOGGER_NAME_INDEX, event.getLoggerName());
130+
stmt.setString(LEVEL_STRING_INDEX, event.getLevel().toString());
131+
stmt.setString(THREAD_NAME_INDEX, event.getThreadName());
132+
stmt.setShort(REFERENCE_FLAG_INDEX, DBHelper.computeReferenceMask(event));
115133
}
116134

135+
void bindLoggingEventArgumentsWithPreparedStatement(PreparedStatement stmt,
136+
Object[] argArray) throws SQLException {
137+
138+
int arrayLen = argArray != null ? argArray.length : 0;
139+
140+
for(int i = 0; i < arrayLen && i < 4; i++) {
141+
stmt.setString(ARG0_INDEX+i, truncateTo254(argArray[i].toString()));
142+
}
143+
if(arrayLen < 4) {
144+
for(int i = arrayLen; i < 4; i++) {
145+
stmt.setString(ARG0_INDEX+i, null);
146+
}
147+
}
148+
}
149+
150+
String truncateTo254(String s) {
151+
if(s == null) {
152+
return null;
153+
}
154+
if(s.length() <= 254) {
155+
return s;
156+
} else {
157+
return s.substring(0, 254);
158+
}
159+
}
160+
117161
void bindCallerDataWithPreparedStatement(PreparedStatement stmt,
118162
StackTraceElement[] callerDataArray) throws SQLException {
119163
StackTraceElement callerData = callerDataArray[0];
120164
if (callerData != null) {
121-
stmt.setString(7, callerData.getFileName());
122-
stmt.setString(8, callerData.getClassName());
123-
stmt.setString(9, callerData.getMethodName());
124-
stmt.setString(10, Integer.toString(callerData.getLineNumber()));
165+
stmt.setString(CALLER_FILENAME_INDEX, callerData.getFileName());
166+
stmt.setString(CALLER_CLASS_INDEX, callerData.getClassName());
167+
stmt.setString(CALLER_METHOD_INDEX, callerData.getMethodName());
168+
stmt.setString(CALLER_LINE_INDEX, Integer.toString(callerData.getLineNumber()));
125169
}
126170
}
127171

logback-classic/src/main/java/ch/qos/logback/classic/db/SQLBuilder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,15 @@ static String buildInsertSQL(DBNameResolver dbNameResolver) {
5050
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.LEVEL_STRING)).append(", ");
5151
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.THREAD_NAME)).append(", ");
5252
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.REFERENCE_FLAG)).append(", ");
53+
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.ARG0)).append(", ");
54+
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.ARG1)).append(", ");
55+
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.ARG2)).append(", ");
56+
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.ARG3)).append(", ");
5357
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_FILENAME)).append(", ");
5458
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_CLASS)).append(", ");
5559
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_METHOD)).append(", ");
5660
sqlBuilder.append(dbNameResolver.getColumnName(ColumnName.CALLER_LINE)).append(") ");
57-
sqlBuilder.append(" VALUES (?, ?, ? ,?, ?, ?, ?, ?, ?, ?)");
61+
sqlBuilder.append(" VALUES (?, ?, ? ,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
5862
return sqlBuilder.toString();
5963
}
6064
}

logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/db2.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ CREATE TABLE logging_event
2020
level_string VARCHAR(254) NOT NULL,
2121
thread_name VARCHAR(254),
2222
reference_flag SMALLINT,
23+
arg0 VARCHAR(254),
24+
arg1 VARCHAR(254),
25+
arg2 VARCHAR(254),
26+
arg3 VARCHAR(254),
2327
caller_filename VARCHAR(254) NOT NULL,
2428
caller_class VARCHAR(254) NOT NULL,
2529
caller_method VARCHAR(254) NOT NULL,

logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/deleteTables.sql

Lines changed: 0 additions & 3 deletions
This file was deleted.

logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/h2.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ CREATE TABLE logging_event (
1414
level_string VARCHAR(256) NOT NULL,
1515
thread_name VARCHAR(256),
1616
reference_flag SMALLINT,
17+
arg0 VARCHAR(256),
18+
arg1 VARCHAR(256),
19+
arg2 VARCHAR(256),
20+
arg3 VARCHAR(256),
1721
caller_filename VARCHAR(256),
1822
caller_class VARCHAR(256),
1923
caller_method VARCHAR(256),

logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/hsqldb.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ CREATE TABLE logging_event (
1313
level_string VARCHAR(256) NOT NULL,
1414
thread_name VARCHAR(256),
1515
reference_flag SMALLINT,
16+
arg0 VARCHAR(256),
17+
arg1 VARCHAR(256),
18+
arg2 VARCHAR(256),
19+
arg3 VARCHAR(256),
1620
caller_filename VARCHAR(256),
1721
caller_class VARCHAR(256),
1822
caller_method VARCHAR(256),

logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/mssql.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ CREATE TABLE logging_event
1313
level_string VARCHAR(254) NOT NULL,
1414
thread_name VARCHAR(254),
1515
reference_flag SMALLINT,
16+
arg0 VARCHAR(254),
17+
arg1 VARCHAR(254),
18+
arg2 VARCHAR(254),
19+
arg3 VARCHAR(254),
1620
caller_filename VARCHAR(254) NOT NULL,
1721
caller_class VARCHAR(254) NOT NULL,
1822
caller_method VARCHAR(254) NOT NULL,

0 commit comments

Comments
 (0)