more service stack logging

This commit is contained in:
Luke Pulverenti 2013-04-13 16:20:04 -04:00
parent 44ff7167f0
commit dabf257778

View File

@ -105,6 +105,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
DefaultRedirectPath = defaultRedirectpath;
_logger = logger;
ServiceStack.Logging.LogManager.LogFactory = new NLogFactory();
EndpointHostConfig.Instance.ServiceStackHandlerFactoryPath = null;
EndpointHostConfig.Instance.MetadataRedirectPath = "metadata";
@ -136,58 +138,56 @@ namespace MediaBrowser.Server.Implementations.HttpServer
Plugins.Add(new SwaggerFeature());
Plugins.Add(new CorsFeature());
ServiceStack.Logging.LogManager.LogFactory = new NLogFactory();
ResponseFilters.Add((req, res, dto) =>
{
var exception = dto as Exception;
if (exception != null)
{
var exception = dto as Exception;
_logger.ErrorException("Error processing request for {0}", exception, req.RawUrl);
if (exception != null)
if (!string.IsNullOrEmpty(exception.Message))
{
_logger.ErrorException("Error processing request for {0}", exception, req.RawUrl);
var error = exception.Message.Replace(Environment.NewLine, " ");
error = RemoveControlCharacters(error);
if (!string.IsNullOrEmpty(exception.Message))
res.AddHeader("X-Application-Error-Code", error);
}
}
if (dto is CompressedResult)
{
// Per Google PageSpeed
// This instructs the proxies to cache two versions of the resource: one compressed, and one uncompressed.
// The correct version of the resource is delivered based on the client request header.
// This is a good choice for applications that are singly homed and depend on public proxies for user locality.
res.AddHeader("Vary", "Accept-Encoding");
}
var hasOptions = dto as IHasOptions;
if (hasOptions != null)
{
// Content length has to be explicitly set on on HttpListenerResponse or it won't be happy
string contentLength;
if (hasOptions.Options.TryGetValue("Content-Length", out contentLength) && !string.IsNullOrEmpty(contentLength))
{
var length = long.Parse(contentLength, UsCulture);
if (length > 0)
{
var error = exception.Message.Replace(Environment.NewLine, " ");
error = RemoveControlCharacters(error);
var response = (HttpListenerResponse)res.OriginalResponse;
res.AddHeader("X-Application-Error-Code", error);
response.ContentLength64 = length;
// Disable chunked encoding. Technically this is only needed when using Content-Range, but
// anytime we know the content length there's no need for it
response.SendChunked = false;
}
}
if (dto is CompressedResult)
{
// Per Google PageSpeed
// This instructs the proxies to cache two versions of the resource: one compressed, and one uncompressed.
// The correct version of the resource is delivered based on the client request header.
// This is a good choice for applications that are singly homed and depend on public proxies for user locality.
res.AddHeader("Vary", "Accept-Encoding");
}
var hasOptions = dto as IHasOptions;
if (hasOptions != null)
{
// Content length has to be explicitly set on on HttpListenerResponse or it won't be happy
string contentLength;
if (hasOptions.Options.TryGetValue("Content-Length", out contentLength) && !string.IsNullOrEmpty(contentLength))
{
var length = long.Parse(contentLength, UsCulture);
if (length > 0)
{
var response = (HttpListenerResponse) res.OriginalResponse;
response.ContentLength64 = length;
// Disable chunked encoding. Technically this is only needed when using Content-Range, but
// anytime we know the content length there's no need for it
response.SendChunked = false;
}
}
}
});
}
});
}
/// <summary>