{"action":"created","issue":{"url":"https://api.github.com/repos/grpc/grpc-java/issues/1577","repository_url":"https://api.github.com/repos/grpc/grpc-java","labels_url":"https://api.github.com/repos/grpc/grpc-java/issues/1577/labels{/name}","comments_url":"https://api.github.com/repos/grpc/grpc-java/issues/1577/comments","events_url":"https://api.github.com/repos/grpc/grpc-java/issues/1577/events","html_url":"https://github.com/grpc/grpc-java/issues/1577","id":142819653,"number":1577,"title":"Solve logging","user":{"login":"ejona86","id":2811396,"avatar_url":"https://avatars.githubusercontent.com/u/2811396?v=3","gravatar_id":"","url":"https://api.github.com/users/ejona86","html_url":"https://github.com/ejona86","followers_url":"https://api.github.com/users/ejona86/followers","following_url":"https://api.github.com/users/ejona86/following{/other_user}","gists_url":"https://api.github.com/users/ejona86/gists{/gist_id}","starred_url":"https://api.github.com/users/ejona86/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ejona86/subscriptions","organizations_url":"https://api.github.com/users/ejona86/orgs","repos_url":"https://api.github.com/users/ejona86/repos","events_url":"https://api.github.com/users/ejona86/events{/privacy}","received_events_url":"https://api.github.com/users/ejona86/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/grpc/grpc-java/milestones/7","html_url":"https://github.com/grpc/grpc-java/milestones/1.1","labels_url":"https://api.github.com/repos/grpc/grpc-java/milestones/7/labels","id":1428390,"number":7,"title":"1.1","description":"","creator":{"login":"ejona86","id":2811396,"avatar_url":"https://avatars.githubusercontent.com/u/2811396?v=3","gravatar_id":"","url":"https://api.github.com/users/ejona86","html_url":"https://github.com/ejona86","followers_url":"https://api.github.com/users/ejona86/followers","following_url":"https://api.github.com/users/ejona86/following{/other_user}","gists_url":"https://api.github.com/users/ejona86/gists{/gist_id}","starred_url":"https://api.github.com/users/ejona86/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ejona86/subscriptions","organizations_url":"https://api.github.com/users/ejona86/orgs","repos_url":"https://api.github.com/users/ejona86/repos","events_url":"https://api.github.com/users/ejona86/events{/privacy}","received_events_url":"https://api.github.com/users/ejona86/received_events","type":"User","site_admin":false},"open_issues":51,"closed_issues":3,"state":"open","created_at":"2015-11-24T23:44:10Z","updated_at":"2016-06-24T17:51:57Z","due_on":null,"closed_at":null},"comments":3,"created_at":"2016-03-23T00:30:44Z","updated_at":"2016-06-24T19:28:09Z","closed_at":null,"body":"We used to have some INFO logs, but they were considered spam by some users (#1439), so they were reduced to FINE (#1449). In general, open source libraries don't log unless something is going wrong, and these log statements didn't imply something was wrong.\r\n\r\nHowever, in #1538 INFO-level logs were added back (in a different place, but same effective event). These could be a lower level, but it seems difficult for users to enable a higher logging level.\r\n\r\nWe do know applications can do something like this to squelch what is logged:\r\n```java\r\n// May need to save this reference\r\nLogger log = Logger.getlogger(\"io.grpc\");\r\nlog.setLevel(Level.WARNING);\r\n```\r\n\r\nMore than one project has been annoyed with the logging-by-default, but the number of Java developers who can handle logging.properties seems limited.\r\n\r\nOn Android, things are even worse because most phones almost always return `false` from `Log.isLoggable()` for lower log levels. Developer phones (like debug builds of Android) will return true, but few develop on such phones. This means that even when you configure java.util.logging to log lower levels, they won't actually be logged. You can run a command like `adb shell setprop log.tag.<MAGICTAG> VERBOSE` for _each class_ you want to log, where the `MAGICTAG` can be found from `DalvikLogging.loggerNameToTag()`, but this is so painful it isn't close to practical.\r\n\r\nNote that most Android applications don't notice any problem with `Log.isLoggable()` because while it may return `false`, if you call the log anyway (say, via `Log.v()`) apparently it will be logged.\r\n\r\nOne developer suggested we use `slf4j` because it is \"java best practices.\" I think in some part of the Java world it is, but it is unclear whether grpc exists in that part of the world. The number of developers that can configure java.util.logging, log4j, logback, or slf4j is certainly higher than just java.util.logging, but it will also become harder to direct users in how to enable logging when we need it for a report. It also has the deficiency that \"If no binding is found on the class path, then SLF4J will default to a no-operation implementation\" which is pretty bad for our WARNING statements."},"comment":{"url":"https://api.github.com/repos/grpc/grpc-java/issues/comments/228439472","html_url":"https://github.com/grpc/grpc-java/issues/1577#issuecomment-228439472","issue_url":"https://api.github.com/repos/grpc/grpc-java/issues/1577","id":228439472,"user":{"login":"udoprog","id":111092,"avatar_url":"https://avatars.githubusercontent.com/u/111092?v=3","gravatar_id":"","url":"https://api.github.com/users/udoprog","html_url":"https://github.com/udoprog","followers_url":"https://api.github.com/users/udoprog/followers","following_url":"https://api.github.com/users/udoprog/following{/other_user}","gists_url":"https://api.github.com/users/udoprog/gists{/gist_id}","starred_url":"https://api.github.com/users/udoprog/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/udoprog/subscriptions","organizations_url":"https://api.github.com/users/udoprog/orgs","repos_url":"https://api.github.com/users/udoprog/repos","events_url":"https://api.github.com/users/udoprog/events{/privacy}","received_events_url":"https://api.github.com/users/udoprog/received_events","type":"User","site_admin":false},"created_at":"2016-06-24T19:28:09Z","updated_at":"2016-06-24T19:28:09Z","body":"@carl-mastrangelo Hey, thanks for the heads up! I'm looking forward to it."}}
{"actor":{"display_login":"udoprog"}}