rajb
rajb

Reputation: 111

How to stop application logs from logging into catalina.out in Tomcat

The application is running in tomcat and has it own logger using org.apache.commons.logging.Log and org.apache.commons.logging.LogFactory. The logs are getting logged at location specified in log4j.properties file, the location is as follows.

log4j.appender.logger.File=${catalina.base}/logs/applicationlogs.log

The logs are simultaneously added in following file.

/opt/apache-tomcat-8.0.26/logs/catalina.out

How to stop the application logs from getting logged in catalina.out ?

Upvotes: 10

Views: 34584

Answers (7)

Du-Lacoste
Du-Lacoste

Reputation: 12757

You can try following to disable writing to catalina.out :

  1. Locate and Edit File: {CATALINA_BASE}/bin/catalina.sh

Locate "CATALINA_OUT" and replace the path with "/dev/null":

/dev/null in Linux is a null device file. This will discard anything written to it.

 CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out // Original Location
 CATALINA_OUT=/dev/null // replace path to /dev/null

Upvotes: 1

svarog
svarog

Reputation: 9839

Just changing

CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out

To

CATALINA_OUT= /dev/null

In catalina.sh is not enough because the CATALINA_OUT variable will be used later in the script and that will cause an error to be thrown (aborting the startup).

What I've done instead was, I went to the command lines themselves and edited them so that the output itself will be redirected to /dev/null

(In Tomcat 9 it's in the if block in line ~447)

$_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
  -classpath "\"$CLASSPATH\"" \
  -Djava.security.manager \
  -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
  -Dcatalina.base="\"$CATALINA_BASE\"" \
  -Dcatalina.home="\"$CATALINA_HOME\"" \
  -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  org.apache.catalina.startup.Bootstrap "$@" start \
  >> "$CATALINA_OUT" 2>&1 "&"

I've set the stdout stream to /dev/null

$_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
  -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
  -classpath "\"$CLASSPATH\"" \
  -Djava.security.manager \
  -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
  -Dcatalina.base="\"$CATALINA_BASE\"" \
  -Dcatalina.home="\"$CATALINA_HOME\"" \
  -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
  org.apache.catalina.startup.Bootstrap "$@" start \
  >> /dev/null 2>&1 "&"

enter image description here

Upvotes: 0

PST
PST

Reputation: 81

I believe the recommended way to "augment" catalina.sh (catalina.bat on Windows) is to:

  1. Create or update a script in ${CATALINA_BASE}/bin called setenv.sh (setenv.bat)
  2. Add a line to set: CATALINA_OUT=/dev/null as noted above.
  3. This script will be executed before executing catalina.sh/bat which will use any vars set. This is also the correct way to add to the CLASSPATH, add JAVA_OPTS, etc. without messing with catalina.sh/bat directly, which may be updated (overriden) with each tomcat upgrade.

Upvotes: 8

jprism
jprism

Reputation: 3444

  1. Find CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out in catalina.sh $CATALINA_BASE/bin
  2. Set CATALINA_OUT=/dev/null
  3. Restart Tomcat

You will see log file created as per your log configuration.

Upvotes: 3

m.aibin
m.aibin

Reputation: 3593

You can try to do this:

  1. Edit "$CATALINA_BASE"/bin/catalina.sh file
  2. Find CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
  3. Replace with new path.

Don't forget to restart tomcat.

And as suggested in comments, to block writing to catalina.out entirely, set CATALINA_OUT=/dev/null in catalina.sh.

Upvotes: 19

VivekJ
VivekJ

Reputation: 49

If your application is using a console appender, then those logs will go to catalina.out. You might want to check that in your application. To disable logging to catalina.out, you can check discussion: here

Upvotes: 4

Nikunj
Nikunj

Reputation: 165

I'm using tomcat 7.0.50 and I've done following configuration. To stop the application to log into catalina.out, you can do it by removing the handler. This can be achieved by editting conf/logging.properties and changing:

.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

to

.handlers = 1catalina.org.apache.juli.FileHandler

Hope this helps. Let me know if I'm missing something.

Upvotes: 4

Related Questions