{"id":19992766,"url":"https://github.com/angularsen/AspNetHttpLogger","last_synced_at":"2025-05-04T11:31:50.778Z","repository":{"id":20997915,"uuid":"24287518","full_name":"angularsen/AspNetHttpLogger","owner":"angularsen","description":"Log raw HTTP requests and responses in ASP.NET WebApi and WebApi2.","archived":false,"fork":false,"pushed_at":"2018-04-20T18:46:50.000Z","size":706,"stargazers_count":3,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-01T17:31:40.268Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/AspNetHttpLogger/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angularsen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-09-21T09:48:45.000Z","updated_at":"2018-04-20T18:46:52.000Z","dependencies_parsed_at":"2022-07-31T05:38:00.263Z","dependency_job_id":null,"html_url":"https://github.com/angularsen/AspNetHttpLogger","commit_stats":null,"previous_names":["anjdreas/aspnethttplogger"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angularsen%2FAspNetHttpLogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angularsen%2FAspNetHttpLogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angularsen%2FAspNetHttpLogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angularsen%2FAspNetHttpLogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angularsen","download_url":"https://codeload.github.com/angularsen/AspNetHttpLogger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252329679,"owners_count":21730666,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T04:52:18.640Z","updated_at":"2025-05-04T11:31:50.746Z","avatar_url":"https://github.com/angularsen.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"AspNetHttpLogger\n================\nLog raw HTTP requests and responses with ASP.NET WebApi and WebApi2.\n\n### WARNING! This approach is not working with OWIN pipeline\nI have not addressed this code in ages and it broke when OWIN was introduced in ASP.net.\n\nPlease see this issue for a possible workaround I have not verified:\nhttps://github.com/angularsen/AspNetHttpLogger/issues/3\n\nIf you are using IIS you can also consider using Failed Request Tracing as detailed in https://github.com/angularsen/AspNetHttpLogger/issues/5.\n\n### Step 1 - Install nuget\nTo install AspNetHttpLogger, run the following command in the [Package Manager Console](http://docs.nuget.org/docs/start-here/using-the-package-manager-console)\n![nuget-installpackage](https://cloud.githubusercontent.com/assets/787816/4447419/adb615a8-480a-11e4-81a0-bd29c231ef4c.png)\n\n### Step 2 - Register LoggingHandler as a message handler\n```csharp\nvar loggingHandler = new LoggingHandler();\nloggingHandler.ResponseCompleted += DoSomething;\n\nGlobalConfiguration.Configuration.MessageHandlers.Add(loggingHandler);\n```\n\n### Example code\n\n**Global.asax.cs**\n```csharp\npublic class MvcApplication : System.Web.HttpApplication\n{\n    public void Application_Start()\n    {\n        // Other setup stuff to peform on startup..\n        GlobalConfiguration.Configure(EnableRequestResponseLogging);\n    }\n\n    private void EnableRequestResponseLogging(HttpConfiguration httpConfiguration)\n    {\n        var loggingHandler = new LoggingHandler();\n        \n        // Hook up events\n        loggingHandler.InternalError += LoggingHandlerOnInternalError;\n        loggingHandler.ResponseCompleted += LoggingHandlerOnResponseCompleted;\n\n        // Register as a message handler to peek at all requests and responses\n        httpConfiguration.MessageHandlers.Add(loggingHandler);\n    }\n\n    /// \u003csummary\u003e\n    /// A request/response just completed. See \u003csee cref=\"logEvent\"/\u003e for more details.\n    /// \u003c/summary\u003e\n    /// \u003cparam name=\"logEvent\"\u003eDetails about the request and response. Call \u003csee cref=\"LogEvent.ToString\"/\u003e for a pre-formatted string output.\u003c/param\u003e\n    private void LoggingHandlerOnResponseCompleted(LogEvent logEvent)\n    {\n        Log.Debug(logEvent.Summary + \"\\n\" + logEvent);\n        \n        // Log the raw request/response output to our Loggr logging service\n        var loggr = DependencyResolver.Current.GetService\u003cILoggrService\u003e();\n        loggr.PostEvent(logEvent.Summary, logEvent.UserName, logEvent.Request, new[] {\"api\", \"log\", \"raw\"}, logEvent.ToString(),\n            LoggrDataType.PlainText);\n    }\n\n    /// \u003csummary\u003e\n    /// An exception occurred in the \u003csee cref=\"LoggingHandler\"/\u003e. It will be silently ignored,\n    /// but you can use this event to log and track down issues with the handler.\n    /// \u003c/summary\u003e\n    /// \u003cparam name=\"response\"\u003eThe \u003csee cref=\"HttpResponseMessage\"/\u003e.\u003c/param\u003e\n    /// \u003cparam name=\"ex\"\u003eException that occurred.\u003c/param\u003e\n    private void LoggingHandlerOnInternalError(HttpResponseMessage response, Exception ex)\n    {\n        Log.ErrorException(\"Exception occurred in LoggingHandler.\", ex);\n\n        // Send information about the error to our Raygun exception tracking service\n        var raygun = DependencyResolver.Current.GetService\u003cIRaygunService\u003e();\n        raygun.SendAsync(ex, new[] {\"LoggingHandler\"});\n\n        // Log the exception\n        var loggr = DependencyResolver.Current.GetService\u003cILoggrService\u003e();\n        loggr.PostErrorEvent(ex, \"LoggingHandler: \" + ex.Message, User.Identity.Name, response.RequestMessage,\n            new[] {\"api\", \"exception\", \"handled\"});\n    }\n}\n```\n\n### Feedback\nThis is so far the best way I have found to accomplish this in ASP.NET WebApi and WebApi2. If you know of a better way or have any improvements, please sound off in the Issues page.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangularsen%2FAspNetHttpLogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangularsen%2FAspNetHttpLogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangularsen%2FAspNetHttpLogger/lists"}