superlogger 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +23 -48
  3. data/lib/superlogger.rb +20 -5
  4. data/lib/superlogger/action_controller_log_subscriber.rb +3 -11
  5. data/lib/superlogger/action_view_log_subscriber.rb +1 -1
  6. data/lib/superlogger/active_record_log_subscriber.rb +5 -3
  7. data/lib/superlogger/logger.rb +13 -27
  8. data/lib/superlogger/superlogger_middleware.rb +6 -6
  9. data/lib/superlogger/version.rb +1 -1
  10. data/test/dummy/app/assets/config/manifest.js +3 -0
  11. data/test/dummy/config/application.rb +3 -2
  12. data/test/dummy/db/development.sqlite3 +0 -0
  13. data/test/dummy/db/test.sqlite3 +0 -0
  14. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/0R/0RGmr4z2PoNrXTofNEJ55Wrv_v-N3HOrmSgU5ILkXTw.cache +1 -0
  15. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/T4/T4WYRrwWhIVaINf3NmLDXIAI3bybsjl0y4P1KQgM-Qs.cache → v4.0.0/0W/0W5MOuazdWJMvIog5vEAQfl3ZJiz8KFyVLyNiZ2Tp1I.cache} +0 -0
  16. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/rg/RgmbeHiCGDMtbXGovkyp2kHJljF3k6_21IfxBUqa2GQ.cache → v4.0.0/2T/2T69JIvG7bvXlqaEFz4SAmmQOu5KcDL3S7O0745_gVc.cache} +0 -0
  17. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/fE/fEpQwSnNzL1JpFhnElwxvX6YuOxn_vv_QuOTJNrl21M.cache → v4.0.0/2k/2k-V7fw5kQxgx8rJcOMPyJDQ4JbisbnfZQoC2TqHp78.cache} +0 -0
  18. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/38/38YtaoIS3EsFiiaKJPIWZKoxwdIGtUeAuwIBAuuQ8Mg.cache → v4.0.0/2l/2leDpqGCN2J9vjiI1IHvVMlK22cXy2F4hknNF3jqmkg.cache} +0 -0
  19. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/ZQ/ZQkA-jIm0iNMfDDgK-M4OcgHPKRo-uBuEEowd_5_6Rg.cache → v4.0.0/4T/4TXTXXyWGjYW5FUpWGY5b1ecc_ASKWAmht53-rfZ3f4.cache} +0 -0
  20. data/test/dummy/tmp/cache/assets/sprockets/{v3.0 → v4.0.0}/5L/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -0
  21. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/A-/A-o1cjWqvf_esvFcsIdNZYiYRAbfoTl6xWZoBdtvvsU.cache +0 -0
  22. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/AL/ALcoKZSxe_5jgiHJ70icJlBPAscxfFhRmVLKCKPFHrc.cache +0 -0
  23. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/CK/CKmWm-PGWv8LhwLfTt-8iccYQtEKrPkNNoK21YhKq8M.cache +1 -0
  24. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/DN/DNx8QhxaypFYkrRxHa0ASOI5Re2lXRbN9rGK77jX7K0.cache +0 -0
  25. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +2 -0
  26. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Dh/DhrpoAlYO43_xJT7cR7N5n3Gxc9T9lAEkJkux4ufwrc.cache +1 -0
  27. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Do/DO9Ss2TWmmIJ98nseuLX1kY8yXnC3rfw7qPbjcIiyIg.cache +0 -0
  28. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Do/Do83AoOat5W-c1g7piDGy2GMmffsY6JY0Qfuh5PY3GM.cache +0 -0
  29. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/GP/GPU7T8ibZQ9TVUeUKytpkmqoMwPEDhozvdIulY_ghQc.cache +1 -0
  30. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Hm/HmZiOch1q-Y-bWc2Bg4CkHs0WouAlAVwELLnUki2URU.cache +1 -0
  31. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/M6/M64-PqNj7ipUe_WWRewKavcFikbdVLpvtbkzo5KfCtg.cache +1 -0
  32. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/NX/NXtwZOKZ7yMMJA2FnKYowCStq4BXaQgukCAycF23R4Q.cache +1 -0
  33. data/test/dummy/tmp/cache/assets/sprockets/{v3.0 → v4.0.0}/OI/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -0
  34. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/SG/SGLQX80_DB28A_mjz_Eh9ZQxVU85Dz1YSRz0Xf3T6qE.cache → v4.0.0/Pu/Puw-QRmCoV436fSHMZZyBpIn_ZTQoicwVTISlz3vQoQ.cache} +0 -0
  35. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Rw/RwX76wVv_k976ST-OhQyd6E8Fgi2kfLW6yDFSdnCKA0.cache +0 -0
  36. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/SR/SRlBuVekx5voijkM7Pur-7CEeD9aOoItZYTK7KkxrPc.cache +2 -0
  37. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/-H/-HJqDF0cY1IQQf6G35SzwnWhdJwbb0rjsilAS1uSnC0.cache → v4.0.0/TG/TGTts-z_YI7jHUT1N8DOBGdHJLrIKmH_X-sgt638nU4.cache} +0 -0
  38. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/XX/XXb_KYmRcMmdP6iwA-m5TK3mNwd-sAWuIDU2BwYh8ys.cache +0 -0
  39. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/br/brSVWTme0G1yzUMjrDpklxoQetdFLXdF8ZUkYXFX-sE.cache → v4.0.0/YB/YBDUr0r2s3vM4McoPLgA6pwj6jYXTvANXBCQr79bS3U.cache} +0 -0
  40. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/Yu/YuxSXQJiI3M2WF3HcV2F-X-X6v0aqPZ87jaK3NIJpBQ.cache +1 -0
  41. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/Pg/PgSSsdzJcNT1S4NDynUSIcj_YZXO_IKpcmyafopOamk.cache → v4.0.0/aK/aKG1BE9i1nkV7pxwlTB5hccxO_vqSnmj2oxeB-VW1zY.cache} +0 -0
  42. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/bB/bBXVQV2jOiSWOwtiOr55XUT7RCVlSA-htXqhCHd166k.cache +1 -0
  43. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/bv/bvWA2msm_wKe-upUjI2eMf_Eqi7QlqXZ6M0_TsXEn4E.cache +1 -0
  44. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/cV/cV6tr7nK4y6dNjxzPIKLUszmCcCbY6g48N5ypr-cf78.cache +0 -0
  45. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/7J/7JXLU3kClrFYffhxcnNaLGjYz8LFI700NBjNiBOifaU.cache → v4.0.0/cq/cqYKlDsPOsR-Hutsi1Ia2tXUuzOfzbVLP4i9Aonwckk.cache} +0 -0
  46. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/dp/dpSU2IktVAqqMTj5iCA6Xg9aVjhNwuhNX987AAPo4Ss.cache +1 -0
  47. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/1e/1eeMDHdcXM5QG6315g0Uj656M_FVD0teimYul97xBzQ.cache → v4.0.0/ec/ecGOPxDOC-PTR8Q87Zu7XU3BS3ueVqHZihjkgAL1GSI.cache} +0 -0
  48. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gC/gCdMfTV-UrcBy2q1SovEwzaag5CwB0k_eFIstyv4gLk.cache +0 -0
  49. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/gZ/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +2 -0
  50. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/hF/hFSTd38enn2Za93gw3GzWrAZwHeNX0pUJPH7EiRpNn4.cache +1 -0
  51. data/test/dummy/tmp/cache/assets/sprockets/{v3.0 → v4.0.0}/hZ/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +0 -0
  52. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/iU/iU7cx0nTwBBaaOT_qzXbI8RiIXouPchtWuIlVcsWWks.cache +0 -0
  53. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/ys/ysosYWYA283HXmg_f6HoIzLi86SIIm3aVUwWF7tZJHY.cache → v4.0.0/iZ/iZ8YcXqVbBIniScbBCou8v1FocbWLbrgDzpQ5UnVuZI.cache} +0 -0
  54. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ig/igCHoAZu1ESqunQb96qV2Dmbt41uWhdJs8ztO5kRXi8.cache +1 -0
  55. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/jq/jqO64m7tXOlADW5o1Sy9C08R_i48GO1Wo0w0mUE4UPg.cache +1 -0
  56. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ko/koq-iWAlxiTFpALhUJsXNVGhxy7qAKZP69zJ8E9YdFY.cache +1 -0
  57. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ml/mlO31cacExw_jelM3vRJ3uZSMqsk-50vvXucoON-bkI.cache +1 -0
  58. data/test/dummy/tmp/cache/assets/sprockets/{v3.0 → v4.0.0}/pE/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +0 -0
  59. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/ph/phUbOaP6NCn983I6TT7qDlnwcmCAKjJVyDnDfKfjrI0.cache +0 -0
  60. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/pv/pv6tV3CDkIAmLXdU8EPLlNEkXAKJPufVD4VP30o4fWo.cache +0 -0
  61. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/q2/q2rsSyCOy3kUHoKipvqxAw3Z_GfF7PufP5wKBV2EEbA.cache +0 -0
  62. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/qE/qEdbzlDf-HNnbh60QhpqpvwNeEnCU8tTrPEnZAV4NE8.cache +1 -0
  63. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/r-/r-16n5JdDzbIS_kN06fC4J_-GA2dpracXKYNHsLe3d4.cache +0 -0
  64. data/test/dummy/tmp/cache/assets/sprockets/{v3.0/C_/C_C8IqUQirTZx1bt5Ewm3QJvhVbwm66pxvcH0maphFY.cache → v4.0.0/sO/sOS4yyqF_bYEJm1CSvCyiFQcStv5XUNBttwTmekhjv0.cache} +0 -0
  65. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/t3/t3tLjCcLizdoIbYBzZawbDaaD_niNTCxTyMWCAGVBso.cache +1 -0
  66. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/vW/vWfhzaoyrvEUgX0vnRufnld1buC_KEfVE_Y9GxTlEFc.cache +2 -0
  67. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/vo/voyjfPaosDvduWR6jKwI00MuapmfnNxtssiU8OpJCn8.cache +1 -0
  68. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/wq/wq0Gkd5cDkoJX9cTbcFfa70O1tFJZOB-WBE1B6A1D0Q.cache +1 -0
  69. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/x3/x3RXrNrKZMLOtSL6nQa-yFfgd0YP5AaeoP_5isPNggc.cache +1 -0
  70. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/xD/xDCgzYS-NOKY4wQ98x3bpVUmBipKrajnbyKsfZeXyKE.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/x_/x_m3GCJB04OFwZrek6vFjk1S_Qbkf1Kr5PAeGvTLUjE.cache +1 -0
  72. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/yw/ywwwCinw2TbO7jW-9-T0BKJdM4rcEDG7yxRiGJAuSqU.cache +0 -0
  73. data/test/dummy/tmp/cache/assets/sprockets/v4.0.0/z8/z86GAeZHuKvb4Z2ApdQizPKZkd9bJy3OH8zcwtNG5bQ.cache +1 -0
  74. data/test/superlogger_test.rb +30 -58
  75. metadata +150 -197
  76. data/test/dummy/log/development.log +0 -545
  77. data/test/dummy/log/test.log +0 -1732
  78. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ch/Ch2bQFHkYziI9Erdkuj8uoPJyw0W2aA5prtYAqlccww.cache +0 -1
  79. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Cq/Cq4V3OyOOk4eTJXISTKVc4MbIHDmq4eu3lSNh85i78k.cache +0 -1
  80. data/test/dummy/tmp/cache/assets/sprockets/v3.0/DS/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +0 -2
  81. data/test/dummy/tmp/cache/assets/sprockets/v3.0/EC/EC4O6KSVM5bCKFeBl2j8bzAbnhklqssWQ-6XEqM_tC4.cache +0 -0
  82. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Gy/Gyqn3Ja6WbUSqKnvWm9Xw7FIxFqJIPQ88IlgpguMo1s.cache +0 -1
  83. data/test/dummy/tmp/cache/assets/sprockets/v3.0/H3/H3tvaQM-yTy-25oSLlfjToAa74LSJHBDUpji-8C-eLg.cache +0 -0
  84. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Iv/IvDM1j8-H1H6kEjVCsyIW8N2zla-aIp9q_OE9PVZtVw.cache +0 -1
  85. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Jj/JjqPODxMglZzjE6lolNyoEiFCULPe-AH8rndpgamPPk.cache +0 -1
  86. data/test/dummy/tmp/cache/assets/sprockets/v3.0/K9/K9ZheMi0hi4DNLzmDMRnv9A_lOVz33kNImc16Now42o.cache +0 -1
  87. data/test/dummy/tmp/cache/assets/sprockets/v3.0/LH/LHgjtAV8kdldaJ_dX0RCznzjmWYRuLdhU29fZCJ0VmU.cache +0 -1
  88. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nn/NnUCa7jNYx9HCmEB7E7WPWT00DwaM4IYICy1Ju1jjcs.cache +0 -1
  89. data/test/dummy/tmp/cache/assets/sprockets/v3.0/O5/O5UdaBuHdxmEoYz3AFZsm3rh7MWtRFXwHOryps7b5tE.cache +0 -1
  90. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ol/OlBX9JIv9SAOmK2t35x1SYDx1sxCXF0yvqpna3WMyH0.cache +0 -1
  91. data/test/dummy/tmp/cache/assets/sprockets/v3.0/Yr/YrZ0OIHu42cExs1kqngMA6ShVDKhfGmhyW-E9haNo5Y.cache +0 -1
  92. data/test/dummy/tmp/cache/assets/sprockets/v3.0/ZU/ZUokoeZcfmoTFE9YAHZRhTgceOUGJTDGH__SCqPfkqU.cache +0 -0
  93. data/test/dummy/tmp/cache/assets/sprockets/v3.0/_I/_IocgQl8XVm84HohovEBj-GxsSeBkOpqN-94yHgY-K8.cache +0 -0
  94. data/test/dummy/tmp/cache/assets/sprockets/v3.0/bJ/bJVgCoQDvMv4iocjEuC3z3WqSeK7LXgxDJ-eXaHl0l4.cache +0 -0
  95. data/test/dummy/tmp/cache/assets/sprockets/v3.0/b_/b_-O1DwVvDk3vPJ-GHDgGWR9Zth9CYblcXbBe6aiTf0.cache +0 -0
  96. data/test/dummy/tmp/cache/assets/sprockets/v3.0/cI/cIaWfk6Nq6ZAr0fhtHGTBtsRITI5n8IJFZbClZ2tExw.cache +0 -0
  97. data/test/dummy/tmp/cache/assets/sprockets/v3.0/f-/f-gxq-RYinlir2WGpHfXu4C3r6M4aidyokcd7ZnBOao.cache +0 -1
  98. data/test/dummy/tmp/cache/assets/sprockets/v3.0/g3/g3x0V2jnf5A31QMz4xGeQMouu2eChQRpoe0BEWWESeY.cache +0 -1
  99. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gV/gVVPZef0xfm7t9Jyesa7ZVdnpzMpw2QtOyYUoEXO7fk.cache +0 -0
  100. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gZ/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +0 -2
  101. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gb/gbunrAFVOHPwl2npUgKv_C3f_qiJnZDd9zG5-h3jrpo.cache +0 -1
  102. data/test/dummy/tmp/cache/assets/sprockets/v3.0/gp/gpiWtnqpufka8lRtMznM6Ko0aWJrcH_j8cfZwdYmzNI.cache +0 -1
  103. data/test/dummy/tmp/cache/assets/sprockets/v3.0/hl/hlDmEHZNeRDjBO6WJNb8ftVgfvCQubblXCEJw_MO3ow.cache +0 -1
  104. data/test/dummy/tmp/cache/assets/sprockets/v3.0/i7/i7v4b6OSQUj-1r9vUWRiOHjAVksSTpUfilZTpk0ACLc.cache +0 -0
  105. data/test/dummy/tmp/cache/assets/sprockets/v3.0/kz/kzdSvu57G4i6eTuarsZCAfbhbICnkRa0Xhi0b9ua6qk.cache +0 -1
  106. data/test/dummy/tmp/cache/assets/sprockets/v3.0/mv/mvqN6PphkrOOC8zbUEhpC_9E_4ybdO25MRy_gG6dq3Y.cache +0 -1
  107. data/test/dummy/tmp/cache/assets/sprockets/v3.0/nm/nmcUZlKAIwyJ_35Nm9P8pukLeRX5aApP6NFj5MpNPgc.cache +0 -1
  108. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rC/rCO5-bHVJ6Y_GsPBmOPUL23pfjvc2Gw2zt_ODmZsygw.cache +0 -1
  109. data/test/dummy/tmp/cache/assets/sprockets/v3.0/rg/rghMLGUpm1Uy3OPgfILHnVwLCycV9Rd9kSpEbxdwVV4.cache +0 -0
  110. data/test/dummy/tmp/cache/assets/sprockets/v3.0/vm/vm9zMjZUFULeJsYWRoDd3cvnEpLGK-E5XTk30_NQTEs.cache +0 -0
  111. data/test/dummy/tmp/cache/assets/sprockets/v3.0/wD/wDDl7jzOUTDgFcG1JlpN6jVHavfzB8Smsjtl3d8WDx0.cache +0 -1
  112. data/test/dummy/tmp/cache/assets/sprockets/v3.0/xd/xdBKQyhEAlDIstGvXw945PWJoEWi23rKuY7elOcWqHc.cache +0 -1
  113. data/test/dummy/tmp/cache/sprockets/v3.0/-Z_pj4kfRj993e_ypawYQUIDIDKcRe569udVq_1drFs.cache +0 -1
  114. data/test/dummy/tmp/cache/sprockets/v3.0/2G0Z7Q5fvf2xX8ygtwcD9vZq-kwEzoV2MFc1URegs7s.cache +0 -1
  115. data/test/dummy/tmp/cache/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +0 -2
  116. data/test/dummy/tmp/cache/sprockets/v3.0/66bWF3byFzdKpXZsrn5Vy9CJBaDlkJKkoyqeLRRbBZY.cache +0 -0
  117. data/test/dummy/tmp/cache/sprockets/v3.0/9NtfUddiu2UU8sqL-bYq-NPAx8NGp5m5AYiAWAcKQQ4.cache +0 -0
  118. data/test/dummy/tmp/cache/sprockets/v3.0/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +0 -2
  119. data/test/dummy/tmp/cache/sprockets/v3.0/GELqHyWyVR_UvkpZPDb5xjZrCgkKB5G067DYoMwTjEA.cache +0 -0
  120. data/test/dummy/tmp/cache/sprockets/v3.0/Gyqn3Ja6WbUSqKnvWm9Xw7FIxFqJIPQ88IlgpguMo1s.cache +0 -1
  121. data/test/dummy/tmp/cache/sprockets/v3.0/H5fHMceViwaxMKkefsdMmVpBN3rRYZI1obJX5Jn-4jw.cache +0 -1
  122. data/test/dummy/tmp/cache/sprockets/v3.0/IEJfj4Zwfra6y7iF-BOVR9PPIQeL9L5IiZT8MRqpCXg.cache +0 -0
  123. data/test/dummy/tmp/cache/sprockets/v3.0/IordxSS9mOh1mkt2VyfX7Iz4DhZhy73lccOYxcw5aVU.cache +0 -1
  124. data/test/dummy/tmp/cache/sprockets/v3.0/KgQHhqXCaYHJSJEG6JweQVe1a2rC-mHfkrqD9p9taTU.cache +0 -2
  125. data/test/dummy/tmp/cache/sprockets/v3.0/Ki_R5uSCGEm1Jn7TSbJOc3eBMn4Q3_IPLG0r_RRn9lA.cache +0 -1
  126. data/test/dummy/tmp/cache/sprockets/v3.0/NBBjlBjfPdkZkp4G7VCEA9LAeGycMn10CxLbDAbNeHc.cache +0 -0
  127. data/test/dummy/tmp/cache/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +0 -2
  128. data/test/dummy/tmp/cache/sprockets/v3.0/V9m2At1eKJAvbGAFvFTUt8hcdNI-G8xW1AShyPYS4Ys.cache +0 -1
  129. data/test/dummy/tmp/cache/sprockets/v3.0/XsDQ8X8Klh__7HZNZk8sjYzyFg5TmATqo-_UraArzN8.cache +0 -1
  130. data/test/dummy/tmp/cache/sprockets/v3.0/ZtbyFLml01tdqcRh4Ocz6XOkbPpmHM6nFRRYY4Nphpc.cache +0 -1
  131. data/test/dummy/tmp/cache/sprockets/v3.0/_ZNMI9IrCfXNcrwiRGttWiFPcLlCSpkdJSFoLhmUpyg.cache +0 -0
  132. data/test/dummy/tmp/cache/sprockets/v3.0/brSVWTme0G1yzUMjrDpklxoQetdFLXdF8ZUkYXFX-sE.cache +0 -1
  133. data/test/dummy/tmp/cache/sprockets/v3.0/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +0 -2
  134. data/test/dummy/tmp/cache/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +0 -2
  135. data/test/dummy/tmp/cache/sprockets/v3.0/jqyQL40gGhkqnPg3IttXbq8JGHLONBjR0MlrN9HeIvU.cache +0 -1
  136. data/test/dummy/tmp/cache/sprockets/v3.0/kqQAJDpBuiNJ3XEy8VjtVcyUB9BVlP02oDMdVnlL04w.cache +0 -0
  137. data/test/dummy/tmp/cache/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +0 -2
  138. data/test/dummy/tmp/cache/sprockets/v3.0/pnW3u_1AN48ig6ngefI89y96xoSlvnJurx-e3J-leoE.cache +0 -2
  139. data/test/dummy/tmp/cache/sprockets/v3.0/q9kUTJTzJpwJJQ8CoWPFc_eCW76RZgB-R2sc4P84y6c.cache +0 -0
  140. data/test/dummy/tmp/cache/sprockets/v3.0/qFlPbNZ3UJs9EnENWVEbNWnrTEcjZkAQUzH55y3Ymi0.cache +0 -1
  141. data/test/dummy/tmp/cache/sprockets/v3.0/r86oWGkKGjcta2GtxqeESX1w_4FX1c_DWHxPWVKP28A.cache +0 -1
  142. data/test/dummy/tmp/cache/sprockets/v3.0/ssS2x0Wl67rwXHaVHsh6CO7ayn9fQ5saIwATKN6O-nI.cache +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 95512203bc8b39f0d4924b68d77e97ffc79c26e6
