Skip to content

Commit d9b306b

Browse files
committed
Allow context.log to log objects (vua util.inspect)
1 parent 481c691 commit d9b306b

File tree

4 files changed

+32
-5
lines changed

4 files changed

+32
-5
lines changed

src/WebJobs.Script/Description/NodeFunctionInvoker.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,13 @@ private Dictionary<string, object> CreateScriptExecutionContext(object input, Tr
248248
// create a TraceWriter wrapper that can be exposed to Node.js
249249
var log = (Func<object, Task<object>>)(p =>
250250
{
251-
string text = (string)p;
252-
traceWriter.Verbose(text);
253-
fileTraceWriter.Verbose(text);
251+
string text = p as string;
252+
if (text != null)
253+
{
254+
traceWriter.Verbose(text);
255+
fileTraceWriter.Verbose(text);
256+
}
257+
254258
return Task.FromResult<object>(null);
255259
});
256260

src/WebJobs.Script/functionTemplate.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

4-
var f = require('{0}');
4+
var f = require('{0}'),
5+
util = require('util');
56

67
return function (context, callback) {{
8+
var origLog = context.log;
9+
context.log = function(value) {{
10+
origLog(util.inspect(value));
11+
}};
12+
713
context.done = function(err, result) {{
814
if (err) {{
915
callback(err);

test/WebJobs.Script.Tests/NodeEndToEndTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Diagnostics;
67
using System.IO;
78
using System.Linq;
89
using System.Net;
910
using System.Net.Http;
1011
using System.Net.Http.Headers;
1112
using System.Threading.Tasks;
13+
using Microsoft.Azure.WebJobs.Host;
1214
using Newtonsoft.Json;
1315
using Newtonsoft.Json.Linq;
1416
using Xunit;
@@ -92,6 +94,13 @@ public async Task ManualTrigger()
9294
{ "input", testData }
9395
};
9496
await Fixture.Host.CallAsync("ManualTrigger", arguments);
97+
98+
// verify use of context.log to log complex objects
99+
TraceEvent scriptTrace = Fixture.TraceWriter.Traces.Single(p => p.Message.Contains(testData));
100+
Assert.Equal(TraceLevel.Verbose, scriptTrace.Level);
101+
JObject logEntry = JObject.Parse(scriptTrace.Message);
102+
Assert.Equal("Node.js manually triggered function called!", logEntry["message"]);
103+
Assert.Equal(testData, logEntry["input"]);
95104
}
96105

97106
[Fact]
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
module.exports = function (context, input) {
2-
context.log('Node.js manually triggered function called with input ' + input);
2+
var logEntry = {
3+
message: 'Node.js manually triggered function called!',
4+
input: input
5+
};
6+
context.log(logEntry);
7+
context.log(null);
8+
context.log(1234);
9+
context.log(true);
10+
311
context.done();
412
}

0 commit comments

Comments
 (0)