Я использую: WebSocketSharp - https://github.com/sta/websocket-sharp
И следующий код как часть моего p2pserver:
public void Listen()
{
var server = new WebSocketServer(P2PPort);
server.Log.Output += (d, s) => { };
server.AddWebSocketService<P2PServerSocketBehavior>("/", bhv =>
{
bhv.OnConnection += (s, e) => ConnectSocket(e.Socket);
bhv.OnException += (s, e) => CloseSocket(e.Socket, e.Message);
bhv.OnDisconnect += (s, e) => CloseSocket(e.Socket, e.Reason);
});
server.Log.Output += (d, s) => { };
server.Start();
server.Log.Output += (d, s) => { };
Console.WriteLine($"Listening for peer-to-peer connections on port {P2PPort}");
ConnectToPeers();
}
private void ConnectToPeers()
{
PeerAddresses.ForEach(peer =>
{
var socket = new WebSocket(peer);
socket.Log.Output += (d, s) => { };
socket.OnOpen += (s, e) => ConnectSocket(socket);
socket.OnError += (s, e) => CloseSocket(socket, e.Message);
socket.OnClose += (s, e) => CloseSocket(socket, e.Reason);
socket.Log.Output += (d, s) => { };
socket.Connect();
socket.Log.Output += (d, s) => { };
});
}
Как вы можете видеть выше, я пытаюсь отключить ведение журнала консоли, так какздесь описано: https://github.com/sta/websocket-sharp/issues/368
Несмотря на это, я все еще получаю журналы ошибок:
Я выделил проблему для этогокод внутри websocket-sharp:
private static void defaultOutput(LogData data, string path)
{
var log = data.ToString();
Console.WriteLine(log);
if (path != null && path.Length > 0)
writeToFile(log, path);
}
private void output(string message, LogLevel level)
{
lock (_sync)
{
if (_level > level)
return;
LogData data = null;
try
{
data = new LogData(level, new StackFrame(2, true), message);
_output(data, _file);
}
catch (Exception ex)
{
data = new LogData(LogLevel.Fatal, new StackFrame(0, true), ex.Message);
Console.WriteLine(data.ToString());
}
}
}
Комментирование 'Console.WriteLine' в первой функции решает проблему.
Таким образом, в соответствии с вышеизложенным кажется, что по какой-то причине остается _output'defaultOutput', несмотря на явную установку его значения.
Мое требование - иметь возможность отключить ведение журнала при использовании пакета Nuget WebSocketSharp (поэтому я не могу комментировать внутренний код).Я предполагаю, что мне здесь не хватает чего-то очень простого.
// РЕДАКТИРОВАТЬ 1
Если я обработаю сообщение для фактической отправки вывода на консоль, оно появится дважды, поэтому это означает, что действие по умолчаниюне заменяется.
server.Log.Output += (d, s) =>
{
Console.WriteLine(d.ToString());
};