我正在使用: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'。
我的要求是能够在使用 WebSocketSharp 的 Nuget 包时禁用日志记录(所以我不能真正评论内部代码)。我想我在这里遗漏了一些非常简单的东西。
// 编辑 1
如果我处理消息以实际将输出发送到控制台,它会出现两次,因此这意味着默认操作不会被替换。
server.Log.Output += (d, s) =>
{
Console.WriteLine(d.ToString());
};