#endif
static njs_int_t njs_ext_console_log(njs_vm_t *vm, njs_value_t *args,
- njs_uint_t nargs, njs_index_t indent, njs_value_t *retval);
+ njs_uint_t nargs, njs_index_t magic, njs_value_t *retval);
static njs_int_t njs_ext_console_time(njs_vm_t *vm, njs_value_t *args,
njs_uint_t nargs, njs_index_t unused, njs_value_t *retval);
static njs_int_t njs_ext_console_time_end(njs_vm_t *vm, njs_value_t *args,
.enumerable = 1,
.u.method = {
.native = njs_ext_console_log,
- .magic8 = 1,
+#define NJS_LOG_DUMP 16
+#define NJS_LOG_MASK 15
+ .magic8 = NJS_LOG_LEVEL_INFO | NJS_LOG_DUMP,
+ }
+ },
+
+ {
+ .flags = NJS_EXTERN_METHOD,
+ .name.string = njs_str("error"),
+ .writable = 1,
+ .configurable = 1,
+ .enumerable = 1,
+ .u.method = {
+ .native = njs_ext_console_log,
+ .magic8 = NJS_LOG_LEVEL_ERROR,
+ }
+ },
+
+ {
+ .flags = NJS_EXTERN_METHOD,
+ .name.string = njs_str("info"),
+ .writable = 1,
+ .configurable = 1,
+ .enumerable = 1,
+ .u.method = {
+ .native = njs_ext_console_log,
+ .magic8 = NJS_LOG_LEVEL_INFO,
}
},
.enumerable = 1,
.u.method = {
.native = njs_ext_console_log,
+ .magic8 = NJS_LOG_LEVEL_INFO,
}
},
}
},
+ {
+ .flags = NJS_EXTERN_METHOD,
+ .name.string = njs_str("warn"),
+ .writable = 1,
+ .configurable = 1,
+ .enumerable = 1,
+ .u.method = {
+ .native = njs_ext_console_log,
+ .magic8 = NJS_LOG_LEVEL_WARN,
+ }
+ },
+
};
static njs_int_t
njs_ext_console_log(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
- njs_index_t indent, njs_value_t *retval)
+ njs_index_t magic, njs_value_t *retval)
{
- njs_str_t msg;
- njs_uint_t n;
+ njs_str_t msg;
+ njs_uint_t n;
+ njs_log_level_t level;
n = 1;
+ level = (njs_log_level_t) magic & NJS_LOG_MASK;
while (n < nargs) {
- if (njs_vm_value_dump(vm, &msg, njs_argument(args, n), 1, indent)
+ if (njs_vm_value_dump(vm, &msg, njs_argument(args, n), 1,
+ !!(magic & NJS_LOG_DUMP))
== NJS_ERROR)
{
return NJS_ERROR;
}
- njs_vm_log(vm, "%s", (n != 1) ? " " : "");
- njs_vm_log(vm, "%*s", msg.length, msg.start);
+ njs_vm_logger(vm, level, "%*s\n", msg.length, msg.start);
n++;
}
- if (nargs > 1) {
- njs_vm_log(vm, "\n");
- }
-
njs_value_undefined_set(retval);
return NJS_OK;
njs_console_log(njs_vm_t *vm, njs_external_ptr_t external,
njs_log_level_t level, const u_char *start, size_t length)
{
- if (level == NJS_LOG_LEVEL_ERROR) {
- njs_stderror("%*s", length, start);
-
- } else {
+ switch (level) {
+ case NJS_LOG_LEVEL_INFO:
njs_printf("%*s", length, start);
+ break;
+ case NJS_LOG_LEVEL_WARN:
+ njs_printf("W: %*s", length, start);
+ break;
+ case NJS_LOG_LEVEL_ERROR:
+ njs_printf("E: %*s", length, start);
+ break;
}
}
{"console.log(1)\r\n"
"console.log(1)\r\n1\r\nundefined\r\n>> "}
{"console.log(1, 'a')\r\n"
- "console.log(1, 'a')\r\n1 a\r\nundefined\r\n>> "}
+ "console.log(1, 'a')\r\n1\r\na\r\nundefined\r\n>> "}
{"print(1, 'a')\r\n"
- "print(1, 'a')\r\n1 a\r\nundefined\r\n>> "}
+ "print(1, 'a')\r\n1\r\na\r\nundefined\r\n>> "}
{"console.log('\\tабв\\nгд')\r\n"
"console.log('\\\\tабв\\\\nгд')\r\n\tабв\r\nгд\r\nundefined\r\n>> "}
{"console.dump()\r\n"
{"console.dump(1)\r\n"
"console.dump(1)\r\n1\r\nundefined\r\n>> "}
{"console.dump(1, 'a')\r\n"
- "console.dump(1, 'a')\r\n1 a\r\nundefined\r\n>> "}
+ "console.dump(1, 'a')\r\n1\r\na\r\nundefined\r\n>> "}
+ {"console.error(42)\r\n"
+ "console.error(42)\r\nE: 42\r\nundefined\r\n>> "}
+ {"console.info(23)\r\n"
+ "console.info(23)\r\n23\r\nundefined\r\n>> "}
+ {"console.warn(37)\r\n"
+ "console.warn(37)\r\nW: 37\r\nundefined\r\n>> "}
}
# console.time* functions
njs_test {
{"var print = console.log.bind(console); print(1, 'a', [1, 2])\r\n"
- "1 a \\\[1,2]\r\nundefined\r\n>> "}
+ "1\r\na\r\n\\\[1,2]\r\nundefined\r\n>> "}
{"var print = console.dump.bind(console); print(1, 'a', [1, 2])\r\n"
- "1 a \\\[\r\n 1,\r\n 2\r\n]\r\nundefined\r\n>> "}
+ "1\r\na\r\n\\\[\r\n 1,\r\n 2\r\n]\r\nundefined\r\n>> "}
{"var print = console.log.bind(console); print(console.a.a)\r\n"
"TypeError: cannot get property \"a\" of undefined"}
{"print(console.a.a)\r\n"
# Backtraces for external objects
njs_test {
- {"console.log(console.a.a)\r\n"
- "console.log(console.a.a)\r\nThrown:\r\nTypeError:*at console.log (native)"}
+ {"console.info(console.a.a)\r\n"
+ "console.info(console.a.a)\r\nThrown:\r\nTypeError:*at console.info (native)"}
}
# dumper
njs_test {
{"var t = setImmediate(console.log, 'a', 'aa')\r\n"
- "undefined\r\na aa"}
+ "undefined\r\na\r\naa"}
}
njs_test {