public void Write(LogMessage logMessage) { if (logMessage != null) { UDPLogConfig config = logMessage.LogActor.Config as UDPLogConfig; UdpClient udpClient = null; if (!udpList.ContainsKey(config.RemoteUdpAddress)) { udpClient = new UdpClient(); udpList.Add(config.RemoteUdpAddress, udpClient); } else { udpClient = udpList[config.RemoteUdpAddress]; } IPEndPoint remoteEndPoint = new IPEndPoint(config.RemoteUdpAddress, config.RemoteUdpPort); byte[] sendBytes = Encoding.Unicode.GetBytes(logMessage.Message); udpClient.Send(sendBytes, sendBytes.Length, remoteEndPoint); } }
private void ReadUDPLogConfig() { System.Xml.XmlNode udp = this.xmlNode.SelectSingleNode("//UDP"); if (udp != null) { System.Xml.XmlNodeList configs = udp.SelectNodes("Config"); foreach (System.Xml.XmlNode config in configs) { //id="capture" category="" level="DEBUG" module="capture" protocolType="IPv4" remoteUDPAddress="127.0.0.1" remoteUDPPort="1024" System.Xml.XmlAttribute id = config.Attributes["id"]; System.Xml.XmlAttribute category = config.Attributes["category"]; System.Xml.XmlAttribute level = config.Attributes["level"]; System.Xml.XmlAttribute module = config.Attributes["module"]; System.Xml.XmlAttribute protocolType = config.Attributes["protocolType"]; System.Xml.XmlAttribute remoteUDPAddress = config.Attributes["remoteUDPAddress"]; System.Xml.XmlAttribute remoteUDPPort = config.Attributes["remoteUDPPort"]; if (id == null || protocolType == null || remoteUDPAddress == null || remoteUDPPort == null) { throw new StackException("config error: dns config should have id, protocolType, remoteUDPAddress and remoteUDPPort."); } // create a config instance UDPLogConfig udpLogConfig = new UDPLogConfig(); udpLogConfig.Category = category.Value; udpLogConfig.Level = (LogLevel)Enum.Parse(typeof(LogLevel), level.Value); udpLogConfig.Module = module.Value; udpLogConfig.ProtoType = (ProtocolType)Enum.Parse(typeof(ProtocolType), protocolType.Value); foreach (IPAddress address in System.Net.Dns.GetHostAddresses(remoteUDPAddress.Value)) { if ( (udpLogConfig.ProtoType == ProtocolType.IPv4 && address.AddressFamily == AddressFamily.InterNetwork) || (udpLogConfig.ProtoType == ProtocolType.IPv6 && address.AddressFamily == AddressFamily.InterNetworkV6) ) { udpLogConfig.RemoteUdpAddress = address; break; } } udpLogConfig.RemoteUdpPort = Convert.ToInt32(remoteUDPPort.Value, CultureInfo.InvariantCulture); if (this.logConfigs.ContainsKey(id.Value)) { throw new StackException("the id of config must be unique."); } this.logConfigs.Add(id.Value, udpLogConfig); } } }