Skip to content

Commit bfe2872

Browse files
Implemented CRITICAL marker and log messages.
1 parent b9ac85e commit bfe2872

8 files changed

Lines changed: 95 additions & 52 deletions

File tree

dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/LoggerHelper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ public abstract class LoggerHelper {
2020
* {@code enabled}.
2121
*
2222
* @param level the {@link LogLevel} to log at
23+
* @param marker the {@link Marker} to log
2324
* @param message the message to log
2425
* @param t the {@link Throwable} to log
2526
*/
26-
public abstract void log(LogLevel level, String message, Throwable t);
27+
public abstract void log(LogLevel level, Marker marker, String message, Throwable t);
2728
}

dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/ddlogger/DDLogger.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,6 @@ private void log(LogLevel level, Marker marker, String msg, Throwable t) {
359359
}
360360

361361
private void alwaysLog(LogLevel level, Marker marker, String msg, Throwable t) {
362-
// TODO Ignoring Marker for now since SLCompatHelper ignores it as well
363-
helper.log(level, msg, t);
362+
helper.log(level, marker, msg, t);
364363
}
365364
}

dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/ddlogger/SwitchableLogLevelFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public boolean enabled(LogLevel level, Marker marker) {
5050
}
5151

5252
@Override
53-
public void log(LogLevel level, String message, Throwable t) {
54-
delegate.log(level, message, t);
53+
public void log(LogLevel level, Marker marker, String message, Throwable t) {
54+
delegate.log(level, marker, message, t);
5555
}
5656
}
5757

dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/simplelogger/SLCompatHelper.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,29 +24,36 @@ class SLCompatHelper extends LoggerHelper {
2424

2525
@Override
2626
public boolean enabled(LogLevel level, Marker marker) {
27-
// SimpleLogger ignores markers
27+
// Due to limited Marker support we assume it's depends on LogLevel only
2828
return level.isEnabled(this.logLevel);
2929
}
3030

3131
@Override
32-
public void log(LogLevel level, String message, Throwable t) {
32+
public void log(LogLevel level, Marker marker, String message, Throwable t) {
3333
long timeMillis = Integer.MIN_VALUE;
3434
if (settings.showDateTime) {
3535
timeMillis = System.currentTimeMillis();
3636
}
37-
log(level, SLCompatFactory.START_TIME, timeMillis, message, t);
37+
log(level, marker, SLCompatFactory.START_TIME, timeMillis, message, t);
3838
}
3939

40-
void log(LogLevel level, long startTimeMillis, long timeMillis, String message, Throwable t) {
40+
void log(
41+
LogLevel level,
42+
Marker marker,
43+
long startTimeMillis,
44+
long timeMillis,
45+
String message,
46+
Throwable t) {
4147
String threadName = null;
4248
if (settings.showThreadName) {
4349
threadName = Thread.currentThread().getName();
4450
}
45-
log(level, startTimeMillis, timeMillis, threadName, message, t);
51+
log(level, marker, startTimeMillis, timeMillis, threadName, message, t);
4652
}
4753

4854
void log(
4955
LogLevel level,
56+
Marker marker,
5057
long startTimeMillis,
5158
long timeMillis,
5259
String threadName,
@@ -71,6 +78,8 @@ void log(
7178

7279
if (settings.warnLevelString != null && level == LogLevel.WARN) {
7380
buf.append(settings.warnLevelString);
81+
} else if (marker != null) {
82+
buf.append(marker.getName());
7483
} else {
7584
buf.append(level.name());
7685
}

dd-java-agent/agent-logging/src/test/groovy/datadog/trace/logging/LogValidatingSpecification.groovy

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package datadog.trace.logging
22

3+
import org.slf4j.Marker
34
import spock.lang.Specification
45

56
abstract class LogValidatingSpecification extends Specification {
@@ -11,11 +12,11 @@ abstract class LogValidatingSpecification extends Specification {
1112
new NoStackException(emsg)
1213
}
1314

14-
private static validateLogLine(LogValidator validator, boolean enabled, String level, String msg, String emsg) {
15+
private static validateLogLine(LogValidator validator, boolean enabled, String level, String marker, String msg, String emsg) {
1516
def current = validator.outputStream.toString()
1617
def expected = ""
1718
if (enabled) {
18-
expected = "$level ${validator.name} - $msg\n"
19+
expected = marker == null ? "$level ${validator.name} - $msg\n" : "$marker ${validator.name} - $msg\n"
1920
expected = emsg == null ? expected : "$expected${NoStackException.getName()}: $emsg\n"
2021
}
2122
assert current == expected
@@ -43,56 +44,80 @@ abstract class LogValidatingSpecification extends Specification {
4344
new LogValidator(name, this.output)
4445
}
4546

46-
void log(boolean enabled, String level, String msg) {
47-
LogValidatingSpecification.validateLogLine(this, enabled, level, msg, null)
47+
void log(boolean enabled, String level, String marker, String msg) {
48+
LogValidatingSpecification.validateLogLine(this, enabled, level, marker, msg, null)
4849
}
4950

50-
void log(boolean enabled, String level, String msg, String emsg) {
51-
LogValidatingSpecification.validateLogLine(this, enabled, level, msg, emsg)
51+
void log(boolean enabled, String level, String marker, String msg, String emsg) {
52+
LogValidatingSpecification.validateLogLine(this, enabled, level, marker, msg, emsg)
53+
}
54+
55+
void trace(boolean enabled, Marker marker, String msg) {
56+
log(enabled, "TRACE", marker.getName(), msg)
5257
}
5358

5459
void trace(boolean enabled, String msg) {
55-
log(enabled, "TRACE", msg)
60+
log(enabled, "TRACE", null, msg)
5661
}
5762

5863
void trace(boolean enabled, String msg, String emsg) {
59-
log(enabled, "TRACE", msg, emsg)
64+
log(enabled, "TRACE", null, msg, emsg)
65+
}
66+
67+
void debug(boolean enabled, Marker marker, String msg) {
68+
log(enabled, "DEBUG", marker.getName(), msg)
6069
}
6170

6271
void debug(boolean enabled, String msg) {
63-
log(enabled, "DEBUG", msg)
72+
log(enabled, "DEBUG", null, msg)
6473
}
6574

6675
void debug(boolean enabled, String msg, String emsg) {
67-
log(enabled, "DEBUG", msg, emsg)
76+
log(enabled, "DEBUG", null, msg, emsg)
77+
}
78+
79+
void info(boolean enabled, Marker marker, String msg) {
80+
log(enabled, "INFO", marker.getName(), msg)
6881
}
6982

7083
void info(boolean enabled, String msg) {
71-
log(enabled, "INFO", msg)
84+
log(enabled, "INFO", null, msg)
7285
}
7386

7487
void info(boolean enabled, String msg, String emsg) {
75-
log(enabled, "INFO", msg, emsg)
88+
log(enabled, "INFO", null, msg, emsg)
89+
}
90+
91+
void warn(boolean enabled, Marker marker, String msg) {
92+
log(enabled, "WARN", marker.getName(), msg)
7693
}
7794

7895
void warn(boolean enabled, String msg) {
79-
log(enabled, "WARN", msg)
96+
log(enabled, "WARN", null, msg)
97+
}
98+
99+
void warn(boolean enabled, Marker marker, String msg, String emsg) {
100+
log(enabled, "WARN", marker.getName(), msg, emsg)
80101
}
81102

82103
void warn(boolean enabled, String msg, String emsg) {
83-
log(enabled, "WARN", msg, emsg)
104+
log(enabled, "WARN", null, msg, emsg)
105+
}
106+
107+
void error(boolean enabled, Marker marker, String msg) {
108+
log(enabled, "ERROR", marker.getName(), msg)
84109
}
85110

86111
void error(boolean enabled, String msg) {
87-
log(enabled, "ERROR", msg)
112+
log(enabled, "ERROR", null, msg)
88113
}
89114

90115
void error(boolean enabled, String msg, String emsg) {
91-
log(enabled, "ERROR", msg, emsg)
116+
log(enabled, "ERROR", null, msg, emsg)
92117
}
93118

94119
void nothing() {
95-
log(false, "IGNORED", null, null)
120+
log(false, "IGNORED", null, null, null)
96121
}
97122
}
98123

dd-java-agent/agent-logging/src/test/groovy/datadog/trace/logging/ddlogger/DDLoggerTest.groovy

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,13 @@ class DDLoggerTest extends LogValidatingSpecification {
102102
logger.trace("m1", exception("d"))
103103
validator.trace(trace, "m1", "d")
104104
logger.trace(marker, "m2")
105-
validator.trace(trace, "m2")
105+
validator.trace(trace, marker, "m2")
106106
logger.trace(marker, "m2 {}", "e")
107-
validator.trace(trace, "m2 e")
107+
validator.trace(trace, marker, "m2 e")
108108
logger.trace(marker, "m2 {} {}", "f2", "f1")
109-
validator.trace(trace, "m2 f2 f1")
109+
validator.trace(trace, marker, "m2 f2 f1")
110110
logger.trace(marker, "m2 {} {} {} {}", "g4", "g3", "g2", "g1")
111-
validator.trace(trace, "m2 g4 g3 g2 g1")
111+
validator.trace(trace, marker, "m2 g4 g3 g2 g1")
112112
logger.trace("m2", exception("h"))
113113
validator.trace(trace, "m2", "h")
114114

@@ -124,13 +124,13 @@ class DDLoggerTest extends LogValidatingSpecification {
124124
logger.debug("m1", exception("d"))
125125
validator.debug(debug, "m1", "d")
126126
logger.debug(marker, "m2")
127-
validator.debug(debug, "m2")
127+
validator.debug(debug, marker, "m2")
128128
logger.debug(marker, "m2 {}", "e")
129-
validator.debug(debug, "m2 e")
129+
validator.debug(debug, marker, "m2 e")
130130
logger.debug(marker, "m2 {} {}", "f2", "f1")
131-
validator.debug(debug, "m2 f2 f1")
131+
validator.debug(debug, marker, "m2 f2 f1")
132132
logger.debug(marker, "m2 {} {} {} {}", "g4", "g3", "g2", "g1")
133-
validator.debug(debug, "m2 g4 g3 g2 g1")
133+
validator.debug(debug, marker, "m2 g4 g3 g2 g1")
134134
logger.debug("m2", exception("h"))
135135
validator.debug(debug, "m2", "h")
136136

@@ -146,13 +146,13 @@ class DDLoggerTest extends LogValidatingSpecification {
146146
logger.info("m1", exception("d"))
147147
validator.info(info, "m1", "d")
148148
logger.info(marker, "m2")
149-
validator.info(info, "m2")
149+
validator.info(info, marker, "m2")
150150
logger.info(marker, "m2 {}", "e")
151-
validator.info(info, "m2 e")
151+
validator.info(info, marker, "m2 e")
152152
logger.info(marker, "m2 {} {}", "f2", "f1")
153-
validator.info(info, "m2 f2 f1")
153+
validator.info(info, marker, "m2 f2 f1")
154154
logger.info(marker, "m2 {} {} {} {}", "g4", "g3", "g2", "g1")
155-
validator.info(info, "m2 g4 g3 g2 g1")
155+
validator.info(info, marker, "m2 g4 g3 g2 g1")
156156
logger.info("m2", exception("h"))
157157
validator.info(info, "m2", "h")
158158

@@ -168,13 +168,13 @@ class DDLoggerTest extends LogValidatingSpecification {
168168
logger.warn("m1", exception("d"))
169169
validator.warn(warn, "m1", "d")
170170
logger.warn(marker, "m2")
171-
validator.warn(warn, "m2")
171+
validator.warn(warn, marker, "m2")
172172
logger.warn(marker, "m2 {}", "e")
173-
validator.warn(warn, "m2 e")
173+
validator.warn(warn, marker, "m2 e")
174174
logger.warn(marker, "m2 {} {}", "f2", "f1")
175-
validator.warn(warn, "m2 f2 f1")
175+
validator.warn(warn, marker, "m2 f2 f1")
176176
logger.warn(marker, "m2 {} {} {} {}", "g4", "g3", "g2", "g1")
177-
validator.warn(warn, "m2 g4 g3 g2 g1")
177+
validator.warn(warn, marker, "m2 g4 g3 g2 g1")
178178
logger.warn("m2", exception("h"))
179179
validator.warn(warn, "m2", "h")
180180

@@ -190,13 +190,13 @@ class DDLoggerTest extends LogValidatingSpecification {
190190
logger.error("m1", exception("d"))
191191
validator.error(error, "m1", "d")
192192
logger.error(marker, "m2")
193-
validator.error(error, "m2")
193+
validator.error(error, marker, "m2")
194194
logger.error(marker, "m2 {}", "e")
195-
validator.error(error, "m2 e")
195+
validator.error(error, marker, "m2 e")
196196
logger.error(marker, "m2 {} {}", "f2", "f1")
197-
validator.error(error, "m2 f2 f1")
197+
validator.error(error, marker, "m2 f2 f1")
198198
logger.error(marker, "m2 {} {} {} {}", "g4", "g3", "g2", "g1")
199-
validator.error(error, "m2 g4 g3 g2 g1")
199+
validator.error(error, marker, "m2 g4 g3 g2 g1")
200200
logger.error("m2", exception("h"))
201201
validator.error(error, "m2", "h")
202202
}

dd-java-agent/agent-logging/src/test/groovy/datadog/trace/logging/simplelogger/SLCompatHelperTest.groovy

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class SLCompatHelperTest extends Specification {
7070
def printStream = new PrintStream(outputStream, true)
7171
def settings = new SLCompatSettings(new Properties(), new Properties(), printStream)
7272
def helper = new SLCompatHelper(name, settings)
73-
helper.log(level, msg, null)
73+
helper.log(level, null, msg, null)
7474

7575
then:
7676
outputStream.toString() == expected
@@ -91,7 +91,7 @@ class SLCompatHelperTest extends Specification {
9191
def settings = new SLCompatSettings(new Properties(), new Properties(), printStream)
9292
def helper = new SLCompatHelper("foo", settings)
9393
def exception = new NoStackException("wrong")
94-
helper.log(LogLevel.ERROR, "log", exception)
94+
helper.log(LogLevel.ERROR, null, "log", exception)
9595

9696
expect:
9797
outputStream.toString() == "[$thread] ERROR foo - log\n${NoStackException.getName()}: wrong\n"
@@ -108,7 +108,7 @@ class SLCompatHelperTest extends Specification {
108108
try {
109109
throw new IOException("wrong")
110110
} catch(Exception exception) {
111-
helper.log(level, "log", exception)
111+
helper.log(level, null, "log", exception)
112112
}
113113

114114
expect:
@@ -127,7 +127,7 @@ class SLCompatHelperTest extends Specification {
127127
props.setProperty(SLCompatSettings.Keys.SHOW_DATE_TIME, "true")
128128
def settings = new SLCompatSettings(props, new Properties(), printStream)
129129
def helper = new SLCompatHelper("foo", settings)
130-
helper.log(LogLevel.ERROR, "log", null)
130+
helper.log(LogLevel.ERROR, null, "log", null)
131131

132132
expect:
133133
outputStream.toString() ==~ /^\d+ ERROR foo - log\n$/
@@ -141,7 +141,7 @@ class SLCompatHelperTest extends Specification {
141141
def dateTimeFormatter = SLCompatSettings.DTFormatter.create(dateTFS)
142142
def settings = new SLCompatSettings(props, props, warnS, showB, printStream, showS, showL, showT, dateTimeFormatter, showDT, LogLevel.INFO, false)
143143
def helper = new SLCompatHelper("foo.bar", settings)
144-
helper.log(level, 0, 4711, "thread", "log", null)
144+
helper.log(level, null, 0, 4711, "thread", "log", null)
145145

146146
then:
147147
outputStream.toString() == expected

dd-java-agent/appsec/src/main/java/com/datadog/appsec/util/StandardizedLogging.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@
55
import com.datadog.appsec.report.raw.events.attack._definitions.rule.Rule010;
66
import io.sqreen.powerwaf.Powerwaf;
77
import org.slf4j.Logger;
8+
import org.slf4j.Marker;
9+
import org.slf4j.MarkerFactory;
810

911
public class StandardizedLogging {
12+
13+
private static final Marker CRITICAL = MarkerFactory.getMarker("CRITICAL");
14+
1015
public static void appSecStartupError(Logger logger, Throwable t) { // C1
1116
logger.error(
17+
CRITICAL,
1218
"AppSec could not start because of an unexpected error. "
1319
+ "No security activities will be collected. Please contact support at "
1420
+ "https://docs.datadoghq.com/help/ for help.",
@@ -30,6 +36,7 @@ public static void appSecStartupError(Logger logger, Throwable t) { // C1
3036
// C3
3137
public static void libddwafCannotBeLoaded(Logger logger, String libc) {
3238
logger.error(
39+
CRITICAL,
3340
"AppSec could not load libddwaf native library, as a result, "
3441
+ "AppSec could not start. No security activities will be collected. "
3542
+ "Please contact support at https://docs.datadoghq.com/help/ for help. "
@@ -44,6 +51,7 @@ public static void libddwafCannotBeLoaded(Logger logger, String libc) {
4451
// C4:
4552
public static void rulesFileNotFound(Logger logger, String filename) {
4653
logger.error(
54+
CRITICAL,
4755
"AppSec could not find the rules file in path {}. "
4856
+ "AppSec will not run any protections in this application. No security activities will be collected.",
4957
filename);
@@ -69,6 +77,7 @@ public String toString() {
6977
/* C5: Cannot be fully implemented: notice that all rules are invalid needs cooperation from libddwaf */
7078
public static void rulesFileInvalid(Logger logger, String filename, RulesInvalidReason reason) {
7179
logger.error(
80+
CRITICAL,
7281
"AppSec could not read the rule file {} as it was invalid: {}. "
7382
+ "AppSec will not run any protections in this application.",
7483
filename,

0 commit comments

Comments
 (0)