log4j File appender not working with eclipse - java

I have a webservice program which has multiple classes talking to each other.
After running the program using tomcat in eclipse, I copy the wsdl url in soap UI to test it out and if there's any exception then it has to be in printed in a log file as I am file appender logic from log4j. Spent almost three days with no luck
Here is log4j.properties file:
# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE, theConsoleAppender
log4j.category.com.wataniya.Wataniya_WebServiceSkeleton=DEBUG, FILE
### direct log messages to stdout ###
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
# Set the name of the file
log4j.appender.FILE.File=log.txt
# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true
# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug
# Set the append to false, overwrite
log4j.appender.FILE.Append=true
# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern= %d{dd MMM yyyy HH:mm:ss,SSS} %c %p %t %m%n%n

Imported the required jar files in to build path in eclipse. More info can be found at this link in importing the jar files and configuring the properties file: Link

Related

log4j FileAppender not writing in Linux

In a standalone application I'm using log4j for logging and have configured it with the following properties file:
# Root logger option
log4j.rootLogger=WARN, file, stdout
log4j.logger.com.tr = INFO
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=log4j.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
In Windows this works as expected, producing a log4j.log file in the current working directory. When I run the application in Linux, it reports no error but does not generate the log file. The logger outputs to console just fine.
I tried programatically changing the File property from a relative path to an absolute path and that changed nothing.
I've also verified that if I supply an invalid file name the tool reports an error saying the file cannot be generated. So I'm baffled as to why no error is being reported and no file is being generated.
I've searched my hard disk for the file to verify it's not being generated elsewhere, and it's not.
Any help here would be much appreciated.

log file generated by log4j is more than max file size

log file generated by log4j is more than max file size.log4j configurted in property file.here is the contents of property file.
# Set root logger level to DEBUG and its only appender to R.
log4j.rootCategory=DEBUG, LOGFILE
log4j.logger.org.apache.jasper.servlet.JspServlet=INFO
log4j.logger.org.springframework.web.servlet.view.JstlView=INFO
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.File= ./logs/app.log
# Control the maximum log file size
log4j.appender.LOGFILE.MaxFileSize=1024KB
# Archive log files (one backup file here)
log4j.appender.LOGFILE.MaxBackupIndex=1000
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d %-5p [%c] %m%n
what could be the reason for this?

Output Log4J to file not working

I have read several times through the Log4J documentation and I am currently testing an example given by mkyong, but no matter what I do, Log4J keeps placing the output on my console.
This is the current file:
# DRAGONS AHEAD
# Root logger option
log4j.rootLogger=debug, file
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/home/pedro/Desktop/log4j.txt
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# END
# Print the date in ISO 8601 format
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=application.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
I keep thinking that I am doing something wrong, but I just cannot see what it can be. Can someone help me find what I am doing wrong?
Are you very sure that this property file is loaded in run time. You can loop through the loggers/appenders in runtime to see whether this configuration is loaded or not.
The only suggestion i have is to check the way you initialize log4j. Are you using BasicConfigurator.configure(); ?? Then your property settings wont get loaded.

Behaviour of log4j in case of multiple log4j.properties

First off, I apologize if this question has already been asked. I searched but couldn't find anything specific to my problem.
Here's the scenario -
I'm deploying an application, say, MyFirstWebApp in Tomcat 6.0.35.
Tomcat has a log4j.properties in it's common loader path which looks like -
log4j.rootLogger=INFO, LOGFILE
log4j.logger.com.test.java=DEBUG, TEST
log4j.additivity.com.test.java=false
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n
# LOGFILE is set to be a File appender using a PatternLayout
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.File=/home/myuserid/tomcat.log
log4j.appender.LOGFILE.MaxFileSize=25MB
log4j.appender.LOGFILE.MaxBackupIndex=5
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d %p %t %c - %m%n
# LOGFILE is set to be a File appender using a PatternLayout
log4j.appender.TEST=org.apache.log4j.FileAppender
log4j.appender.TEST.File=/home/myuserid/test.log
log4j.appender.TEST.layout=org.apache.log4j.PatternLayout
log4j.appender.TEST.layout.ConversionPattern=%d %p %t %c - %m%n
Tomcat also has a log4j.jar file in it's lib/ directory.
Now, MyFirstWebApp has a log4j.properties inside it's WEB-INF/classes directory. MyFirstWebApp also has a log4j.jar in it's WEB-INF/lib directory.
MyFirstWebApp log4j.properties looks like this -
log4j.rootCategory=INFO,LOGFILE
# Set the enterprise logger priority to FATAL
log4j.logger.com.test=INFO
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.MaxFileSize=10MB
log4j.appender.LOGFILE.MaxBackupIndex=99
log4j.appender.LOGFILE.File=/home/myuserid/mywebapp.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
When I start the server and deploy this application, I expected to find 3 log files - tomcat.log, test.log and mywebapp.log (which I did).
I also expected to find all logging from "com.test.java" package inside "test.log" but they were found in "mywebapp.log"
What am I doing wrong here? How can I log messages from "com.test.java" without modifying MyFirstWebApp?
The log4j.properties file is loaded by the classloader. All the classes in your webapp use the webapp's classloader, and thus only see the log4j.properties file that is under WEB-INF/classes. And thus, the logs from com.test.java that are generated by classes of your webapp use the configuration found in WEB-INF/classes/log4j.properties. So they're written to mywebapp.log.
If you want the logs from com.test.java to go to test.log, you'll have to either modify the webapp's log4j.properties (right solution), or to put those classes out of the webapp, directly in tomcat's classpath (but don't do this).

log4j API to log errors

I am running REST web service on Tomacat 6.0.32. I am using log4j API to log errors or anything else.
Basically you only need to include this line of code
static Logger logger = Logger.getLogger(TestLogging.class.getName());
logger.debug("String blah blah");
I run main method to test if it is working. So, the program writes log info into text file and on the console of NetBeans.
But if you deploy the project and then run it on the browser those logs do not appear no where; neither on console nor text file nor on Tomcat's logs.
The following is properties file:
# Set root category priority to DEBUG and set its only appender to A1
log4j.rootCategory=DEBUG, A1, file
log4j.additivity.logger=false
# A1 is set to be a ConsoleAppender (writes to system console).
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%p [%t] %F %L %x - %m%n
#### Second appender writes to a file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=eMart_logger.log
# Control the maximum log file size
log4j.appender.file.MaxFileSize=1MB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%p %d %t %F %L - %m%n
What is the problem?
Cheers
Use a FileAppender to get it to log to a file when you are running on a server.
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html

Categories

Resources