Oracle introduced the Automatic Diagnostic Repository (ADR) with Oracle 11g Release 1. This introduced some type of streamlining of various log and trace files generated by different Oracle components such as the database, listener, ASM, etc. this is why you didn't find the alert log in the usual location specified by the familiar
background_dump_destinitialization parameter but in a directory specified by a diferent parameter -
ADR_BASE. Similarly listener logs now go in this format:
$ADR_BASE/tnslsnr/Remember, this is in the XML format; not the usual listener.log. The idea was to present the information in the listener log in a consistent, machine readable format instead of the usually cryptic inconsistent older listener log format. Here is an example of the new format:
<msg time='2013-03-31T13:17:22.633-04:00' org_id='oracle' comp_id='tnslsnr' type='UNKNOWN' level='16' host_id='oradba2' host_addr='127.0.0.1' version='1' > <txt>31-MAR-2013 13:17:22 * service_update * D112D2 * 0</txt> </msg> <msg> time='2013-03-31T13:17:25.317-04:00' org_id='oracle' comp_id='tnslsnr' type='UNKNOWN' level='16' host_id='oradba2' host_addr='127.0.0.1' > <txt>WARNING: Subscription for node down event still pending </txt> </msg>Being in XML format, many tools now can be made to read the files unambiguously since the data is now enclosed within meaningful tags. Additionally the listener log files (the XML format) is now rotated. After reaching a certain threshold value the file is renamed to log_1.xml and a new log.xml is created - somewhat akin to the archived log concept in the case of redo log files.
While it proved useful for new tools, there was also the presence of myriads of tools that read the older log format perfectly. So Oracle didn't stop the practice of writing to the old format log. The old format log was still called
listener.logbut the directory it is created in is different -
$ADR_BASE/tnslsnr/Hostname/listener/trace. Unfortunately there is no archiving scheme for this file so this simply kept growing.
In the pre-11g days you could temporarily redirect the log to a different location and archive the old one by setting the following parameter in listener.ora:
log_directory = tempLocationHowever, in Oracle 11g R1 and beyond, this will not work; you can't set the location of the log_directory.
SolutionSo, what's the solution? Simple. Just set the following parameter in listener.ora:
diag_adr_enabled_listener = offThis will disable the ADR style logging for the listener. Now, suppose you want to set the directory to /tmp and log file name to listener_0405.log, add the following into listener.ora (assuming the name of the listener is "listener"; otherwise make the necessary change below):
log_file_listener = listener_0405.log log_directory_listener = /tmpThat's it. the ADR style logging will be permanently be gone and you will be reunited with your highly missed pre-11g style logging. You can confirm it:
LSNRCTL> status Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) STATUS of the LISTENER ------------------------ Alias listener Version TNSLSNR for Linux: Version 184.108.40.206.0 - Production Start Date 26-NOV-2012 16:50:58 Uptime 129 days 15 hr. 33 min. 31 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /opt/oracle/product/11.2.0/grid/network/admin/listener.ora Listener Log File /tmp/listener_0405.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oradba2)(PORT=1521))) Services Summary... Service "+ASM" has 1 instance(s). ... output truncated ...Happy logging.
P.S. By the way, you can also change the values by issuing set commands from
LSNRCTL> set log_file '/tmp'However, if you have heeded my advice earlier, you might have set admin_restrictions to ON; so can't use the set command. Instead, you would put the value in listener.ora and reload the listener for the desired effect.