4
- data.tar.gz: 19ae2427a6b9e1df1b85ba7ed252fb0ae98d424e
2
+ SHA256:
3
+ metadata.gz: 6c620e677e4aebf4aea5cab58f2a6e392c5266016eaf32aef3a9a88f96c402fd
4
+ data.tar.gz: 59fd2728e8398194e9188f212d7dc3f1155f1c2f101d0916747fbcbd52d1c23c
5
5
  SHA512:
6
- metadata.gz: 73305d6f09e850f0a1534f8836db120bd20bf46a843330b38226d3778cb3044d73d31bc1e5473b5c7308465b3d75062ca8705bc2ce23ded18f2bcd17c2652b3f
7
- data.tar.gz: 25807a67f277bbdfcddf590c705bad9a3ef3eb16cad72c45019db16626fc994fae1ec1e676fda5a0be2369dc637f8cf22798539e11d6c8fe46b0a0127f88133b
6
+ metadata.gz: fd1ab3fe21cd6759e6732746fd6e206a71816f9926559098a0815d6940aa058568c9f5204b48dd643fe74b1639ddbe938dc11f9817ce5485058ade00207b451d
7
+ data.tar.gz: b55db9a3bccd0ce12fb20666b40f85d73c43b873ff9c9dab7cc776b3cd4667a7939202a18ab41212f9c33c31f9b5bebfde84a994b2126bf0a58ba8d13528fb5c
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  Superlogger - Machine-readable logging for Rails
6
6
  =======
