73 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
|     https://github.com/overextended/ox_lib
 | |
| 
 | |
|     This file is licensed under LGPL-3.0 or higher <https://www.gnu.org/licenses/lgpl-3.0.en.html>
 | |
| 
 | |
|     Copyright © 2025 Linden <https://github.com/thelindat>
 | |
| ]]
 | |
| 
 | |
| ---@enum PrintLevel
 | |
| local printLevel = {
 | |
|     error = 1,
 | |
|     warn = 2,
 | |
|     info = 3,
 | |
|     verbose = 4,
 | |
|     debug = 5,
 | |
| }
 | |
| 
 | |
| local levelPrefixes = {
 | |
|     '^1[ERROR]',
 | |
|     '^3[WARN]',
 | |
|     '^7[INFO]',
 | |
|     '^4[VERBOSE]',
 | |
|     '^6[DEBUG]',
 | |
| }
 | |
| local convarGlobal = 'ox:printlevel'
 | |
| local convarResource = 'ox:printlevel:' .. cache.resource
 | |
| local function getPrintLevelFromConvar()
 | |
|     return printLevel[GetConvar(convarResource, GetConvar(convarGlobal, 'info'))]
 | |
| end
 | |
| local resourcePrintLevel = getPrintLevelFromConvar()
 | |
| local template = ('^5[%s] %%s %%s^7'):format(cache.resource)
 | |
| local function handleException(reason, value)
 | |
|     if type(value) == 'function' then return tostring(value) end
 | |
|     return reason
 | |
| end
 | |
| local jsonOptions = { sort_keys = true, indent = true, exception = handleException }
 | |
| 
 | |
| ---Prints to console conditionally based on what ox:printlevel is.
 | |
| ---Any print with a level more severe will also print. If ox:printlevel is info, then warn and error prints will appear as well, but debug prints will not.
 | |
| ---@param level PrintLevel
 | |
| ---@param ... any
 | |
| local function libPrint(level, ...)
 | |
|     if level > resourcePrintLevel then return end
 | |
| 
 | |
|     local args = { ... }
 | |
| 
 | |
|     for i = 1, #args do
 | |
|         local arg = args[i]
 | |
|         args[i] = type(arg) == 'table' and json.encode(arg, jsonOptions) or tostring(arg)
 | |
|     end
 | |
| 
 | |
|     print(template:format(levelPrefixes[level], table.concat(args, '\t')))
 | |
| end
 | |
| 
 | |
| lib.print = {
 | |
|     error = function(...) libPrint(printLevel.error, ...) end,
 | |
|     warn = function(...) libPrint(printLevel.warn, ...) end,
 | |
|     info = function(...) libPrint(printLevel.info, ...) end,
 | |
|     verbose = function(...) libPrint(printLevel.verbose, ...) end,
 | |
|     debug = function(...) libPrint(printLevel.debug, ...) end,
 | |
| }
 | |
| 
 | |
| -- Update the print level when the convar changes
 | |
| if (AddConvarChangeListener) then
 | |
|     AddConvarChangeListener('ox:printlevel*', function(convarName, reserved)
 | |
|         if (convarName ~= convarResource and convarName ~= convarGlobal) then return end
 | |
|         resourcePrintLevel = getPrintLevelFromConvar()
 | |
|     end)
 | |
| else
 | |
|     libPrint(printLevel.verbose, 'Convar change listener not available, print level will not update dynamically.')
 | |
| end
 | |
| 
 | |
| return lib.print
 | 
