mirror of
https://github.com/corda/corda.git
synced 2025-01-05 20:54:13 +00:00
add optional avian.error.log system property
This property may be used to specify a file name to use for printing stack traces for unhandled exceptions. The default is stderr.
This commit is contained in:
parent
51c8d7511a
commit
e5ecb5b549
@ -2258,6 +2258,7 @@ Machine::Machine(System* system, Heap* heap, Finder* bootFinder,
|
||||
referenceLock(0),
|
||||
shutdownLock(0),
|
||||
libraries(0),
|
||||
errorLog(0),
|
||||
types(0),
|
||||
roots(0),
|
||||
finalizers(0),
|
||||
@ -3888,19 +3889,19 @@ printTrace(Thread* t, object exception)
|
||||
|
||||
for (object e = exception; e; e = throwableCause(t, e)) {
|
||||
if (e != exception) {
|
||||
fprintf(stderr, "caused by: ");
|
||||
fprintf(errorLog(t), "caused by: ");
|
||||
}
|
||||
|
||||
fprintf(stderr, "%s", &byteArrayBody
|
||||
fprintf(errorLog(t), "%s", &byteArrayBody
|
||||
(t, className(t, objectClass(t, e)), 0));
|
||||
|
||||
if (throwableMessage(t, e)) {
|
||||
object m = throwableMessage(t, e);
|
||||
THREAD_RUNTIME_ARRAY(t, char, message, stringLength(t, m) + 1);
|
||||
stringChars(t, m, RUNTIME_ARRAY_BODY(message));
|
||||
fprintf(stderr, ": %s\n", RUNTIME_ARRAY_BODY(message));
|
||||
fprintf(errorLog(t), ": %s\n", RUNTIME_ARRAY_BODY(message));
|
||||
} else {
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(errorLog(t), "\n");
|
||||
}
|
||||
|
||||
object trace = throwableTrace(t, e);
|
||||
@ -3914,17 +3915,17 @@ printTrace(Thread* t, object exception)
|
||||
int line = t->m->processor->lineNumber
|
||||
(t, traceElementMethod(t, e), traceElementIp(t, e));
|
||||
|
||||
fprintf(stderr, " at %s.%s ", class_, method);
|
||||
fprintf(errorLog(t), " at %s.%s ", class_, method);
|
||||
|
||||
switch (line) {
|
||||
case NativeLine:
|
||||
fprintf(stderr, "(native)\n");
|
||||
fprintf(errorLog(t), "(native)\n");
|
||||
break;
|
||||
case UnknownLine:
|
||||
fprintf(stderr, "(unknown line)\n");
|
||||
fprintf(errorLog(t), "(unknown line)\n");
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "(line %d)\n", line);
|
||||
fprintf(errorLog(t), "(line %d)\n", line);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3934,7 +3935,7 @@ printTrace(Thread* t, object exception)
|
||||
}
|
||||
}
|
||||
|
||||
fflush(stderr);
|
||||
fflush(errorLog(t));
|
||||
}
|
||||
|
||||
object
|
||||
|
@ -1298,6 +1298,7 @@ class Machine {
|
||||
System::Monitor* referenceLock;
|
||||
System::Monitor* shutdownLock;
|
||||
System::Library* libraries;
|
||||
FILE* errorLog;
|
||||
object types;
|
||||
object roots;
|
||||
object finalizers;
|
||||
@ -3577,6 +3578,21 @@ methodClone(Thread* t, object method)
|
||||
methodCode(t, method));
|
||||
}
|
||||
|
||||
inline FILE*
|
||||
errorLog(Thread* t)
|
||||
{
|
||||
if (t->m->errorLog == 0) {
|
||||
const char* path = findProperty(t, "avian.error.log");
|
||||
if (path) {
|
||||
t->m->errorLog = vm::fopen(path, "wb");
|
||||
} else {
|
||||
t->m->errorLog = stderr;
|
||||
}
|
||||
}
|
||||
|
||||
return t->m->errorLog;
|
||||
}
|
||||
|
||||
} // namespace vm
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user