Adding support for capturing the output of a node instance for custom logging implementations.

This commit is contained in:
Paul Knopf
2016-07-15 00:42:17 -04:00
committed by SteveSandersonMS
parent a14d9ba2df
commit 27ffa72e0d
7 changed files with 52 additions and 9 deletions

View File

@@ -4,6 +4,7 @@ using System.Net.Http;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.NodeServices.Util;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
@@ -32,14 +33,15 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
private bool _disposed;
private int _portNumber;
public HttpNodeInstance(string projectPath, string[] watchFileExtensions, int port = 0)
public HttpNodeInstance(string projectPath, string[] watchFileExtensions, int port = 0, INodeInstanceOutputLogger nodeInstanceOutputLogger = null)
: base(
EmbeddedResourceReader.Read(
typeof(HttpNodeInstance),
"/Content/Node/entrypoint-http.js"),
projectPath,
watchFileExtensions,
MakeCommandLineOptions(port))
MakeCommandLineOptions(port),
nodeInstanceOutputLogger)
{
_client = new HttpClient();
}

View File

@@ -3,6 +3,7 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.NodeServices.Util;
namespace Microsoft.AspNetCore.NodeServices.HostingModels
{
@@ -26,13 +27,18 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
private readonly Process _nodeProcess;
private bool _nodeProcessNeedsRestart;
private readonly string[] _watchFileExtensions;
private INodeInstanceOutputLogger _nodeInstanceOutputLogger;
public OutOfProcessNodeInstance(
string entryPointScript,
string projectPath,
string[] watchFileExtensions,
string commandLineArguments)
string commandLineArguments,
INodeInstanceOutputLogger nodeOutputLogger)
{
_nodeInstanceOutputLogger = nodeOutputLogger;
if(_nodeInstanceOutputLogger == null)
_nodeInstanceOutputLogger = new ConsoleNodeInstanceOutputLogger();
_entryPointScript = new StringAsTempFile(entryPointScript);
var startInfo = PrepareNodeProcessStartInfo(_entryPointScript.FileName, projectPath, commandLineArguments);
@@ -106,12 +112,12 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
protected virtual void OnOutputDataReceived(string outputData)
{
Console.WriteLine("[Node] " + outputData);
_nodeInstanceOutputLogger.LogOutputData(outputData);
}
protected virtual void OnErrorDataReceived(string errorData)
{
Console.WriteLine("[Node] " + errorData);
_nodeInstanceOutputLogger.LogErrorData(errorData);
}
protected virtual void Dispose(bool disposing)

View File

@@ -5,6 +5,7 @@ using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.NodeServices.HostingModels.PhysicalConnections;
using Microsoft.AspNetCore.NodeServices.HostingModels.VirtualConnections;
using Microsoft.AspNetCore.NodeServices.Util;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
@@ -36,13 +37,14 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
private string _socketAddress;
private VirtualConnectionClient _virtualConnectionClient;
public SocketNodeInstance(string projectPath, string[] watchFileExtensions, string socketAddress) : base(
public SocketNodeInstance(string projectPath, string[] watchFileExtensions, string socketAddress, INodeInstanceOutputLogger nodeInstanceOutputLogger = null) : base(
EmbeddedResourceReader.Read(
typeof(SocketNodeInstance),
"/Content/Node/entrypoint-socket.js"),
projectPath,
watchFileExtensions,
MakeNewCommandLineOptions(socketAddress))
MakeNewCommandLineOptions(socketAddress),
nodeInstanceOutputLogger)
{
_socketAddress = socketAddress;
}