7
7
 
8
- Rails' default request logging is easy to read for humans but difficult for log aggregators such as Kibana, Graylog and Splunk. Superlogger transforms the logs into key-value pairs for easy parsing and adds useful details like Timestamp, Session ID and Request ID for tracing purposes.
8
+ Rails' default request logging is easy to read for humans but difficult for log aggregators such as Kibana, Graylog and Splunk. Superlogger transforms the logs into JSON for easy parsing and adds useful details like Timestamp, Session ID and Request ID for tracing purposes.
9
9
 
10
10
  Default rails logging:
11
11
  ```sh
@@ -23,34 +23,18 @@ Started GET "/assets/application.self-8f06a73c35179188914ab50e057157639fce1401c1
23
23
 
24
24
  ```
25
25
 
26
- Machine-readable logging with Superlogger:
26
+ With Superlogger:
27
27
  ```sh
28
- # first request
29
- 2016-04-29 17:29:45.841 | 12dc0e484869 | 68d63a8cf920 | I | superlogger_middleware:30 | method=GET | path=/home/index | ip=::1
30
- 2016-04-29 17:29:45.847 | 12dc0e484869 | 68d63a8cf920 | D | action_controller_log_subscriber:9 | controller=HomeController | action=index | params={}
31
- 2016-04-29 17:29:45.852 | 12dc0e484869 | 68d63a8cf920 | D | active_record_log_subscriber:24 | sql=SELECT "somethings".* FROM "somethings" WHERE "somethings"."paper" = ? AND "somethings"."stone" = ? ORDER BY "somethings"."id" ASC LIMIT 1 | params=["123", "456"] | duration=0.13
32
- 2016-04-29 17:29:45.861 | 12dc0e484869 | 68d63a8cf920 | D | action_view_log_subscriber:6 | view=_partial.html.erb | duration=0.2
33
- 2016-04-29 17:29:45.861 | 12dc0e484869 | 68d63a8cf920 | D | action_view_log_subscriber:6 | view=index.html.erb | duration=3.2
34
- 2016-04-29 17:29:45.983 | 12dc0e484869 | 68d63a8cf920 | I | action_controller_log_subscriber:29 | status=200 | total_duration=135.92 | view_duration=130.38 | db_duration=0.33
35
- 2016-04-29 17:29:45.983 | 12dc0e484869 | 68d63a8cf920 | I | superlogger_middleware:30 | method=GET | path=/home/index | total_duration=135.92
36
-
37
- # second request
38
- 2016-04-29 17:39:54.879 | 12dc0e484869 | e463d380fb63 | I | superlogger_middleware:30 | method=GET | path=/home/show | ip=::1
39
- 2016-04-29 17:39:54.879 | 12dc0e484869 | e463d380fb63 | D | action_controller_log_subscriber:9 | controller=HomeController | action=show | params={}
40
- 2016-04-29 17:39:54.882 | 12dc0e484869 | e463d380fb63 | D | action_view_log_subscriber:6 | view=show.html.erb | duration=0.2
41
- 2016-04-29 17:39:54.884 | 12dc0e484869 | e463d380fb63 | I | action_controller_log_subscriber:29 | status=200 | total_duration=4.64 | view_duration=4.55 | db_duration=0.0
42
- 2016-04-29 17:39:54.884 | 12dc0e484869 | e463d380fb63 | I | superlogger_middleware:30 | method=GET | path=/home/index | total_duration=4.64
28
+ {"level":"debug","ts":1590972589.522784,"caller":"superlogger/active_record_log_subscriber:21","sql":"SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC","params":[],"duration":0.13}
29
+ {"level":"info","ts":1590972589.526133,"caller":"superlogger/superlogger_middleware:21","session_id":"90e90c75c72c","request_id":"34432478c89b4d8591e02e0169b40a56","method":"GET","path":"/home/index"}
30
+ {"level":"debug","ts":1590972589.546272,"caller":"superlogger/action_controller_log_subscriber:8","session_id":"90e90c75c72c","request_id":"34432478c89b4d8591e02e0169b40a56","controller":"HomeController","action":"index","params":{}}
31
+ {"level":"debug","ts":1590972589.55092,"caller":"superlogger/active_record_log_subscriber:21","session_id":"90e90c75c72c","request_id":"34432478c89b4d8591e02e0169b40a56","sql":"SELECT \"somethings\".* FROM \"somethings\" WHERE \"somethings\".\"paper\" = ? AND \"somethings\".\"stone\" = ? ORDER BY \"somethings\".\"id\" ASC LIMIT ?","params":["123","456","1"],"duration":0.22}
32
+ {"level":"debug","ts":1590972589.574199,"caller":"superlogger/action_view_log_subscriber:6","session_id":"90e90c75c72c","request_id":"34432478c89b4d8591e02e0169b40a56","view":"_partial.html.erb","duration":0.33}
33
+ {"level":"debug","ts":1590972589.574795,"caller":"superlogger/action_view_log_subscriber:6","session_id":"90e90c75c72c","request_id":"34432478c89b4d8591e02e0169b40a56","view":"index.html.erb","duration":2.95}
34
+ {"level":"info","ts":1590972589.61165,"caller":"superlogger/action_controller_log_subscriber:20","session_id":"90e90c75c72c","request_id":"34432478c89b4d8591e02e0169b40a56","view_duration":54.59,"db_duration":0.85}
35
+ {"level":"info","ts":1590972589.611928,"caller":"superlogger/superlogger_middleware:30","session_id":"90e90c75c72c","request_id":"34432478c89b4d8591e02e0169b40a56","method":"GET","path":"/home/index","response_time":85.65,"status":200}
43
36
  ```
