Ajuda para resolver uma lambança que fiz

Pessoal,

Vou explicar mais ou menos a minha situação e depois passo o problema:

Cenário:
Tenho uma aplicação web e essa aplicação gera log das ações realizadas pelos usuários, esses logs são armazenados em BD para possíveis consultas futuras (auditoria). Eu poderia utilizar um log4j ou algo parecido para gerenciar isso mas não uso, é uma framework antiga e proprietária, então temos certo receio de ficar incrementando muito.

Esse log é gerado a cada transação do usuário, porém no DB tem passado por problemas de “saúde” e em determinados momentos torna-se muito lento, consequentemente influencia no tempo de resposta do site. Para resolver esse problema, eu implementei um coletador de logs (um array de to’s que guardam as informações de log) e uma thread que roda sobre esse coletador para ir gravando no banco. Dessa forma eu desonero a transação em si, lógico que em situações de performance crítica do DB o site é influênciado, mas no geral o resultado foi bom.

Problema:
Eu gravo o id da sessão do usuário no log e, por causa disso, a session é um dos atributos do meu TO. O problema é que por ser um processo assíncrono, quando o coletador de log vai usar o TO o usuário já pode ter realizado logof do site e invalidado minha session, aí na hora de tentar recuperar o id da sessão dá pau.

Alternativas em que pensei:
1 - Passar o id da sessão diretamente no TO ao invés da session. O problema é que toda implementação do log usa o objeto session, para mudar isso vai dar um trabalho danado.

2 - Criar uma outra classe que extenda de HttpSession, fazer essa classe receber a session e setar o meu TO com ela. Porém não sei como será o comportamento desse objeto ao invalidar a session, ele também será invalidado? Além disso estarei multiplicando os objetos sessao do site. É, realmente essa segunda opção não é boa, alguém tem dicas a passar?