{"id":19442225,"url":"https://github.com/commandcracker/cc-logging","last_synced_at":"2025-04-25T00:31:37.332Z","repository":{"id":37424204,"uuid":"504667386","full_name":"Commandcracker/CC-Logging","owner":"Commandcracker","description":"An logging library for Computer Craft","archived":false,"fork":false,"pushed_at":"2022-07-02T09:55:16.000Z","size":229,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-07-30T17:50:53.135Z","etag":null,"topics":["computercraft","lua","minecraft"],"latest_commit_sha":null,"homepage":"https://commandcracker.github.io/CC-Logging/","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Commandcracker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-17T20:44:35.000Z","updated_at":"2024-07-21T17:52:35.000Z","dependencies_parsed_at":"2022-07-09T08:16:48.017Z","dependency_job_id":null,"html_url":"https://github.com/Commandcracker/CC-Logging","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commandcracker%2FCC-Logging","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commandcracker%2FCC-Logging/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commandcracker%2FCC-Logging/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Commandcracker%2FCC-Logging/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Commandcracker","download_url":"https://codeload.github.com/Commandcracker/CC-Logging/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223974520,"owners_count":17234666,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computercraft","lua","minecraft"],"created_at":"2024-11-10T15:38:43.497Z","updated_at":"2024-11-10T15:38:44.126Z","avatar_url":"https://github.com/Commandcracker.png","language":"Lua","readme":"# CC-Logging\n\n[![GitHub Pages](https://github.com/Commandcracker/CC-Logging/actions/workflows/pages.yml/badge.svg)](https://github.com/Commandcracker/CC-Logging/actions/workflows/pages.yml)\n\nAn logging library for Computer Craft\n\n**WARNING: Please Do not use CC-Logging in production, because it's currently in development!**\n\n- **All Handler's will be reworked.**\n- **Some classes will be renamed.**\n- **Log levels will completely be overhauled.**\n\n## Example\n\nlook at the [Documentation](https://commandcracker.github.io/CC-Logging/) for moor help and please remind that the documentation is incomplete.\n\n```lua\nlocal logging = require(\"logging\")\nlocal logger  = logging.Logger.new(shell.getRunningProgram())\n\nlogger:debug(\"debug message\")\nlogger:info(\"info message\")\nlogger:warn(\"warn message\")\nlogger:error(\"error message\")\nlogger:critical(\"critical message\")\n```\n\n## Custom Handler\n\n```lua\nlocal logging = require(\"logging\")\nlocal logger  = logging.Logger.new(shell.getRunningProgram())\n\nlocal CustomHandler = {}\n\nfunction CustomHandler.new(formatter)\n    return setmetatable({ formatter = formatter }, { __index = CustomHandler })\nend\n\nfunction CustomHandler:handle(record)\n    local old_text_color       = term.getTextColor()\n    local old_background_color = term.getBackgroundColor()\n\n    term.setTextColor(record.level.textcolor)\n    term.setBackgroundColor(record.level.backgroundcolor)\n\n    -- example functionality: reverse every message\n    record.message = string.reverse(record.message)\n    write(self.formatter:format(record))\n\n    term.setTextColor(old_text_color)\n    term.setBackgroundColor(old_background_color)\n\n    write(\"\\n\")\nend\n\nlogger:addHandler(CustomHandler.new(logger.formatter))\n\nlogger:info(\"Message Handeld by Custom Handler\")\n```\n\n## Websocket Example\n\n### Server\n\n![ws_server](images/ws_server.png)\n\n```js\nconst WebSocket = require('ws');\nconst server    = new WebSocket.Server({\n    port: 8080\n});\n\nlet sockets = [];\n\nserver.on('connection', function (socket) {\n    sockets.push(socket);\n\n    // When you receive a message, log it\n    socket.on('message', function (msg) {\n        console.log(msg.toString());\n    });\n\n    // When a socket closes, or disconnects, remove it from the array.\n    socket.on('close', function () {\n        sockets = sockets.filter(s =\u003e s !== socket);\n    });\n});\n```\n\n### Client\n\n![ws_client](images/ws_client.png)\n\n```lua\nlocal logging          = require(\"logging\")\nlocal logger           = logging.Logger.new(shell.getRunningProgram())\nlocal websocket        = http.websocket(\"ws://127.0.0.1:8080\")\nlocal websocketHandler = logging.ColordWebsocketHandler.new(logger.formatter, websocket)\nlogger:addHandler(websocketHandler)\n\n-- Default log Levels\n\nlogger:debug(\"logging.debug\")\nlogger:info(\"logging.info\")\nlogger:warn(\"logging.warn\")\nlogger:error(\"logging.error\")\nlogger:critical(\"logging.critical\")\n\nlocal function blankLine()\n    websocket.send(\" \")\n    print()\nend\n\n-- Custom Level\n\nblankLine()\n\nlocal level = logging.Level.new {\n    name            = \"CUSTOM\",\n    textcolor       = colors.black,\n    backgroundcolor = colors.white\n}\nlogger:log(level, \"custom level\")\n\n-- Custom Formatter\n\nblankLine()\n\nlocal formatter = logging.Formatter.new(\n    \"[%(time) %(name) %(levelname)] %(message)\",\n    \"%Y-%m-%d %H:%M:%S\"\n)\n\nlocal custom_logger = logging.Logger.new {\n    name      = shell.getRunningProgram(),\n    formatter = formatter\n}\n\nlocal custom_websocketHandler = logging.ColordWebsocketHandler.new(formatter, websocket)\ncustom_logger:addHandler(custom_websocketHandler)\n\ncustom_logger:info(\"custom formatter\")\n\n-- All Colors as log Levels\n\nblankLine()\n\nfor key, value in pairs(colors) do\n    if type(value) == \"number\" then\n        logger:log(\n            logging.Level.new(\n                key:gsub(\"^%l\", key.upper),\n                20,\n                value,\n                value == colors.black and colors.white or colors.black\n            ),\n            key,\n            value\n        )\n    end\nend\n\nwebsocket.close()\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommandcracker%2Fcc-logging","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommandcracker%2Fcc-logging","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommandcracker%2Fcc-logging/lists"}