44
37
 
45
- ## Features ##
46
- - Timestamp (milliseconds)
47
- - Session ID for logs belonging to the same user session (notice above that both the requests have the same session id)
48
- - Request ID for logs belonging to the same page request (notice above that each request have a different request id)
49
- - Hashes will be logged as key-value pairs automatically
50
- - Requests for assets will not be logged
51
- - File and line numbers
52
- - IP address of request
53
-
54
38
  ## Installation ##
55
39
 
56
40
  Add superlogger to your application's Gemfile
@@ -63,37 +47,28 @@ Execute:
63
47
  $ bundle
64
48
  ```
65
49
 
66
- And add the following in `config/application.rb`
50
+ And add the following in `config/environment/production.rb`
67
51
  ```ruby
68
52
  config.logger = Superlogger::Logger.new(STDOUT)
69
53
  ```
70
54
 
55
+ By default, Superlogger is only enabled in production environment because JSON is easy for machines to parse but difficult for humans to read. To forcefully enable Superlogger in non-production environment, set in `config/application.rb`:
56
+ ```ruby
57
+ Superlogger.enabled = true
58
+ ```
59
+
71
60
  ## Usage ##
72
61
 
73
62
  Log as per normal using `Rails.logger`.
74
63
 
75
64
  ```ruby
