我想UDPListener
在后台运行它:
// launch this in a background thread private static void UDPListen() { IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) using( var udpClient = new UdpClient(10000)) { while (true) { var buffer = udpClient.Receive(ref remoteEndPoint); var loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); // ... } } }
我可以把它放在一个Task.Run()
并在while()
循环中运行吗?
这是我在阅读后进行设置的方法.非常简单!
private static void UDPListener() { Task.Run(async () => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var receivedResults = await udpClient.ReceiveAsync(); loggingEvent += Encoding.ASCII.GetString(receivedResults.Buffer); } } }); }
将appender
在log4net的 config
文件应设置为一样的东西:
</log4net> <appender name="UdpAppender" type="log4net.Appender.UdpAppender"> <remoteAddress value="127.0.0.1" /> <remotePort value="11000" /> <layout type="log4net.Layout.PatternLayout, log4net"> <conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <root> <appender-ref ref="UdpAppender" /> </root> </log4net>
与上述asynchronous
方法一样,这也可以在synchronous
方法中以非常类似的方式实现:
private static void UDPListener() { Task.Run(() => { using (var udpClient = new UdpClient(11000)) { string loggingEvent = ""; while (true) { //IPEndPoint object will allow us to read datagrams sent from any source. var remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); var receivedResults = udpClient.Receive(ref remoteEndPoint); loggingEvent += Encoding.ASCII.GetString(receivedResults); } } }); }