mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Add logging for manually changing your targeted zone (#72814)
## About The Pull Request See title. Surgery hud is exempt from this. ## Why It's Good For The Game Requested by @Mothblocks ## Changelog Signed-off-by: GitHub <noreply@github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>
This commit is contained in:
co-authored by
Mothblocks
dragomagol
parent
ac4bec4e38
commit
18b041bf47
@@ -0,0 +1,3 @@
|
||||
/datum/log_category/target_zone_switch
|
||||
category = LOG_CATEGORY_TARGET_ZONE_SWITCH
|
||||
config_flag = /datum/config_entry/flag/log_zone_switch
|
||||
@@ -0,0 +1,32 @@
|
||||
/// The main datum that contains all log entries for a category
|
||||
/datum/log_category
|
||||
/// The category this datum contains
|
||||
var/category
|
||||
/// If set this config flag is checked to enable this log category
|
||||
var/config_flag
|
||||
/// List of all entries, in chronological order of when they were added
|
||||
var/list/entries = list()
|
||||
|
||||
/// Backup log category to catch attempts to log to a category that doesn't exist
|
||||
/datum/log_category/backup_category_not_found
|
||||
category = LOG_CATEGORY_NOT_FOUND
|
||||
|
||||
/// Add an entry to this category. It is very important that any data you provide doesn't hold references to anything!
|
||||
/datum/log_category/proc/add_entry(message, list/data)
|
||||
var/list/entry = list(
|
||||
LOG_ENTRY_MESSAGE = message,
|
||||
LOG_ENTRY_TIMESTAMP = big_number_to_text(rustg_unix_timestamp()),
|
||||
)
|
||||
if(data)
|
||||
entry[LOG_ENTRY_DATA] = data
|
||||
|
||||
entries += list(entry)
|
||||
write_entry(entry)
|
||||
|
||||
/// Allows for category specific file splitting. Needs to accept a null entry for the default file.
|
||||
/datum/log_category/proc/get_output_file(list/entry)
|
||||
return "[GLOB.log_directory]/[category].json"
|
||||
|
||||
/// Writes an entry to the output file for the category
|
||||
/datum/log_category/proc/write_entry(list/entry)
|
||||
rustg_file_append("[json_encode(entry)]\n", get_output_file(entry))
|
||||
@@ -0,0 +1,70 @@
|
||||
GLOBAL_DATUM_INIT(logger, /datum/log_holder, new)
|
||||
GLOBAL_PROTECT(logger)
|
||||
|
||||
/**
|
||||
* Main datum to manage logging actions
|
||||
*/
|
||||
/datum/log_holder
|
||||
/// Round ID, if set, that logging is initialized for
|
||||
var/round_id
|
||||
/// When the log_holder first initialized
|
||||
var/logging_start_timestamp
|
||||
|
||||
/// Associative: category -> datum
|
||||
var/list/datum/log_category/log_categories
|
||||
/// typecache list for categories that exist but are disabled
|
||||
var/list/disabled_categories
|
||||
|
||||
var/initialized = FALSE
|
||||
var/shutdown = FALSE
|
||||
|
||||
/// Assembles basic information for logging, creating the log category datums and checking for config flags as required
|
||||
/datum/log_holder/proc/init_logging()
|
||||
if(initialized)
|
||||
CRASH("Attempted to call init_logging twice!")
|
||||
initialized = TRUE
|
||||
|
||||
round_id = GLOB.round_id
|
||||
logging_start_timestamp = rustg_unix_timestamp()
|
||||
log_categories = list()
|
||||
disabled_categories = list()
|
||||
for(var/datum/log_category/category_type as anything in subtypesof(/datum/log_category))
|
||||
var/category = initial(category_type.category)
|
||||
if(!category)
|
||||
continue
|
||||
|
||||
if(category in log_categories)
|
||||
stack_trace("Found two identical log category type definitions! [category_type]")
|
||||
continue
|
||||
|
||||
var/config_flag = initial(category_type.config_flag)
|
||||
if(config_flag && !config.Get(config_flag))
|
||||
disabled_categories[category] = TRUE
|
||||
continue
|
||||
category_type = log_categories[category] = new category_type
|
||||
var/list/log_start_entry = list(
|
||||
LOG_HEADER_CATEGORY = category,
|
||||
LOG_HEADER_INIT_TIMESTAMP = big_number_to_text(logging_start_timestamp),
|
||||
LOG_HEADER_ROUND_ID = big_number_to_text(GLOB.round_id),
|
||||
)
|
||||
rustg_file_write("[json_encode(log_start_entry)]\n", category_type.get_output_file(null))
|
||||
|
||||
/// Tells the log_holder to not allow any more logging to be done, and dumps all categories to their json file
|
||||
/datum/log_holder/proc/shutdown_logging()
|
||||
if(shutdown)
|
||||
CRASH("Attempted to call shutdown_logging twice!")
|
||||
shutdown = TRUE
|
||||
|
||||
/// This is Log because log is a byond internal proc
|
||||
/datum/log_holder/proc/Log(category, message, list/data)
|
||||
if(!initialized || shutdown)
|
||||
CRASH("Attempted to perform logging before initializion or after shutdown!")
|
||||
|
||||
if(disabled_categories[category])
|
||||
return
|
||||
|
||||
var/datum/log_category/log_category = log_categories[category]
|
||||
if(!log_category)
|
||||
Log(LOG_CATEGORY_NOT_FOUND, message, data)
|
||||
CRASH("Attempted to log to a category that doesn't exist! [category]")
|
||||
log_category.add_entry(message, data)
|
||||
Reference in New Issue
Block a user