76
- class SomeClass
77
- def some_method
78
- Rails.logger.debug foo:'true', bar: 'false'
79
- Rails.logger.info foo:'true', bar: 'false'
80
- Rails.logger.warn foo:'true', bar: 'false'
81
- Rails.logger.error foo:'true', bar: 'false'
82
- Rails.logger.fatal foo:'true', bar: 'false'
83
- end
84
- end
65
+ Rails.logger.info foo:'true', bar: 'false'
66
+ Rails.logger.info "Meatball"
85
67
  ```
86
68
 
87
69
  ## Log Format ##
88
- ```sh
89
- 2015-03-26 23:37:38.086 | 12dc0e484869 | e463d380fb63 | I | action_controller_log_subscriber:29 | status=200 | total_duration=4.64 | view_duration=4.55 | db_duration=0.0
90
- < timestamp > | < session id > | < request id > | < severity > | < file >:< line num > | < data you pass in ... >
91
- < 23 chars > | < 12 chars > | <12 chars > | < 1 char > | < ? chars > | < ? chars >
92
- ```
93
-
94
- ### Severity Levels ###
95
- - **D** - Debug
96
- - **I** - Info
97
- - **W** - Warn
98
- - **E** - Error
99
- - **F** - Fatal
70
+ - `ts` = Unix Epoch timestamp
71
+ - `session_id` = Truncated to 12 characters
72
+ - `request_id` = 32 characters
73
+ - `msg` = If values given is not a hash, it is treated as `{"msg":<value>"}`
74
+ - All duration related fields are in milliseconds
@@ -2,9 +2,13 @@ require 'superlogger/version'
2
2
  require 'superlogger/logger'
3
3
 
4
4
  module Superlogger
5
+ @@enabled = false
6
+
5
7
  module_function
6
8
 
7
9
  def setup(app)
10
+ return unless (Rails.env.production? || enabled)
11
+
8
12
  insert_superlogger_middleware(app)
9
13
  detach_existing_log_subscribers
10
14
  attach_superlogger_log_subscribers
@@ -24,7 +28,7 @@ module Superlogger
24
28
  require 'action_view/log_subscriber'
25
29
 
26
30
  # remove log subscribers
27
- patterns = %w(sql.active_record
31
+ remove_patterns = %w(sql.active_record
28
32
  start_processing.action_controller
29
33
  process_action.action_controller
30
34
  render_template.action_view
@@ -32,8 +36,11 @@ module Superlogger
32
36
  render_collection.action_view)
33
37
 
34
38
  ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
35
- subscriber.patterns.each do |pattern|
36
- ActiveSupport::Notifications.unsubscribe pattern if patterns.include?(pattern)
39
+ patterns = subscriber.patterns
40
+ patterns = patterns.is_a?(Hash) ? patterns.keys : patterns
41
+
42
+ patterns.each do |pattern|
43
+ ActiveSupport::Notifications.unsubscribe pattern if remove_patterns.include?(pattern)
37
44
  end
38
45
  end
39
46
  end
@@ -49,7 +56,7 @@ module Superlogger
49
56
  end
50
57
 
51
58
  def session_id
52
- RequestStore.store[:superlogger_session_id] || "NS-#{Thread.current.object_id}"
59
+ RequestStore.store[:superlogger_session_id]
53
60
  end
54
61
 
55
62
  def request_id=(request_id)
@@ -57,7 +64,15 @@ module Superlogger
57
64
  end
58
65
 
59
66
  def request_id
60
- RequestStore.store[:superlogger_request_id] || "NR-#{Thread.current.object_id}"
67
+ RequestStore.store[:superlogger_request_id]
68
+ end
69
+
70
+ def enabled=(enabled)
71
+ @@enabled=enabled
72
+ end
73
+
74
+ def enabled
75
+ @@enabled
61
76
  end
62
77
  end
63
78
 
@@ -5,27 +5,19 @@ module Superlogger
5
5
  # start of controller action
6
6
  def start_processing(event)
7
7
  payload = event.payload
8
-
9
- logger.debug controller: payload[:controller], action: payload[:action], params: payload[:params].except(*INTERNAL_PARAMS)
8
+ logger.debug {{ controller: payload[:controller], action: payload[:action], params: payload[:params].except(*INTERNAL_PARAMS) }}
10
9
  end
11
10
 
12
11
  # end of controller action
13
12
  def process_action(event)
14
13
  payload = event.payload
15
- total_duration = event.duration.to_f.round(2)
16
14
  view_duration = payload[:view_runtime].to_f.round(2) if payload.key?(:view_runtime)
17
15
  db_duration = payload[:db_runtime].to_f.round(2) if payload.key?(:db_runtime)
18
16
 
19
17
  if payload[:exception]
20
- status = ActionDispatch::ExceptionWrapper.status_code_for_exception(payload[:exception][0])
21
-
22
- logger.fatal status: status, total_duration: total_duration, view_duration: view_duration, db_duration: db_duration, exception: payload[:exception]
18
+ logger.fatal view_duration: view_duration, db_duration: db_duration, exception: payload[:exception]
23
19
  else
24
- # Assume status 401 if action finishes without status code and no exception
25
- # https://github.com/pcg79/devise/commit/1e2dab3c0ce49efe2b5940c15f47388c69d6731b
26
- payload[:status] ||= 401
27
-
28
- logger.info status: payload[:status], total_duration: total_duration, view_duration: view_duration, db_duration: db_duration
20
+ logger.info view_duration: view_duration, db_duration: db_duration
29
21
  end
30
22
  end
31
23
  end
@@ -3,7 +3,7 @@ module Superlogger
3
3
  def render_template(event)
4
4
  payload = event.payload
5
5
 
6
- logger.debug view: payload[:identifier].split('/').last, duration: event.duration.round(1)
6
+ logger.debug {{ view: payload[:identifier].split('/').last, duration: event.duration.round(2) }}
7
7
  end
8
8
  alias :render_partial :render_template
9
9
  alias :render_collection :render_template
@@ -18,10 +18,12 @@ module Superlogger
18
18
  payload = event.payload
19
19
  return if IGNORE_PAYLOAD_NAMES.include?(payload[:name])
20
20
 
21
- sql = payload[:sql]
22
- params = payload[:binds].map { |_, value| value.to_s }
21
+ logger.debug do
22
+ sql = payload[:sql]
23
+ params = payload[:binds].map { |b| b.value.to_s }
23
24
 
24
- logger.debug sql: sql, params: params, duration: event.duration.round(2)
25
+ { sql: sql, params: params, duration: event.duration.round(2) }
26
+ end
25
27
  end
26
28
  end
27
29
  end
@@ -2,26 +2,25 @@ require 'request_store'
2
2
 
3
3
  module Superlogger
4
4
  class Logger < ActiveSupport::Logger
5
- def initialize(*args)
6
- super
7
- @formatter = SimpleFormatter.new
8
- end
9
-
10
5
  def format_message(severity, time, _progname, msg)
11
6
  return nil if msg.blank? # Silence nil and empty msg
12
7
  return nil if is_rails_rack_logger_msg?(msg) # Silence rack logger msg
13
8
 
14
- timestamp = time.strftime('%Y-%m-%d %H:%M:%S.%L')
15
- session_id = Superlogger.session_id[0..11]
16
- request_id = Superlogger.request_id[0..11]
17
- severity = severity.to_s.upcase[0]
18
- caller_location = get_caller_location
19
- args = format_args(msg)
9
+ msg = {msg: msg} unless msg.is_a?(Hash)
10
+
11
+ h = {}
12
+ h[:level] = severity.downcase
13
+ h[:ts] = time.to_f
14
+ h[:caller] = get_caller_location
15
+ h[:session_id] = Superlogger.session_id[0..11] unless Superlogger.session_id.nil?
16
+ h[:request_id] = Superlogger.request_id unless Superlogger.request_id.nil?
17
+ h.merge!(msg)
20
18
 
21
- "#{timestamp} | #{session_id} | #{request_id} | #{severity} | #{caller_location} | #{args}\n"
19
+ h.to_json + "\n"
22
20
  end
23
21
 
24
22
  def is_rails_rack_logger_msg?(msg)
23
+ return false unless msg.is_a?(String)
25
24
  msg =~ /Started (GET|POST|PUT|PATCH|DELETE)/
26
25
  end
27
26
 
@@ -30,25 +29,12 @@ module Superlogger
30
29
  location = caller_locations(index, 1).first
31
30
 
32
31
  # Extract filename without file extension from location.path
33
- # eg. superlogger/lib/superlogger/logger.rb
34
- file = location.path.split('/').last.split('.').first
32
+ # eg. superlogger/lib/superlogger/logger.rb => superlogger/logger
33
+ file = location.path.split('/').last(2).join('/').split('.').first
35
34
 
36
35
  "#{file}:#{location.lineno}"
37
36
  end
38
37
 
39
- def format_args(args)
40
- output = if args.is_a?(Hash)
41
- # Format args in key=value pair, separated by pipes
42
- args.map do |key, value|
43
- "#{key}=#{value}"
44
- end.join(' | ')
45
- else
46
- args.to_s
47
- end
48
-
49
- output.gsub("\n", '\\n') # Escape newlines
50
- end
51
-
52
38
  # To silence double logging when running `rails server` in development mode
53
39
  # See: https://github.com/rails/rails/commit/3d10d9d6c3b831fe9632c43a0ffec46104f912a7
54
40
  if Rails.env.development?
@@ -6,7 +6,7 @@ module Superlogger
6
6
 
7
7
  def call(env)
8
8
  request = ActionDispatch::Request.new(env)
9
-
9
+
10
10
  if request.path.start_with?('/assets/') == false
11
11
  process_request(request) { @app.call(env) }
12
12
  else
@@ -18,18 +18,18 @@ module Superlogger
18
18
  setup_logging(request)
19
19
 
20
20
  # Start of request
21
- Rails.logger.info method: request.method, path: request.fullpath, ip: request.ip
21
+ Rails.logger.info method: request.method, path: request.fullpath
22
22
 
23
23
  t1 = Time.now
24
- result = yield
24
+ status, _headers, _response = yield
25
25
  ensure
26
26
  t2 = Time.now
27
27
 
28
28
  # End of request
29
29
  duration = ((t2 - t1) * 1000).to_f.round(2)
30
- Rails.logger.info method: request.method, path: request.fullpath, total_duration: duration
30
+ Rails.logger.info method: request.method, path: request.fullpath, response_time: duration, status: status
31
31
 
32
- result
32
+ [status, _headers, _response]
33
33
  end
34
34
 
35
35
  def setup_logging(request)
@@ -38,7 +38,7 @@ module Superlogger
38
38
  request.env['rack.session'].send(:load!) unless request.env['rack.session'].id
39
39
 
40
40
  # Store session id before any actual logging is done
41
- Superlogger.session_id = request.env['rack.session'].id
41
+ Superlogger.session_id = request.env['rack.session'].id.to_s
42
42
  end
43
43
 
44
44
  Superlogger.request_id = request.uuid.try(:gsub, '-', '')
@@ -1,3 +1,3 @@
1
1
  module Superlogger
2
- VERSION = '0.2.1'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -19,8 +19,9 @@ module Dummy
19
19
  # config.i18n.default_locale = :de
20
20
 
21
21
  # Do not swallow errors in after_commit/after_rollback callbacks.
22
- config.active_record.raise_in_transactional_callbacks = true
23
-
22
+ # config.active_record.raise_in_transactional_callbacks = true
23
+
24
+ Superlogger.enabled = true
24
25
  config.logger = Superlogger::Logger.new(STDOUT)
25
26
  end
26
27
  end
Binary file
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&id=35457672c92c6af73d636e236ae1cd10aac4e534c8a82e7e64baa244865ef751:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=26fe8f914a37edbad87b42be24a2d404d35668a8dce9e4763f34d075fcac8b15:ET
@@ -0,0 +1,2 @@
1
+ [o:Set:
2
+ @hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"0processors:type=text/css&file_type=text/css;TTI"9file-digest://app/assets/stylesheets/application.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI")file-digest://app/assets/stylesheets;TTF
@@ -0,0 +1 @@
1
+ I"�app/assets/stylesheets/application.css?type=application/css-sourcemap+json&id=245e7a94c06b1f881c5352975228cd489f0a91feefc65246ff95e65b6b39867c:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&pipeline=debug&id=4df50b1c4e9a53c8d22402cd979528a45dbbaa3ccf84d6ddbce8b222068b566f:ET
@@ -0,0 +1 @@
1
+ "%��B�����șo�$'�A�d��L���xR�U
@@ -0,0 +1 @@
1
+ I"�app/assets/config/manifest.js?type=application/javascript&pipeline=self&id=ce2a932dae95687b3860d16aae7a59f67f91ac4bd4205a0dc22ddcbc3385c573:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/stylesheets/application.css?type=text/css&pipeline=debug&id=3484c58768769ddd7f077d1c5fd178d80a41dd50fd8e836ed5e8085e034c5fea:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=6687bbf9d7433b294f04a3aad09b1d97293ef96e2ac308e499147fbb9172a981:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&id=bb5330ed19289447fa41dc76755a74a1e500aed3921dc0b2894d7dda444a3f89:ET
@@ -0,0 +1 @@
1
+ I"�app/assets/javascripts/application.js?type=application/javascript&id=c9bb4c7d24a3bd793a4481061e9093005bab65f9a254f4f6385abbd3014ca25b:ET