I don't think we capture it natively, but with a little auditing and the alert log you could get some information, eg
--
-- First I ran this, which is good to have on *any* database to known when anyone logs on or off
--
SQL> audit session;
Audit succeeded.
--
-- then here's the demo
--
SQL> create profile demo_timeout limit idle_time 5;
Profile created.
SQL> alter user demo profile demo_timeout;
User altered.
SQL> conn demo/demo@db19_pdb1
Connected.
SQL> select * from dual;
D
-
X
SQL> select * from dual;
select * from dual
*
ERROR at line 1:
ORA-02396: exceeded maximum idle time, please connect again
In the alert log we have this when the session is killed (this may vary by platform and version)
(3):KILL SESSION for sid=(369, 52122):
(3): Reason = profile limit idle_time
(3): Mode = KILL SOFT -/-/NO_REPLAY
(3): Requestor = PMON (orapid = 2, ospid = 2400, inst = 1)
(3): Owner = Process: USER (orapid = 27, ospid = 17916)
(3): Result = ORA-0
So I can use that information to track back into the audit trail
SQL> select username, userhost, os_process
2 from dba_audit_trail
3 where timestamp > sysdate - 1
4 and os_process like '%17916%';
USERNAME USERHOST OS_PROCESS
-------------------- ------------------------------ --------------
DEMO WORKGROUP\GTX 5920:17916