我想编写一个能够将日志数据发送到syslog服务器的Web服务。
架构是这样的:
Client ---> Webservice ----> syslog server
客户端像这样调用Web服务:
ServiceReference1.SysLogServiceClient clt = new ServiceReference1.SysLogServiceClient();
ServiceReference1.ClsSysLog temp = new ServiceReference1.ClsSysLog();
temp.date= DateTime.Now;
temp.time = DateTime.Now;
temp.processtype= "test";
temp.user= "testuser";
temp.application = "testapp";
bool result = clt.SendSysLog(temp);
Web服务有一个类和一个函数:
课程:
[DataContract]
public class ClsSysLog
{
[DataMember]
public DateTime date{ get; set; }
[DataMember]
public DateTime time { get; set; }
[DataMember]
public string processtype { get; set; }
[DataMember]
public string user { get; set; }
[DataMember]
public string application { get; set; }
}
功能:
private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public bool SendSysLog(ClsSysLog SysLogItem)
{
try
{
//date|time|processtype|user|application
string msg = String.Format("{0:yyyy-MM-dd}|{1:HH:mm:ss}|{2}|{3}|{4}|{5}|{6}", SysLogItem.date, SysLogItem.time, SysLogItem.processtype, SysLogItem.user, SysLogItem.application);
Exception tempExt = new Exception();
log.Info(msg, tempExt);
return true;
}
catch (Exception ex)
{
return false;
}
}
最后,Web服务配置为:
<log4net>
<appender name="RemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender">
<facility value="qradar" />
<identity value=" %date{yyyy-MM-ddTHH:mm:ss.ffffffzzz} %P{log4net:HostName} %P{app}" />
<RemoteAddress value="192.168.1.55" />
<layout type="log4net.Layout.PatternLayout" value=" %P{pid}:%logger %m%n" />
<RemotePort value="514" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RealtimeMonitoringAppender" />
</root>
</log4net>
我不知道系统日志服务器在做什么,但是通过网络嗅探工具,我发现它没有来自514端口的数据包。
log.Info(msg, tempExt)
函数的例外是
System.Exception:抛出了类型'System.Exception'的异常。
我无法通过网络服务将syslog数据发送到服务器。
答案 0 :(得分:1)
可能不是问题,但我注意到在配置中你有错误的appender引用名称。我会评论这个而不是回答,但我没有要点:)