A computer-implemented method, comprising: receiving, with at least one processor, multi-threaded log data comprising a plurality of logs, a plurality of markers, and a plurality of thread identifiers, each respective log of the plurality of logs associated with a respective marker of the plurality of markers and a respective thread identifier of the plurality of thread identifiers, each respective marker indicating that the respective log is in a respective category of a plurality of categories, each respective thread identifier indicating that the respective log is associated with a respective thread of a plurality of threads; for each respective log of the plurality of logs: setting, with the at least one processor, the respective thread identifier of the respective log as a most recently used item in a thread reference cache; determining, with the at least one processor, a respective log cache of a plurality of log caches (110-1, 110-2,..., 110-n) in a map data structure based on the respective thread identifier for the respective log; adding, with the at least one processor, the respective log to the respective log cache in the map data structure; determining, with the at least one processor, whether to communicate at least one of the respective log or the respective log cache to a first repository based on the respective marker for the respective log; communicating, with the at least one processor, the respective log to a second repository; determining, with the at least one processor, whether to remove an oldest log from the respective log cache based on at least one of a log cache size limit or a time limit; and determining, with the at least one processor, whether to remove a least recently used log cache from the map data structure based on at least one map data structure size limit, wherein the least recently used log cache is associated with a least recently used item in the thread reference cache. receiving, with at least one processor, multi-threaded log data comprising a plurality of logs, a plurality of markers, and a plurality of thread identifiers, each respective log of the plurality of logs associated with a respective marker of the plurality of markers and a respective thread identifier of the plurality of thread identifiers, each respective marker indicating that the respective log is in a respective category of a plurality of categories, each respective thread identifier indicating that the respective log is associated with a respective thread of a plurality of threads; for each respective log of the plurality of logs: setting, with the at least one processor, the respective thread identifier of the respective log as a most recently used item in a thread reference cache; determining, with the at least one processor, a respective log cache of a plurality of log caches (110-1, 110-2,..., 110-n) in a map data structure based on the respective thread identifier for the respective log; adding, with the at least one processor, the respective log to the respective log cache in the map data structure; determining, with the at least one processor, whether to communicate at least one of the respective log or the respective log cache to a first repository based on the respective marker for the respective log; communicating, with the at least one processor, the respective log to a second repository; determining, with the at least one processor, whether to remove an oldest log from the respective log cache based on at least one of a log cache size limit or a time limit; and determining, with the at least one processor, whether to remove a least recently used log cache from the map data structure based on at least one map data structure size limit, wherein the least recently used log cache is associated with a least recently used item in the thread reference cache. setting, with the at least one processor, the respective thread identifier of the respective log as a most recently used item in a thread reference cache; determining, with the at least one processor, a respective log cache of a plurality of log caches (110-1, 110-2,..., 110-n) in a map data structure based on the respective thread identifier for the respective log; adding, with the at least one processor, the respective log to the respective log cache in the map data structure; determining, with the at least one processor, whether to communicate at least one of the respective log or the respective log cache to a first repository based on the respective marker for the respective log; communicating, with the at least one processor, the respective log to a second repository; determining, with the at least one processor, whether to remove an oldest log from the respective log cache based on at least one of a log cache size limit or a time limit; and determining, with the at least one processor, whether to remove a least recently used log cache from the map data structure based on at least one map data structure size limit, wherein the least recently used log cache is associated with a least recently used item in the thread reference cache.