)]}'
{
  "log": [
    {
      "commit": "2b790ef78571cd58d29ce909a8d4e3f71cc4c47e",
      "tree": "8f4d0ae5e7ac53df906ea9571a1dcb42ca72a554",
      "parents": [
        "a0e3c40a0ed0cecc58c84e7684d9ce55a54044ee"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@golang.org",
        "time": "Tue Apr 29 08:43:26 2025"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 29 08:43:26 2025"
      },
      "message": "glog: generate a Fatalf-like error message when writing to logsinks fails (#76)\n\nWriting to logsinks can fail (for example due to \"no space left on device\" or I/O errors). When that happens glog has no reasonable way to continue and causes the program to exit with exit status 2.\n\nPreviously glog reused the metadata of the current call to print an error message, but that was problematic. Depending on the current call\u0027s log severity it\u0027s possible that the program just exited without printing anything. That\u0027s confusing and hard to debug.\n\nTo fix that, glog creates now a new FATAL-level metadata object and prints a clearer error message (with stacks). In most situations this will at least be logged to stderr.\n\nThanks @atetubou for the initial fix!\n\ncl/750790337 (google-internal)\ncl/752634801 (google-internal)"
    },
    {
      "commit": "a0e3c40a0ed0cecc58c84e7684d9ce55a54044ee",
      "tree": "c9542ff1ed288a9efef870731107908e957f1be3",
      "parents": [
        "7139da234346c23dba05a8c588284c379b9c0bf8"
      ],
      "author": {
        "name": "Chressie Himpel",
        "email": "chressie@golang.org",
        "time": "Wed Jan 08 11:44:22 2025"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Mon Jan 13 09:57:13 2025"
      },
      "message": "glog: have createInDir fail if the file already exists\n\nThis prevents an attack like the one described\n[here](https://owasp.org/www-community/vulnerabilities/Insecure_Temporary_File#:~:text\u003dOn%20Unix%20based,with%20elevated%20permissions.).\nAn unprivileged attacker could use symlinks to trick a privileged\nlogging process to follow a symlink from the log dir and write logs over\nan arbitrary file.\n\nThe components of the log names are program, host, username, tag, date,\ntime and PID. These are all predictable. It\u0027s not at all unusual for the\nlogdir to be writable by unprivileged users, and one of the fallback\ndirectories (/tmp) traditionally has broad write privs with the sticky\nbit set on Unix systems.\n\nAs a concrete example, let\u0027s say I\u0027ve got a glog-enabled binary running\nas a root cronjob. I can gauge when that cron job will run and then use\na bash script to spray the log dir with glog-looking symlinks to\n`/etc/shadow` with predicted times and PIDs. When the cronjob runs, the\n`os.Create` call will follow the symlink, truncate `/etc/shadow` and\nthen fill it with logs.\n\nThis change defeats that by setting `O_EXCL`, which will cause the open\ncall to fail if the file already exists.\n\nFixes CVE-2024-45339\n\ncl/712795111 (google-internal)\n"
    },
    {
      "commit": "7139da234346c23dba05a8c588284c379b9c0bf8",
      "tree": "4494e701dd2bc65998ef38d8eeba78e61b8f3d89",
      "parents": [
        "dd58629ba6ced28322bcb149ed86016fb1ec9a5b"
      ],
      "author": {
        "name": "Chressie Himpel",
        "email": "chressie@golang.org",
        "time": "Wed Jan 08 11:44:22 2025"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Mon Jan 13 09:57:13 2025"
      },
      "message": "glog: introduce createInDir function as in internal version\n"
    },
    {
      "commit": "dd58629ba6ced28322bcb149ed86016fb1ec9a5b",
      "tree": "7dfd67ed74009f5560a194d4add75fd4f3d5aa0c",
      "parents": [
        "04dbec0df8d03d5c187beaf5ce8e6c58e9fc82b5"
      ],
      "author": {
        "name": "Chressie Himpel",
        "email": "chressie@golang.org",
        "time": "Tue Jan 07 19:08:44 2025"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Mon Jan 13 09:57:13 2025"
      },
      "message": "glog: Don\u0027t try to create/rotate a given syncBuffer twice in the same second\n\nIf you do, then you truncate the existing file. So logging too much too quickly would lose log data.\n\ncl/709080575 (google-internal)\n"
    },
    {
      "commit": "04dbec0df8d03d5c187beaf5ce8e6c58e9fc82b5",
      "tree": "5b7a9ead5ec5eb14e4681840f56884f8fc7d519f",
      "parents": [
        "459cf3b8151dcfd8aa971077774eaf0c804119e4"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@golang.org",
        "time": "Tue Nov 05 15:05:08 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 05 15:05:08 2024"
      },
      "message": "glog: fix typo (#73)\n\ncl/648345242 (google-internal)"
    },
    {
      "commit": "459cf3b8151dcfd8aa971077774eaf0c804119e4",
      "tree": "185e0be565c82c886b9bdc8a77b38bca3e7c1e2b",
      "parents": [
        "97303146a4ffecf364d4300e07fca855d0062c43"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@golang.org",
        "time": "Mon Nov 04 09:58:55 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 04 09:58:55 2024"
      },
      "message": "glog: check that stderr is valid before using it by default (#72)\n\nWindows Services are [spawned without `stdout` and `stderr`](https://learn.microsoft.com/en-us/windows/console/getstdhandle#return-value:~:text\u003dIf%20an%20application%20does%20not%20have%20associated%20standard%20handles%2C%20such%20as%20a%20service%20running%20on%20an%20interactive%20desktop%2C%20and%20has%20not%20redirected%20them%2C%20the%20return%20value%20is%20NULL.), so any attempt to use them equates to referencing an invalid file `Handle`. `stderrSink` returns the error, which makes `logsink` trigger the termination of the process. The result is that any call to `log.Error` (or `log.Fatal`) from a Windows Service will always crash the program.\r\n\r\nThis approach checks that `os.Stderr`\u0027s embedded file descriptor (`Handle`, for Windows) is non-NULL once during `init` to determine its validity and if it fails, then never registers `stderrSink` as a logsink.\r\n\r\nDisabling based upon whether `os.Stderr` is NULL was chosen because it\u0027s precise, doesn\u0027t actually influence the result of any output and doesn\u0027t require any syscalls, but still detects the case in which `stderr` is unavailable on Windows.\r\n\r\nA rejected approach here would\u0027ve been to swallow the errors from `stderrSink.Emit`, thus sparing us program termination at the hands of `logsink`. I rejected this approach because it felt like it could result in some subtle behavioral changes. For example, invoking `log.Error` after `os.Stderr.Close()` would no longer exit the program and that felt like a non-trivial change (although I can think of no reason why one would desire this behavior).\r\n\r\ncl/680817112 (google-internal)"
    },
    {
      "commit": "97303146a4ffecf364d4300e07fca855d0062c43",
      "tree": "c3db0d4e7fb55629a32d2e18ce360391c55ef8bb",
      "parents": [
        "861d094757551d2f65d1003f0ec93bc92b254a5a"
      ],
      "author": {
        "name": "Benjamin Segall",
        "email": "bentekkie@gmail.com",
        "time": "Tue Jul 09 13:06:28 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 09 13:06:28 2024"
      },
      "message": "glog: avoid calling user.Current() on windows (#69)\n\nUse the current process token to look up the user\u0027s name on Windows.\r\n\r\nThis is more reliable than using the USER or USERNAME environment variables, which are not always set, or might be overridden by the user accidentally or\r\nmaliciously.\r\n\r\nIt follows the implementation of the user.Current() implementation in the\r\nstandard library.\r\n\r\ncl/650142356 (google-internal)"
    },
    {
      "commit": "861d094757551d2f65d1003f0ec93bc92b254a5a",
      "tree": "2868e46f8cf88e9d7d0eeceb2f0daed43fb2075c",
      "parents": [
        "b256bbe5d3f846c1d1ce73030c10973378e04cf0"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@golang.org",
        "time": "Thu Apr 04 14:07:42 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 04 14:07:42 2024"
      },
      "message": "glog: don\u0027t hold mutex when sync\u0027ing (#68)\n\nSome environments are slow when syncing and holding the lock might cause contention.\r\n\r\ncl/621846576 (google-internal)"
    },
    {
      "commit": "b256bbe5d3f846c1d1ce73030c10973378e04cf0",
      "tree": "2716c5a50e95a9e70fcc51ac95c51da0b98201b2",
      "parents": [
        "bcf318487a966b61bca6189643b72648fa132e6e"
      ],
      "author": {
        "name": "Chressie Himpel",
        "email": "chressie@golang.org",
        "time": "Wed Nov 22 06:00:33 2023"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Wed Nov 22 11:20:37 2023"
      },
      "message": "glog: add context variants to most log functions\n\nWe export this new API to make the internal and external versions\nidentical.\n\nThe context is currently plumbed through to the internal/logsink\npackage, but effectively discarded there.\n\ncl/560684897 (google-internal)\ncl/579771826 (google-internal)\n"
    },
    {
      "commit": "bcf318487a966b61bca6189643b72648fa132e6e",
      "tree": "c77a159ce3c26ef650fb98a831d10855388332ca",
      "parents": [
        "6b9d7f7df28d318a28dde3adb8a5e9ae9bf1abaf"
      ],
      "author": {
        "name": "Chressie Himpel",
        "email": "chressie@golang.org",
        "time": "Wed Nov 22 05:57:42 2023"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Wed Nov 22 11:20:37 2023"
      },
      "message": "glog/internal/logsink: add logsink tests\n"
    },
    {
      "commit": "6b9d7f7df28d318a28dde3adb8a5e9ae9bf1abaf",
      "tree": "e2606bc82680b5546225a7a46e596f66a2a33a65",
      "parents": [
        "03ad3c2a3f1c767129f0b355507de7ae615f53b8"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@golang.org",
        "time": "Wed Aug 09 08:22:17 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 09 08:22:17 2023"
      },
      "message": "glog: populate symlinks -log_link directory (#64)\n\nThis was reported in\r\nhttps://groups.google.com/g/golang-nuts/c/Fh9o3CPjIIw/m/TyiUDY2uAAAJ."
    },
    {
      "commit": "03ad3c2a3f1c767129f0b355507de7ae615f53b8",
      "tree": "22ea471ccced2d60d92390de04654ca492a16013",
      "parents": [
        "6ce8ac99c51353f04e95b18e2ef0fbc783df580c"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@google.com",
        "time": "Wed Mar 22 15:56:03 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 22 15:56:03 2023"
      },
      "message": "glog: use os.Stderr directly for writing to stderr (#62)\n\nThis was raised in https://groups.google.com/g/golang-nuts/c/o85vycfiGVY/m/MblpnfF6BQAJ.\r\n\r\nBefore the 1.1.0 release it was possible to set os.Stderr to a different *os.File (like an os.Pipe) to capture output that is written to stderr. Restore that behavior."
    },
    {
      "commit": "6ce8ac99c51353f04e95b18e2ef0fbc783df580c",
      "tree": "09fc36194470dc55325d552cb96fd5936b80a23a",
      "parents": [
        "c0f9e3d764d339d6b6443032e034c7d3bd5efe3a"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@google.com",
        "time": "Wed Mar 22 09:14:45 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 22 09:14:45 2023"
      },
      "message": "glog: update minimum go version to go1.19 (#61)\n\n"
    },
    {
      "commit": "c0f9e3d764d339d6b6443032e034c7d3bd5efe3a",
      "tree": "5d439a204172bcb4f6638bea12a877844a0c2d00",
      "parents": [
        "9c9801e69114b582b12aa7010c75fe2105ae23b3"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@google.com",
        "time": "Fri Mar 17 11:03:00 2023"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Fri Mar 17 13:34:09 2023"
      },
      "message": "glog: don\u0027t use SIGABRT on platforms that don\u0027t support signals\n\ncl/517387773 (google-internal)\n"
    },
    {
      "commit": "9c9801e69114b582b12aa7010c75fe2105ae23b3",
      "tree": "c6edf75dac933ce2e823c401ed715c785fd9fb6c",
      "parents": [
        "2cef961be9f6c9c1c8febe675a3ed29b07f75e50"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@google.com",
        "time": "Fri Mar 17 11:01:04 2023"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Fri Mar 17 13:34:09 2023"
      },
      "message": "glog: make zero value of vModuleFlag usable\n\nThe flag package ensures that the zero value of a flag.Value is usable. This commit fixes this.\n\nThis was raised in https://groups.google.com/g/golang-nuts/c/Atlr8uAjn6U/m/iId17Td5BQAJ.\n\ncl/517349579 (google-internal)\n"
    },
    {
      "commit": "2cef961be9f6c9c1c8febe675a3ed29b07f75e50",
      "tree": "33756149565f00f913a0b1618585f0c2fc21aab2",
      "parents": [
        "115d1f9172402af5d19c22bb21c1d90686fa8b20"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@google.com",
        "time": "Fri Mar 17 10:59:41 2023"
      },
      "committer": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Fri Mar 17 13:34:09 2023"
      },
      "message": "glog: use strings.TrimSuffix\n\nThis was raised in https://github.com/golang/glog/pull/53.\n\ncl/514318873 (google-internal)\n"
    },
    {
      "commit": "115d1f9172402af5d19c22bb21c1d90686fa8b20",
      "tree": "698fc9a23e590361c0a8e21e4f1286c10c0eb5dd",
      "parents": [
        "9ef845f417d839250ceabbc25c1b26101e772dd7"
      ],
      "author": {
        "name": "chressie",
        "email": "chressie@gmail.com",
        "time": "Fri Mar 03 14:30:14 2023"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 03 14:30:14 2023"
      },
      "message": "glog: update glog to the latest internal version (#59)\n\nThis change upstreams a number of changes since the last package update.\r\n\r\nIn particular this adds:\r\n\r\n- New exported APIs (see godoc for further details):\r\n  - glog.VDepth\r\n  - glog.InfoDepthf\r\n  - glog.WarningDepthf\r\n  - glog.ErrorDepthf\r\n  - glog.FatalDepthf\r\n  - glog.ExitDepthf\r\n  - glog.Names\r\n  - glog.NewStandardLogger\r\n  - glog.Verbose.InfoDepth\r\n  - glog.Verbose.InfoDepthf\r\n  - glog.ErrNoLog\r\n\r\n- The -log_backtrace_at flag accepts now a comma-separated list of file:line locations.\r\n\r\n- The -vmodule flag accepts a new syntax to match the full path to a module instead of just the module name. See the updated package documentation.\r\n\r\n- A new internal/logsink package to support other outputs than files. Note: This package is internal, because we cannot guarantee at this point that the API remains stable.\r\n\r\nMore details at go/log-vs-glog (google-internal)."
    },
    {
      "commit": "9ef845f417d839250ceabbc25c1b26101e772dd7",
      "tree": "cf54be50acbb27a3c788c67e573ff7974ad3a265",
      "parents": [
        "cba94dd2756625108a45896548e26aea38902107"
      ],
      "author": {
        "name": "Spground",
        "email": "958340585@qq.com",
        "time": "Fri Aug 20 11:53:15 2021"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 20 11:53:15 2021"
      },
      "message": "glog: fix doc comment for V (#47)\n\nV logs if the level is at most the -v setting.\r\n(If it is bigger (V(2) with -v\u003d1) then it doesn\u0027t.)\r\nThe text said \"at least\" instead."
    },
    {
      "commit": "cba94dd2756625108a45896548e26aea38902107",
      "tree": "667b3cfc6d12178ced9974f44068fbd06f069696",
      "parents": [
        "d5eac5ed654b4b4129d8ba114ab426ad05bb18e6"
      ],
      "author": {
        "name": "M-A",
        "email": "maruel@gmail.com",
        "time": "Fri Aug 20 11:49:38 2021"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 20 11:49:38 2021"
      },
      "message": "glog: add go.mod (#46)\n\nTested to work on go1.11 with:\r\n\r\n  go get golang.org/dl/go1.11\r\n  go1.11 download\r\n  go1.11 test\r\n\r\nCo-authored-by: Marc-Antoine Ruel \u003cmaruel@google.com\u003e"
    },
    {
      "commit": "d5eac5ed654b4b4129d8ba114ab426ad05bb18e6",
      "tree": "e8d3bb077624eff78a96f41ae69b9f42d259bfde",
      "parents": [
        "424d2337a5299a465c8a8228fc3ba4b1c28337a2"
      ],
      "author": {
        "name": "Christian Muehlhaeuser",
        "email": "muesli@gmail.com",
        "time": "Fri Aug 20 11:49:13 2021"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 20 11:49:13 2021"
      },
      "message": "glog: simplify range loop (#37)\n\nJust a tiny bit nicer to read."
    },
    {
      "commit": "424d2337a5299a465c8a8228fc3ba4b1c28337a2",
      "tree": "3a9d87505a880285961163b8fad58ecf047d5ca0",
      "parents": [
        "23def4e6c14b4da8ac2ed8007337bc5eb5007998",
        "1c82741128292f849b1323fd295b0cd21a22c209"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Thu Apr 29 00:19:01 2021"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 29 00:19:01 2021"
      },
      "message": "Merge pull request #50 from joaoofreitas/master\n\nUpdate README file to Markdown 📃"
    },
    {
      "commit": "1c82741128292f849b1323fd295b0cd21a22c209",
      "tree": "3a9d87505a880285961163b8fad58ecf047d5ca0",
      "parents": [
        "23def4e6c14b4da8ac2ed8007337bc5eb5007998"
      ],
      "author": {
        "name": "joaoofreitas",
        "email": "joaoofreitas00@gmail.com",
        "time": "Thu Apr 22 17:51:49 2021"
      },
      "committer": {
        "name": "joaoofreitas",
        "email": "joaoofreitas00@gmail.com",
        "time": "Thu Apr 22 17:51:49 2021"
      },
      "message": "Update README file to Markdown 📃\n"
    },
    {
      "commit": "23def4e6c14b4da8ac2ed8007337bc5eb5007998",
      "tree": "62230cd604fcc576ed5b0fb13f2506bc1b5a9e5c",
      "parents": [
        "fca8c8854093a154ff1eb580aae10276ad6b1b5f"
      ],
      "author": {
        "name": "Michael Stapelberg",
        "email": "stapelberg@users.noreply.github.com",
        "time": "Mon Jan 25 20:49:56 2016"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Tue Jan 26 23:53:08 2016"
      },
      "message": "README: change code.google.com link to GitHub\n\nSigned-off-by: David Symonds \u003cdsymonds@golang.org\u003e\n"
    },
    {
      "commit": "fca8c8854093a154ff1eb580aae10276ad6b1b5f",
      "tree": "e32ed501b5234e923a509e0c2c721c55b236f9c3",
      "parents": [
        "44145f04b68cf362d9c4df2182967c2275eaefed",
        "65d674618f712aa808a7d0104131b9206fc3d5ad"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Fri Jul 31 22:52:21 2015"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Fri Jul 31 22:52:21 2015"
      },
      "message": "Merge pull request #13 from michael-berlin/fix_log_before_flag_parse\n\nExport glog bugfix."
    },
    {
      "commit": "65d674618f712aa808a7d0104131b9206fc3d5ad",
      "tree": "e32ed501b5234e923a509e0c2c721c55b236f9c3",
      "parents": [
        "44145f04b68cf362d9c4df2182967c2275eaefed"
      ],
      "author": {
        "name": "Michael Berlin",
        "email": "mberlin@google.com",
        "time": "Fri Jul 24 23:44:32 2015"
      },
      "committer": {
        "name": "Michael Berlin",
        "email": "mberlin@google.com",
        "time": "Fri Jul 24 23:44:32 2015"
      },
      "message": "Fix problem that -log_dir will not be respected when anything is logged before flag.Parse().\n\nBefore this change, premature logging resulted into log files being put in the default location (e.g. /tmp), but not the one specified by the log_dir flag.\n\nAfter this change, premature logging will not result into the creation of the log files yet. Instead, the log message will be printed to stderr.\n"
    },
    {
      "commit": "44145f04b68cf362d9c4df2182967c2275eaefed",
      "tree": "ff88a8670fe235f678315b4ede0378ba88585a54",
      "parents": [
        "c56a6cb113f06762a32067a951f65caee77ddadd"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Tue Sep 23 20:47:00 2014"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Wed Nov 05 02:39:35 2014"
      },
      "message": "log: Add Exit, Exitf etc.\n\nThese are equivalent to Fatal etc. except that they do not dump stacks.\nAddresses a common complaint.\n"
    },
    {
      "commit": "c56a6cb113f06762a32067a951f65caee77ddadd",
      "tree": "be3818538674d7b2bf8949426e69e7e4365b3168",
      "parents": [
        "c741557f8f77751e253ad5a27b6e3f70391aff08"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Mon Aug 11 19:11:00 2014"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Wed Nov 05 02:32:51 2014"
      },
      "message": "Pad thread ID in log header to 7 spaces, to match C++ format.\n\nAdd check in TestHeader to detect padding mismatch.\n"
    },
    {
      "commit": "c741557f8f77751e253ad5a27b6e3f70391aff08",
      "tree": "80cadc68f8dee8394d3e57e0b4984e0b4ce69981",
      "parents": [
        "b83197c33c35da605bf2be628a4a3ed7695e21d6"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu May 15 20:49:00 2014"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Wed Nov 05 02:12:42 2014"
      },
      "message": "log: add *Depth function for log wrapping.\n\nThis makes it possible for other packages to wrap the log package.\n"
    },
    {
      "commit": "b83197c33c35da605bf2be628a4a3ed7695e21d6",
      "tree": "22864c267256a8715ac5624cc677d70cb74a6155",
      "parents": [
        "5066b11157b3bdeecde64806bf298cabad703a8c"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Tue Mar 04 03:57:00 2014"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Wed Nov 05 02:06:34 2014"
      },
      "message": "Fix log format to space pad PID instead of zero pad.\n\nThis now matches C++ and the code comments.\n"
    },
    {
      "commit": "5066b11157b3bdeecde64806bf298cabad703a8c",
      "tree": "24e326019619a88078c196ad7427814bd4cbb3a3",
      "parents": [
        "49850ea55f4b32f6c605a10784fdd6f5651f0fce"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Wed Feb 12 18:18:00 2014"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Wed Nov 05 02:03:34 2014"
      },
      "message": "Fix non-atomic set of logging.filterLength.\n\nOne of its accesses was not atomic; tsan caught it.\n"
    },
    {
      "commit": "49850ea55f4b32f6c605a10784fdd6f5651f0fce",
      "tree": "c85bc39c693c4547b32e9688fb0df102c3af2537",
      "parents": [
        "d1c4472bf2efd3826f2b5bdcc02d8416798d678c"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Fri Jan 24 17:36:00 2014"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Wed Nov 05 01:51:25 2014"
      },
      "message": "Redirect messages written to the standard \"log\" package to the INFO log,\nin particular to capture messages from the \"net/http\" package.\n\nThis change only affects programs that import \"github.com/golang/glog\".\n\nMessages written to the standard \"log\" package will always appear on standard error,\nas they do now, though they will be formatted like INFO log messages. These messages\nwill also appear in the INFO log file unless --logtostderr is set.\n"
    },
    {
      "commit": "d1c4472bf2efd3826f2b5bdcc02d8416798d678c",
      "tree": "c60ecd5b8b20e96ff2811404b0071fcd0655cfd0",
      "parents": [
        "20cea4dfef0c0151bba0422a6244cc1d3e8292b1"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@tubenose.mtv.corp.google.com",
        "time": "Wed Jan 15 17:40:30 2014"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@tubenose.mtv.corp.google.com",
        "time": "Wed Jan 15 17:40:30 2014"
      },
      "message": "Add a sentence to the documentation that flag.Parse must be called first.\n"
    },
    {
      "commit": "20cea4dfef0c0151bba0422a6244cc1d3e8292b1",
      "tree": "43942efeb996fe4d21db6974bd2b167219384720",
      "parents": [
        "c6f9652c7179652e2fd8ed7002330db089f4c9db"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Tue Oct 08 21:22:02 2013"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Tue Oct 08 21:22:34 2013"
      },
      "message": "Create a relative symlink for log files.\n\nThis matches what C++ does in practice, and permits this code to work\nif -log_dir is a relative path.\n"
    },
    {
      "commit": "c6f9652c7179652e2fd8ed7002330db089f4c9db",
      "tree": "69ce2a791c66fe4f989f2c0da777dfdc78091119",
      "parents": [
        "228ba85797643dc4b25093bd3386f51b77103ea3"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Tue Aug 13 01:02:14 2013"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Tue Aug 13 01:02:14 2013"
      },
      "message": "document -log_dir, the one undocumented flag in this package.\n"
    },
    {
      "commit": "228ba85797643dc4b25093bd3386f51b77103ea3",
      "tree": "495321b780159e3e19ba7eaf942d6f15810b8258",
      "parents": [
        "f74c4c6b9610b9a36eeea83b7c18c9320b7fcc8d"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Fri Aug 09 03:29:24 2013"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Fri Aug 09 03:29:24 2013"
      },
      "message": "Fix typo, reformat top comment slightly.\n"
    },
    {
      "commit": "f74c4c6b9610b9a36eeea83b7c18c9320b7fcc8d",
      "tree": "ef42d503f252cf33ca56a514cc308511ab62449e",
      "parents": [
        "ab6a54c30dfa6835c4251a801a089bebcbfd461c"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Fri Aug 09 03:23:55 2013"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Fri Aug 09 03:27:06 2013"
      },
      "message": "Add documentation about flushing and flags.\n"
    },
    {
      "commit": "ab6a54c30dfa6835c4251a801a089bebcbfd461c",
      "tree": "56ba34051eba28a8d381a6ce80c70727b3c8f507",
      "parents": [
        "c2ab0c9a9bad2bd7d56d34b919f9d737e4a3822d"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 07:20:45 2013"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 07:20:48 2013"
      },
      "message": "Sanitize username used for constructing log filenames.\n\nOn Windows, os/user.Current may return a username containing a backslash.\n"
    },
    {
      "commit": "c2ab0c9a9bad2bd7d56d34b919f9d737e4a3822d",
      "tree": "8b3df5aa71b2f9409d58843dd8fa80319a1a7eda",
      "parents": [
        "47832e5afed51b27488a82c5fc1a8f83dc73f2ba"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 05:53:59 2013"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 05:53:59 2013"
      },
      "message": "Use path/filepath instead of path for manipulating OS paths.\n"
    },
    {
      "commit": "47832e5afed51b27488a82c5fc1a8f83dc73f2ba",
      "tree": "346e3e2928a1926cb3fbd16bc6eadaddebc0aaf5",
      "parents": [
        "029e58eb9ea7a4be928582fb9f604c5e2557a0cf"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 05:30:52 2013"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 05:30:52 2013"
      },
      "message": "Gofmt all source files.\n"
    },
    {
      "commit": "029e58eb9ea7a4be928582fb9f604c5e2557a0cf",
      "tree": "c4ac62ea5c773c8669b7ca0c099072cbee8f5a83",
      "parents": [
        "496d3b747b2851cc98f4838bcfa59f707c4cee25"
      ],
      "author": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 05:28:32 2013"
      },
      "committer": {
        "name": "David Symonds",
        "email": "dsymonds@golang.org",
        "time": "Thu Jul 18 05:28:32 2013"
      },
      "message": "Use os.TempDir to pick default location for log files.\n\nThe previous code was a historical artifact.\n"
    },
    {
      "commit": "496d3b747b2851cc98f4838bcfa59f707c4cee25",
      "tree": "887ecc15f4d4cfea62f0e0f368b9a184abd6432b",
      "parents": [
        "2b6b49888830bc4add903e415386fc24afa3797c"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Wed Jul 17 00:26:02 2013"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Wed Jul 17 00:26:02 2013"
      },
      "message": "Use filepath.IsAbs to see if temp directory is local. Fixes a problem on Windows, since the old code assumed a rooted path starts with /.\n"
    },
    {
      "commit": "2b6b49888830bc4add903e415386fc24afa3797c",
      "tree": "93164d8c1db79ebb72418e639cd461ddad436516",
      "parents": [
        "3e682cc72cac34d315430d66d4af375cbec079c5"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Wed Jul 17 00:13:02 2013"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Wed Jul 17 00:13:02 2013"
      },
      "message": "Fix the license text in the source files. It was incorrect. Should be all consistent now.\n"
    },
    {
      "commit": "3e682cc72cac34d315430d66d4af375cbec079c5",
      "tree": "906912af6049fd5164ac69c30ff77be2859fb617",
      "parents": [
        "2d42ba6cf5d66a0098e7ba07a69cd5ab6232e199"
      ],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Tue Jul 16 05:23:00 2013"
      },
      "committer": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Tue Jul 16 05:36:45 2013"
      },
      "message": "Initial commit.\n\nThis is a sanitized, degoogled version of the internal Google logging package for Go.\nIt is in effect the Go version of code.google.com/p/google-glog, the C++ original.\n\nChanges from the Go original:\n\t- changing the package name from log to glog\n\t- taking out Google-specific details\n\t- removing some environment variables\n"
    },
    {
      "commit": "2d42ba6cf5d66a0098e7ba07a69cd5ab6232e199",
      "tree": "1908c8147fd3bd6ae2e91c8321b8e29a099f325f",
      "parents": [],
      "author": {
        "name": "Rob Pike",
        "email": "r@golang.org",
        "time": "Tue Jul 16 04:33:04 2013"
      },
      "committer": {
        "name": "robpike",
        "email": "robpike@gmail.com",
        "time": "Tue Jul 16 04:33:04 2013"
      },
      "message": "Initial commit\n"
    }
  ]
}
