2025-03-18 18:46:09 +11:00
--[[
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 >
2025-03-29 21:44:03 +11:00
Copyright © 2025 Linden < https : // github.com / thelindat >
2025-03-18 18:46:09 +11:00
] ]
2023-09-21 23:39:00 -07:00
---@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] ' ,
}
2025-03-13 14:17:36 +07:00
local convarGlobal = ' ox:printlevel '
local convarResource = ' ox:printlevel: ' .. cache.resource
local function getPrintLevelFromConvar ( )
return printLevel [ GetConvar ( convarResource , GetConvar ( convarGlobal , ' info ' ) ) ]
end
local resourcePrintLevel = getPrintLevelFromConvar ( )
2023-09-21 23:39:00 -07:00
local template = ( ' ^5[%s] %%s %%s^7 ' ) : format ( cache.resource )
2024-06-26 02:17:25 -04:00
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 }
2023-09-21 23:39:00 -07:00
---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 ,
}
2025-03-13 14:17:36 +07:00
-- 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
2023-09-21 23:39:00 -07:00
return lib.print