{"action":"created","issue":{"url":"https://api.github.com/repos/docker/docker/issues/10568","labels_url":"https://api.github.com/repos/docker/docker/issues/10568/labels{/name}","comments_url":"https://api.github.com/repos/docker/docker/issues/10568/comments","events_url":"https://api.github.com/repos/docker/docker/issues/10568/events","html_url":"https://github.com/docker/docker/pull/10568","id":56595903,"number":10568,"title":"Logging drivers","user":{"login":"LK4D4","id":101445,"avatar_url":"https://avatars.githubusercontent.com/u/101445?v=3","gravatar_id":"","url":"https://api.github.com/users/LK4D4","html_url":"https://github.com/LK4D4","followers_url":"https://api.github.com/users/LK4D4/followers","following_url":"https://api.github.com/users/LK4D4/following{/other_user}","gists_url":"https://api.github.com/users/LK4D4/gists{/gist_id}","starred_url":"https://api.github.com/users/LK4D4/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LK4D4/subscriptions","organizations_url":"https://api.github.com/users/LK4D4/orgs","repos_url":"https://api.github.com/users/LK4D4/repos","events_url":"https://api.github.com/users/LK4D4/events{/privacy}","received_events_url":"https://api.github.com/users/LK4D4/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/docker/docker/labels//project/doc","name":"/project/doc","color":"207de5"},{"url":"https://api.github.com/repos/docker/docker/labels//tools/logging","name":"/tools/logging","color":"207de5"},{"url":"https://api.github.com/repos/docker/docker/labels/2-code-review","name":"2-code-review","color":"f7c6c7"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/docker/docker/milestones/37","html_url":"https://github.com/docker/docker/milestones/1.6.0","labels_url":"https://api.github.com/repos/docker/docker/milestones/37/labels","id":952335,"number":37,"title":"1.6.0","description":"","creator":{"login":"crosbymichael","id":749551,"avatar_url":"https://avatars.githubusercontent.com/u/749551?v=3","gravatar_id":"","url":"https://api.github.com/users/crosbymichael","html_url":"https://github.com/crosbymichael","followers_url":"https://api.github.com/users/crosbymichael/followers","following_url":"https://api.github.com/users/crosbymichael/following{/other_user}","gists_url":"https://api.github.com/users/crosbymichael/gists{/gist_id}","starred_url":"https://api.github.com/users/crosbymichael/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crosbymichael/subscriptions","organizations_url":"https://api.github.com/users/crosbymichael/orgs","repos_url":"https://api.github.com/users/crosbymichael/repos","events_url":"https://api.github.com/users/crosbymichael/events{/privacy}","received_events_url":"https://api.github.com/users/crosbymichael/received_events","type":"User","site_admin":false},"open_issues":32,"closed_issues":39,"state":"open","created_at":"2015-01-26T23:40:13Z","updated_at":"2015-03-17T06:39:59Z","due_on":"2015-03-23T07:00:00Z","closed_at":null},"comments":62,"created_at":"2015-02-04T22:12:58Z","updated_at":"2015-03-17T09:32:02Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/docker/docker/pulls/10568","html_url":"https://github.com/docker/docker/pull/10568","diff_url":"https://github.com/docker/docker/pull/10568.diff","patch_url":"https://github.com/docker/docker/pull/10568.patch"},"body":"Initial try to implement logging driver interface. I skipped fetching logs part from #7195 because it makes sense only for docker logs and actually docker logs is not very actively used.\r\nIt is pretty easy to implement logging driver with this, I have `syslog` and `remote` in mind. Remote will just send serialized `logger.Message`s to tcp socket.\r\nAwaiting your comments."},"comment":{"url":"https://api.github.com/repos/docker/docker/issues/comments/82241673","html_url":"https://github.com/docker/docker/pull/10568#issuecomment-82241673","issue_url":"https://api.github.com/repos/docker/docker/issues/10568","id":82241673,"user":{"login":"gdm85","id":7117866,"avatar_url":"https://avatars.githubusercontent.com/u/7117866?v=3","gravatar_id":"","url":"https://api.github.com/users/gdm85","html_url":"https://github.com/gdm85","followers_url":"https://api.github.com/users/gdm85/followers","following_url":"https://api.github.com/users/gdm85/following{/other_user}","gists_url":"https://api.github.com/users/gdm85/gists{/gist_id}","starred_url":"https://api.github.com/users/gdm85/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gdm85/subscriptions","organizations_url":"https://api.github.com/users/gdm85/orgs","repos_url":"https://api.github.com/users/gdm85/repos","events_url":"https://api.github.com/users/gdm85/events{/privacy}","received_events_url":"https://api.github.com/users/gdm85/received_events","type":"User","site_admin":false},"created_at":"2015-03-17T09:32:02Z","updated_at":"2015-03-17T09:32:02Z","body":"@LK4D4 I think this work of yours is really a great (and necessary) addition! My comment was more along the lines: logging can easily become a complex beast. For example:\r\n* **reliability**: what happens when there is a failure at delivering log information via network? @cpuguy83 suggested that probably it would just be dropped. This does not stretch to cover all use-cases where one might instead desire/require to have no logging information lost over time, under different system conditions.\r\n* **systems interaction**: what happens if application needs to log synchronously and there is a delay in delivering the log? Applications are hardly using synchronized writes to stdout/stderr (or flushes, for that matter), but still it needs to be addressed what happens in case the logging plugin itself is delivering logging information synchronously/asynchronously and the \"sink\" is somehow slow/unresponsive. (This is more about the involved buffers and who is the responsible actor).\r\n\r\nSo these are concerns to consider when extending the functionality (even in officially provided Docker logging plugins, if any), and generally my philosophy is: either do it right, or make a simple interface so that more complex tools (right for the job (™)) can be used :)"}}