mirror of
https://github.com/aspnet/JavaScriptServices.git
synced 2025-12-23 01:58:29 +00:00
Adding support for capturing the output of a node instance for custom logging implementations.
This commit is contained in:
committed by
SteveSandersonMS
parent
a14d9ba2df
commit
27ffa72e0d
@@ -46,10 +46,10 @@ namespace Microsoft.AspNetCore.NodeServices
|
|||||||
switch (options.HostingModel)
|
switch (options.HostingModel)
|
||||||
{
|
{
|
||||||
case NodeHostingModel.Http:
|
case NodeHostingModel.Http:
|
||||||
return new HttpNodeInstance(options.ProjectPath, options.WatchFileExtensions, /* port */ 0);
|
return new HttpNodeInstance(options.ProjectPath, options.WatchFileExtensions, /* port */ 0, options.NodeInstanceOutputLogger);
|
||||||
case NodeHostingModel.Socket:
|
case NodeHostingModel.Socket:
|
||||||
var pipeName = "pni-" + Guid.NewGuid().ToString("D"); // Arbitrary non-clashing string
|
var pipeName = "pni-" + Guid.NewGuid().ToString("D"); // Arbitrary non-clashing string
|
||||||
return new SocketNodeInstance(options.ProjectPath, options.WatchFileExtensions, pipeName);
|
return new SocketNodeInstance(options.ProjectPath, options.WatchFileExtensions, pipeName, options.NodeInstanceOutputLogger);
|
||||||
default:
|
default:
|
||||||
throw new ArgumentException("Unknown hosting model: " + options.HostingModel);
|
throw new ArgumentException("Unknown hosting model: " + options.HostingModel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.AspNetCore.NodeServices.HostingModels;
|
using Microsoft.AspNetCore.NodeServices.HostingModels;
|
||||||
|
using Microsoft.AspNetCore.NodeServices.Util;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.NodeServices
|
namespace Microsoft.AspNetCore.NodeServices
|
||||||
{
|
{
|
||||||
@@ -19,5 +20,6 @@ namespace Microsoft.AspNetCore.NodeServices
|
|||||||
public Func<INodeInstance> NodeInstanceFactory { get; set; }
|
public Func<INodeInstance> NodeInstanceFactory { get; set; }
|
||||||
public string ProjectPath { get; set; }
|
public string ProjectPath { get; set; }
|
||||||
public string[] WatchFileExtensions { get; set; }
|
public string[] WatchFileExtensions { get; set; }
|
||||||
|
public INodeInstanceOutputLogger NodeInstanceOutputLogger { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ using System.Net.Http;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.NodeServices.Util;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Serialization;
|
using Newtonsoft.Json.Serialization;
|
||||||
|
|
||||||
@@ -32,14 +33,15 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
private bool _disposed;
|
private bool _disposed;
|
||||||
private int _portNumber;
|
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(
|
: base(
|
||||||
EmbeddedResourceReader.Read(
|
EmbeddedResourceReader.Read(
|
||||||
typeof(HttpNodeInstance),
|
typeof(HttpNodeInstance),
|
||||||
"/Content/Node/entrypoint-http.js"),
|
"/Content/Node/entrypoint-http.js"),
|
||||||
projectPath,
|
projectPath,
|
||||||
watchFileExtensions,
|
watchFileExtensions,
|
||||||
MakeCommandLineOptions(port))
|
MakeCommandLineOptions(port),
|
||||||
|
nodeInstanceOutputLogger)
|
||||||
{
|
{
|
||||||
_client = new HttpClient();
|
_client = new HttpClient();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Diagnostics;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.NodeServices.Util;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
||||||
{
|
{
|
||||||
@@ -26,13 +27,18 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
private readonly Process _nodeProcess;
|
private readonly Process _nodeProcess;
|
||||||
private bool _nodeProcessNeedsRestart;
|
private bool _nodeProcessNeedsRestart;
|
||||||
private readonly string[] _watchFileExtensions;
|
private readonly string[] _watchFileExtensions;
|
||||||
|
private INodeInstanceOutputLogger _nodeInstanceOutputLogger;
|
||||||
|
|
||||||
public OutOfProcessNodeInstance(
|
public OutOfProcessNodeInstance(
|
||||||
string entryPointScript,
|
string entryPointScript,
|
||||||
string projectPath,
|
string projectPath,
|
||||||
string[] watchFileExtensions,
|
string[] watchFileExtensions,
|
||||||
string commandLineArguments)
|
string commandLineArguments,
|
||||||
|
INodeInstanceOutputLogger nodeOutputLogger)
|
||||||
{
|
{
|
||||||
|
_nodeInstanceOutputLogger = nodeOutputLogger;
|
||||||
|
if(_nodeInstanceOutputLogger == null)
|
||||||
|
_nodeInstanceOutputLogger = new ConsoleNodeInstanceOutputLogger();
|
||||||
_entryPointScript = new StringAsTempFile(entryPointScript);
|
_entryPointScript = new StringAsTempFile(entryPointScript);
|
||||||
|
|
||||||
var startInfo = PrepareNodeProcessStartInfo(_entryPointScript.FileName, projectPath, commandLineArguments);
|
var startInfo = PrepareNodeProcessStartInfo(_entryPointScript.FileName, projectPath, commandLineArguments);
|
||||||
@@ -106,12 +112,12 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
|
|
||||||
protected virtual void OnOutputDataReceived(string outputData)
|
protected virtual void OnOutputDataReceived(string outputData)
|
||||||
{
|
{
|
||||||
Console.WriteLine("[Node] " + outputData);
|
_nodeInstanceOutputLogger.LogOutputData(outputData);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnErrorDataReceived(string errorData)
|
protected virtual void OnErrorDataReceived(string errorData)
|
||||||
{
|
{
|
||||||
Console.WriteLine("[Node] " + errorData);
|
_nodeInstanceOutputLogger.LogErrorData(errorData);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void Dispose(bool disposing)
|
protected virtual void Dispose(bool disposing)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.Threading;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.NodeServices.HostingModels.PhysicalConnections;
|
using Microsoft.AspNetCore.NodeServices.HostingModels.PhysicalConnections;
|
||||||
using Microsoft.AspNetCore.NodeServices.HostingModels.VirtualConnections;
|
using Microsoft.AspNetCore.NodeServices.HostingModels.VirtualConnections;
|
||||||
|
using Microsoft.AspNetCore.NodeServices.Util;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Serialization;
|
using Newtonsoft.Json.Serialization;
|
||||||
|
|
||||||
@@ -36,13 +37,14 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
private string _socketAddress;
|
private string _socketAddress;
|
||||||
private VirtualConnectionClient _virtualConnectionClient;
|
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(
|
EmbeddedResourceReader.Read(
|
||||||
typeof(SocketNodeInstance),
|
typeof(SocketNodeInstance),
|
||||||
"/Content/Node/entrypoint-socket.js"),
|
"/Content/Node/entrypoint-socket.js"),
|
||||||
projectPath,
|
projectPath,
|
||||||
watchFileExtensions,
|
watchFileExtensions,
|
||||||
MakeNewCommandLineOptions(socketAddress))
|
MakeNewCommandLineOptions(socketAddress),
|
||||||
|
nodeInstanceOutputLogger)
|
||||||
{
|
{
|
||||||
_socketAddress = socketAddress;
|
_socketAddress = socketAddress;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.NodeServices.Util
|
||||||
|
{
|
||||||
|
public class ConsoleNodeInstanceOutputLogger : INodeInstanceOutputLogger
|
||||||
|
{
|
||||||
|
public void LogOutputData(string outputData)
|
||||||
|
{
|
||||||
|
Console.WriteLine("[Node] " + outputData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LogErrorData(string errorData)
|
||||||
|
{
|
||||||
|
Console.WriteLine("[Node] " + errorData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.NodeServices.Util
|
||||||
|
{
|
||||||
|
public interface INodeInstanceOutputLogger
|
||||||
|
{
|
||||||
|
void LogOutputData(string outputData);
|
||||||
|
|
||||||
|
void LogErrorData(string errorData);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user