Skip to content

Instantly share code, notes, and snippets.

@lyrixx
Last active August 29, 2015 14:07
Show Gist options
  • Save lyrixx/0b174188560922eecae2 to your computer and use it in GitHub Desktop.
Save lyrixx/0b174188560922eecae2 to your computer and use it in GitHub Desktop.
Monolog.lua
-- Sample input:
-- {
-- "message": "Reloading user from user provider.",
-- "context": [
-- ],
-- "level": 100,
-- "level_name": "DEBUG",
-- "channel": "security",
-- "datetime": {
-- "date": "2014-05-23 14:19:19",
-- "timezone_type": 3,
-- "timezone": "Europe\/Paris"
-- },
-- "extra": {
-- "url": "\/app_dev.php\/",
-- "ip": "127.0.0.1",
-- "http_method": "GET",
-- "server": "connect.product.localhost",
-- "referrer": null
-- }
-- }
require "cjson"
local dt = require "date_time"
require "string"
local msg_type = read_config("type")
local msg_hostname = read_config("hostname")
local msg_facet = read_config("facet")
local msg_server = read_config("server")
-- You can generate the following list with this PHP script
-- <?php
-- $tzlist = [];
-- foreach (DateTimeZone::listIdentifiers() as $tz) {
-- $tz = new DateTimeZone($tz);
-- $tzlist[$tz->getName()] = $tz->getOffset(new Datetime()) * 1e9;
-- }
-- echo "local tzlist = {\n";
-- foreach ($tzlist as $tz => $offset) {
-- echo " [\"$tz\"] = $offset,\n";
-- }
-- echo "}\n";
local tzlist = {
["Africa/Abidjan"] = 0,
["Africa/Accra"] = 0,
["Africa/Addis_Ababa"] = 10800000000000,
["Africa/Algiers"] = 3600000000000,
["Africa/Asmara"] = 10800000000000,
["Africa/Bamako"] = 0,
["Africa/Bangui"] = 3600000000000,
["Africa/Banjul"] = 0,
["Africa/Bissau"] = 0,
["Africa/Blantyre"] = 7200000000000,
["Africa/Brazzaville"] = 3600000000000,
["Africa/Bujumbura"] = 7200000000000,
["Africa/Cairo"] = 7200000000000,
["Africa/Casablanca"] = 3600000000000,
["Africa/Ceuta"] = 7200000000000,
["Africa/Conakry"] = 0,
["Africa/Dakar"] = 0,
["Africa/Dar_es_Salaam"] = 10800000000000,
["Africa/Djibouti"] = 10800000000000,
["Africa/Douala"] = 3600000000000,
["Africa/El_Aaiun"] = 0,
["Africa/Freetown"] = 0,
["Africa/Gaborone"] = 7200000000000,
["Africa/Harare"] = 7200000000000,
["Africa/Johannesburg"] = 7200000000000,
["Africa/Juba"] = 10800000000000,
["Africa/Kampala"] = 10800000000000,
["Africa/Khartoum"] = 10800000000000,
["Africa/Kigali"] = 7200000000000,
["Africa/Kinshasa"] = 3600000000000,
["Africa/Lagos"] = 3600000000000,
["Africa/Libreville"] = 3600000000000,
["Africa/Lome"] = 0,
["Africa/Luanda"] = 3600000000000,
["Africa/Lubumbashi"] = 7200000000000,
["Africa/Lusaka"] = 7200000000000,
["Africa/Malabo"] = 3600000000000,
["Africa/Maputo"] = 7200000000000,
["Africa/Maseru"] = 7200000000000,
["Africa/Mbabane"] = 7200000000000,
["Africa/Mogadishu"] = 10800000000000,
["Africa/Monrovia"] = 0,
["Africa/Nairobi"] = 10800000000000,
["Africa/Ndjamena"] = 3600000000000,
["Africa/Niamey"] = 3600000000000,
["Africa/Nouakchott"] = 0,
["Africa/Ouagadougou"] = 0,
["Africa/Porto-Novo"] = 3600000000000,
["Africa/Sao_Tome"] = 0,
["Africa/Tripoli"] = 7200000000000,
["Africa/Tunis"] = 3600000000000,
["Africa/Windhoek"] = 7200000000000,
["America/Adak"] = -32400000000000,
["America/Anchorage"] = -28800000000000,
["America/Anguilla"] = -14400000000000,
["America/Antigua"] = -14400000000000,
["America/Araguaina"] = -10800000000000,
["America/Argentina/Buenos_Aires"] = -10800000000000,
["America/Argentina/Catamarca"] = -10800000000000,
["America/Argentina/Cordoba"] = -10800000000000,
["America/Argentina/Jujuy"] = -10800000000000,
["America/Argentina/La_Rioja"] = -10800000000000,
["America/Argentina/Mendoza"] = -10800000000000,
["America/Argentina/Rio_Gallegos"] = -10800000000000,
["America/Argentina/Salta"] = -10800000000000,
["America/Argentina/San_Juan"] = -10800000000000,
["America/Argentina/San_Luis"] = -10800000000000,
["America/Argentina/Tucuman"] = -10800000000000,
["America/Argentina/Ushuaia"] = -10800000000000,
["America/Aruba"] = -14400000000000,
["America/Asuncion"] = -10800000000000,
["America/Atikokan"] = -18000000000000,
["America/Bahia"] = -10800000000000,
["America/Bahia_Banderas"] = -18000000000000,
["America/Barbados"] = -14400000000000,
["America/Belem"] = -10800000000000,
["America/Belize"] = -21600000000000,
["America/Blanc-Sablon"] = -14400000000000,
["America/Boa_Vista"] = -14400000000000,
["America/Bogota"] = -18000000000000,
["America/Boise"] = -21600000000000,
["America/Cambridge_Bay"] = -21600000000000,
["America/Campo_Grande"] = -14400000000000,
["America/Cancun"] = -18000000000000,
["America/Caracas"] = -16200000000000,
["America/Cayenne"] = -10800000000000,
["America/Cayman"] = -18000000000000,
["America/Chicago"] = -18000000000000,
["America/Chihuahua"] = -21600000000000,
["America/Costa_Rica"] = -21600000000000,
["America/Creston"] = -25200000000000,
["America/Cuiaba"] = -14400000000000,
["America/Curacao"] = -14400000000000,
["America/Danmarkshavn"] = 0,
["America/Dawson"] = -25200000000000,
["America/Dawson_Creek"] = -25200000000000,
["America/Denver"] = -21600000000000,
["America/Detroit"] = -14400000000000,
["America/Dominica"] = -14400000000000,
["America/Edmonton"] = -21600000000000,
["America/Eirunepe"] = -14400000000000,
["America/El_Salvador"] = -21600000000000,
["America/Fortaleza"] = -10800000000000,
["America/Glace_Bay"] = -10800000000000,
["America/Godthab"] = -7200000000000,
["America/Goose_Bay"] = -10800000000000,
["America/Grand_Turk"] = -14400000000000,
["America/Grenada"] = -14400000000000,
["America/Guadeloupe"] = -14400000000000,
["America/Guatemala"] = -21600000000000,
["America/Guayaquil"] = -18000000000000,
["America/Guyana"] = -14400000000000,
["America/Halifax"] = -10800000000000,
["America/Havana"] = -14400000000000,
["America/Hermosillo"] = -25200000000000,
["America/Indiana/Indianapolis"] = -14400000000000,
["America/Indiana/Knox"] = -18000000000000,
["America/Indiana/Marengo"] = -14400000000000,
["America/Indiana/Petersburg"] = -14400000000000,
["America/Indiana/Tell_City"] = -18000000000000,
["America/Indiana/Vevay"] = -14400000000000,
["America/Indiana/Vincennes"] = -14400000000000,
["America/Indiana/Winamac"] = -14400000000000,
["America/Inuvik"] = -21600000000000,
["America/Iqaluit"] = -14400000000000,
["America/Jamaica"] = -18000000000000,
["America/Juneau"] = -28800000000000,
["America/Kentucky/Louisville"] = -14400000000000,
["America/Kentucky/Monticello"] = -14400000000000,
["America/Kralendijk"] = -14400000000000,
["America/La_Paz"] = -14400000000000,
["America/Lima"] = -18000000000000,
["America/Los_Angeles"] = -25200000000000,
["America/Lower_Princes"] = -14400000000000,
["America/Maceio"] = -10800000000000,
["America/Managua"] = -21600000000000,
["America/Manaus"] = -14400000000000,
["America/Marigot"] = -14400000000000,
["America/Martinique"] = -14400000000000,
["America/Matamoros"] = -18000000000000,
["America/Mazatlan"] = -21600000000000,
["America/Menominee"] = -18000000000000,
["America/Merida"] = -18000000000000,
["America/Metlakatla"] = -28800000000000,
["America/Mexico_City"] = -18000000000000,
["America/Miquelon"] = -7200000000000,
["America/Moncton"] = -10800000000000,
["America/Monterrey"] = -18000000000000,
["America/Montevideo"] = -7200000000000,
["America/Montserrat"] = -14400000000000,
["America/Nassau"] = -14400000000000,
["America/New_York"] = -14400000000000,
["America/Nipigon"] = -14400000000000,
["America/Nome"] = -28800000000000,
["America/Noronha"] = -7200000000000,
["America/North_Dakota/Beulah"] = -18000000000000,
["America/North_Dakota/Center"] = -18000000000000,
["America/North_Dakota/New_Salem"] = -18000000000000,
["America/Ojinaga"] = -21600000000000,
["America/Panama"] = -18000000000000,
["America/Pangnirtung"] = -14400000000000,
["America/Paramaribo"] = -10800000000000,
["America/Phoenix"] = -25200000000000,
["America/Port-au-Prince"] = -14400000000000,
["America/Port_of_Spain"] = -14400000000000,
["America/Porto_Velho"] = -14400000000000,
["America/Puerto_Rico"] = -14400000000000,
["America/Rainy_River"] = -18000000000000,
["America/Rankin_Inlet"] = -18000000000000,
["America/Recife"] = -10800000000000,
["America/Regina"] = -21600000000000,
["America/Resolute"] = -18000000000000,
["America/Rio_Branco"] = -14400000000000,
["America/Santa_Isabel"] = -25200000000000,
["America/Santarem"] = -10800000000000,
["America/Santiago"] = -10800000000000,
["America/Santo_Domingo"] = -14400000000000,
["America/Sao_Paulo"] = -10800000000000,
["America/Scoresbysund"] = 0,
["America/Sitka"] = -28800000000000,
["America/St_Barthelemy"] = -14400000000000,
["America/St_Johns"] = -9000000000000,
["America/St_Kitts"] = -14400000000000,
["America/St_Lucia"] = -14400000000000,
["America/St_Thomas"] = -14400000000000,
["America/St_Vincent"] = -14400000000000,
["America/Swift_Current"] = -21600000000000,
["America/Tegucigalpa"] = -21600000000000,
["America/Thule"] = -10800000000000,
["America/Thunder_Bay"] = -14400000000000,
["America/Tijuana"] = -25200000000000,
["America/Toronto"] = -14400000000000,
["America/Tortola"] = -14400000000000,
["America/Vancouver"] = -25200000000000,
["America/Whitehorse"] = -25200000000000,
["America/Winnipeg"] = -18000000000000,
["America/Yakutat"] = -28800000000000,
["America/Yellowknife"] = -21600000000000,
["Antarctica/Casey"] = 28800000000000,
["Antarctica/Davis"] = 25200000000000,
["Antarctica/DumontDUrville"] = 36000000000000,
["Antarctica/Macquarie"] = 39600000000000,
["Antarctica/Mawson"] = 18000000000000,
["Antarctica/McMurdo"] = 46800000000000,
["Antarctica/Palmer"] = -10800000000000,
["Antarctica/Rothera"] = -10800000000000,
["Antarctica/Syowa"] = 10800000000000,
["Antarctica/Vostok"] = 21600000000000,
["Arctic/Longyearbyen"] = 7200000000000,
["Asia/Aden"] = 10800000000000,
["Asia/Almaty"] = 21600000000000,
["Asia/Amman"] = 10800000000000,
["Asia/Anadyr"] = 43200000000000,
["Asia/Aqtau"] = 18000000000000,
["Asia/Aqtobe"] = 18000000000000,
["Asia/Ashgabat"] = 18000000000000,
["Asia/Baghdad"] = 10800000000000,
["Asia/Bahrain"] = 10800000000000,
["Asia/Baku"] = 18000000000000,
["Asia/Bangkok"] = 25200000000000,
["Asia/Beirut"] = 10800000000000,
["Asia/Bishkek"] = 21600000000000,
["Asia/Brunei"] = 28800000000000,
["Asia/Choibalsan"] = 28800000000000,
["Asia/Chongqing"] = 28800000000000,
["Asia/Colombo"] = 19800000000000,
["Asia/Damascus"] = 10800000000000,
["Asia/Dhaka"] = 21600000000000,
["Asia/Dili"] = 32400000000000,
["Asia/Dubai"] = 14400000000000,
["Asia/Dushanbe"] = 18000000000000,
["Asia/Gaza"] = 7200000000000,
["Asia/Harbin"] = 28800000000000,
["Asia/Hebron"] = 7200000000000,
["Asia/Ho_Chi_Minh"] = 25200000000000,
["Asia/Hong_Kong"] = 28800000000000,
["Asia/Hovd"] = 25200000000000,
["Asia/Irkutsk"] = 32400000000000,
["Asia/Jakarta"] = 25200000000000,
["Asia/Jayapura"] = 32400000000000,
["Asia/Jerusalem"] = 10800000000000,
["Asia/Kabul"] = 16200000000000,
["Asia/Kamchatka"] = 43200000000000,
["Asia/Karachi"] = 18000000000000,
["Asia/Kashgar"] = 28800000000000,
["Asia/Kathmandu"] = 20700000000000,
["Asia/Khandyga"] = 36000000000000,
["Asia/Kolkata"] = 19800000000000,
["Asia/Krasnoyarsk"] = 28800000000000,
["Asia/Kuala_Lumpur"] = 28800000000000,
["Asia/Kuching"] = 28800000000000,
["Asia/Kuwait"] = 10800000000000,
["Asia/Macau"] = 28800000000000,
["Asia/Magadan"] = 43200000000000,
["Asia/Makassar"] = 28800000000000,
["Asia/Manila"] = 28800000000000,
["Asia/Muscat"] = 14400000000000,
["Asia/Nicosia"] = 10800000000000,
["Asia/Novokuznetsk"] = 25200000000000,
["Asia/Novosibirsk"] = 25200000000000,
["Asia/Omsk"] = 25200000000000,
["Asia/Oral"] = 18000000000000,
["Asia/Phnom_Penh"] = 25200000000000,
["Asia/Pontianak"] = 25200000000000,
["Asia/Pyongyang"] = 32400000000000,
["Asia/Qatar"] = 10800000000000,
["Asia/Qyzylorda"] = 21600000000000,
["Asia/Rangoon"] = 23400000000000,
["Asia/Riyadh"] = 10800000000000,
["Asia/Sakhalin"] = 39600000000000,
["Asia/Samarkand"] = 18000000000000,
["Asia/Seoul"] = 32400000000000,
["Asia/Shanghai"] = 28800000000000,
["Asia/Singapore"] = 28800000000000,
["Asia/Taipei"] = 28800000000000,
["Asia/Tashkent"] = 18000000000000,
["Asia/Tbilisi"] = 14400000000000,
["Asia/Tehran"] = 12600000000000,
["Asia/Thimphu"] = 21600000000000,
["Asia/Tokyo"] = 32400000000000,
["Asia/Ulaanbaatar"] = 28800000000000,
["Asia/Urumqi"] = 28800000000000,
["Asia/Ust-Nera"] = 39600000000000,
["Asia/Vientiane"] = 25200000000000,
["Asia/Vladivostok"] = 39600000000000,
["Asia/Yakutsk"] = 36000000000000,
["Asia/Yekaterinburg"] = 21600000000000,
["Asia/Yerevan"] = 14400000000000,
["Atlantic/Azores"] = 0,
["Atlantic/Bermuda"] = -10800000000000,
["Atlantic/Canary"] = 3600000000000,
["Atlantic/Cape_Verde"] = -3600000000000,
["Atlantic/Faroe"] = 3600000000000,
["Atlantic/Madeira"] = 3600000000000,
["Atlantic/Reykjavik"] = 0,
["Atlantic/South_Georgia"] = -7200000000000,
["Atlantic/St_Helena"] = 0,
["Atlantic/Stanley"] = -10800000000000,
["Australia/Adelaide"] = 37800000000000,
["Australia/Brisbane"] = 36000000000000,
["Australia/Broken_Hill"] = 37800000000000,
["Australia/Currie"] = 39600000000000,
["Australia/Darwin"] = 34200000000000,
["Australia/Eucla"] = 31500000000000,
["Australia/Hobart"] = 39600000000000,
["Australia/Lindeman"] = 36000000000000,
["Australia/Lord_Howe"] = 39600000000000,
["Australia/Melbourne"] = 39600000000000,
["Australia/Perth"] = 28800000000000,
["Australia/Sydney"] = 39600000000000,
["Europe/Amsterdam"] = 7200000000000,
["Europe/Andorra"] = 7200000000000,
["Europe/Athens"] = 10800000000000,
["Europe/Belgrade"] = 7200000000000,
["Europe/Berlin"] = 7200000000000,
["Europe/Bratislava"] = 7200000000000,
["Europe/Brussels"] = 7200000000000,
["Europe/Bucharest"] = 10800000000000,
["Europe/Budapest"] = 7200000000000,
["Europe/Busingen"] = 7200000000000,
["Europe/Chisinau"] = 10800000000000,
["Europe/Copenhagen"] = 7200000000000,
["Europe/Dublin"] = 3600000000000,
["Europe/Gibraltar"] = 7200000000000,
["Europe/Guernsey"] = 3600000000000,
["Europe/Helsinki"] = 10800000000000,
["Europe/Isle_of_Man"] = 3600000000000,
["Europe/Istanbul"] = 10800000000000,
["Europe/Jersey"] = 3600000000000,
["Europe/Kaliningrad"] = 10800000000000,
["Europe/Kiev"] = 10800000000000,
["Europe/Lisbon"] = 3600000000000,
["Europe/Ljubljana"] = 7200000000000,
["Europe/London"] = 3600000000000,
["Europe/Luxembourg"] = 7200000000000,
["Europe/Madrid"] = 7200000000000,
["Europe/Malta"] = 7200000000000,
["Europe/Mariehamn"] = 10800000000000,
["Europe/Minsk"] = 10800000000000,
["Europe/Monaco"] = 7200000000000,
["Europe/Moscow"] = 14400000000000,
["Europe/Oslo"] = 7200000000000,
["Europe/Paris"] = 7200000000000,
["Europe/Podgorica"] = 7200000000000,
["Europe/Prague"] = 7200000000000,
["Europe/Riga"] = 10800000000000,
["Europe/Rome"] = 7200000000000,
["Europe/Samara"] = 14400000000000,
["Europe/San_Marino"] = 7200000000000,
["Europe/Sarajevo"] = 7200000000000,
["Europe/Simferopol"] = 10800000000000,
["Europe/Skopje"] = 7200000000000,
["Europe/Sofia"] = 10800000000000,
["Europe/Stockholm"] = 7200000000000,
["Europe/Tallinn"] = 10800000000000,
["Europe/Tirane"] = 7200000000000,
["Europe/Uzhgorod"] = 10800000000000,
["Europe/Vaduz"] = 7200000000000,
["Europe/Vatican"] = 7200000000000,
["Europe/Vienna"] = 7200000000000,
["Europe/Vilnius"] = 10800000000000,
["Europe/Volgograd"] = 14400000000000,
["Europe/Warsaw"] = 7200000000000,
["Europe/Zagreb"] = 7200000000000,
["Europe/Zaporozhye"] = 10800000000000,
["Europe/Zurich"] = 7200000000000,
["Indian/Antananarivo"] = 10800000000000,
["Indian/Chagos"] = 21600000000000,
["Indian/Christmas"] = 25200000000000,
["Indian/Cocos"] = 23400000000000,
["Indian/Comoro"] = 10800000000000,
["Indian/Kerguelen"] = 18000000000000,
["Indian/Mahe"] = 14400000000000,
["Indian/Maldives"] = 18000000000000,
["Indian/Mauritius"] = 14400000000000,
["Indian/Mayotte"] = 10800000000000,
["Indian/Reunion"] = 14400000000000,
["Pacific/Apia"] = 50400000000000,
["Pacific/Auckland"] = 46800000000000,
["Pacific/Chatham"] = 49500000000000,
["Pacific/Chuuk"] = 36000000000000,
["Pacific/Easter"] = -18000000000000,
["Pacific/Efate"] = 39600000000000,
["Pacific/Enderbury"] = 46800000000000,
["Pacific/Fakaofo"] = 46800000000000,
["Pacific/Fiji"] = 43200000000000,
["Pacific/Funafuti"] = 43200000000000,
["Pacific/Galapagos"] = -21600000000000,
["Pacific/Gambier"] = -32400000000000,
["Pacific/Guadalcanal"] = 39600000000000,
["Pacific/Guam"] = 36000000000000,
["Pacific/Honolulu"] = -36000000000000,
["Pacific/Johnston"] = -36000000000000,
["Pacific/Kiritimati"] = 50400000000000,
["Pacific/Kosrae"] = 39600000000000,
["Pacific/Kwajalein"] = 43200000000000,
["Pacific/Majuro"] = 43200000000000,
["Pacific/Marquesas"] = -34200000000000,
["Pacific/Midway"] = -39600000000000,
["Pacific/Nauru"] = 43200000000000,
["Pacific/Niue"] = -39600000000000,
["Pacific/Norfolk"] = 41400000000000,
["Pacific/Noumea"] = 39600000000000,
["Pacific/Pago_Pago"] = -39600000000000,
["Pacific/Palau"] = 32400000000000,
["Pacific/Pitcairn"] = -28800000000000,
["Pacific/Pohnpei"] = 39600000000000,
["Pacific/Port_Moresby"] = 36000000000000,
["Pacific/Rarotonga"] = -36000000000000,
["Pacific/Saipan"] = 36000000000000,
["Pacific/Tahiti"] = -36000000000000,
["Pacific/Tarawa"] = 43200000000000,
["Pacific/Tongatapu"] = 46800000000000,
["Pacific/Wake"] = 43200000000000,
["Pacific/Wallis"] = 43200000000000,
["UTC"] = 0,
}
local grammar = dt.build_strftime_grammar("%Y-%m-%d %H:%M:%S")
local severity_map = {
DEBUG = 7,
INFO = 6,
NOTICE = 5,
WARNING = 4,
ERROR = 3,
CRITICAL = 2,
ALERT = 1,
EMERGENCY = 0
}
local msg = {
Fields = {
Context = nil,
Extra = nil,
LogUuid = nil,
Facet = msg_facet,
Server = msg_server
},
Hostname = msg_hostname,
Payload = nil,
Timestamp = nil,
Type = msg_type
}
function process_message()
local payload = read_message("Payload");
local ok, json = pcall(cjson.decode, payload)
if not ok then return -1 end
msg.Severity = severity_map[json.level_name]
msg.Logger = json.channel
msg.Payload = json.message
msg.Fields.SeverityText = json.level_name
msg.Fields.Context = cjson.encode(json.context)
if json.extra.uuid then
msg.Fields.LogUuid = json.extra.uuid
json.extra.uuid = nil
end
msg.Fields.Extra = cjson.encode(json.extra)
local d = grammar:match(json.datetime.date)
if d then
local timestamp = dt.time_to_ns(d)
if tzlist[json.datetime.timezone] then
timestamp = timestamp - tzlist[json.datetime.timezone]
end
msg.Timestamp = timestamp
else
error('unable to decode datetime')
end
local ok = pcall(inject_message, msg)
if not ok then return -1 end
return 0
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment