Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 将日志记录(添加到数据库)添加到服务堆栈服务_Logging_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,Logging,servicestack" /> servicestack,Logging,servicestack" />

Logging 将日志记录(添加到数据库)添加到服务堆栈服务

Logging 将日志记录(添加到数据库)添加到服务堆栈服务,logging,servicestack,Logging,servicestack,我是服务堆栈的新手,创建了第一个服务来替换WebAPI服务。该服务将是只读的,并且主要使用JsonServiceClient。我正在使用服务堆栈的版本4 我需要将每个请求记录到数据库中,包括请求变量(HTTP\u USER\u AGENT,LOGON\u USER,等等)、响应代码、响应内容类型、响应时间(ms)、返回的记录数(如果适用)等 我正在寻找一些“全局”的方法来实现这一点(不需要在每个服务/方法中放入大量代码) 以前有人做过这种记录吗?最好的方法是使用GlobalRequestFilt

我是服务堆栈的新手,创建了第一个服务来替换WebAPI服务。该服务将是只读的,并且主要使用
JsonServiceClient
。我正在使用服务堆栈的版本4

我需要将每个请求记录到数据库中,包括请求变量(
HTTP\u USER\u AGENT
LOGON\u USER
,等等)、响应代码、响应内容类型、响应时间(ms)、返回的记录数(如果适用)等

我正在寻找一些“全局”的方法来实现这一点(不需要在每个服务/方法中放入大量代码)


以前有人做过这种记录吗?

最好的方法是使用
GlobalRequestFilter
GlobalResponseFilter
,您可以在
AppHost
配置方法中设置。有关筛选请求的详细信息

下面的代码显示了基本结构,并且您可以使用请求和响应所需的所有数据

public override void Configure(Funq.Container)
{
...
//记录请求开始的时间。
Add((req,res,requestDto)=>req.SetItem(“StartTime”,DateTime.Now));
//请求已被处理,准备发送响应
this.GlobalResponseFilters.Add((请求、恢复、响应到)=>{
//获取启动请求时记录的开始时间
var startTime=req.GetItem(“startTime”)作为日期时间;
//确定请求的持续时间
var duration=DateTime.Now-startTime;
//您可以使用req.header来访问HTTP\u USER\u代理之类的内容
//如果您返回一个IList结果,那么您可以确定
//从responseDto返回的记录数
var list=作为IList响应;
如果(列表!=null){
//答复是一份清单
//使用list.count记录计数
}
/* 
*传递附加信息:
*如果您需要使服务方法中的信息可用
*在这里,您可以使用Request.SetItem()并使用req.GetItem()访问它
*/
//将日志保存到数据库中
});
}

我希望这是一个很好的起点。

我会看看内置的ServiceStack。默认情况下,它会在内存中保存一个滚动的请求列表;但是,您可以创建自己的
IRequestLogger
实现,该实现将保存到数据库中。通过添加如下功能,您可以轻松实现:

Plugins.Add(new RequestLogsFeature { RequiredRoles = new string[] { } });
RequestLogsFeature
提供了一个简单的服务,它将在/requestlogs处显示您服务的最后一个
N
项;但是,如果您只是希望能够将信息保存到数据库中,可以通过手动注册自己的请求记录器来跳过此操作

in your Service Hosts's Configure method:
Register<IRequestLogger>(new MyRequestLogger());
在服务主机的配置方法中:
注册(新的MyRequestLogger());