Access.log with Log4j2 on tomcat as JSON - java

I have tomcat 8 configured and running nicely with log4j2.
Also catalina spooling nice JSON log with JSONlayout.
But here is a thing.
Does anyone know how to switch to JSONlayout for Tomcat's access file or even address Tomcat accessfile with log4j2 and it's pattern?
Tomcat still spooling localhost_access_log in default format.

The Tomcat access log is defined as a valve in server.xml file, there you can set whatever pattern you like, even use another implementation of the valve for access logging.
Take a look to this for more details: https://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#Access_Log_Valve
Regards.

Related

Log4j2 configuration - indentify the webapp

In my webapp I configure Log4j2 with XML file.
The case is there's might be several versions of this webapp deployed on the server (for production purpose). If I don't edit log4j2 configuration, all webapps write logs to the same location.
So I need somehow identify versions of the app and add this identifier to the end of the folder name.
Apps always have different names, so maybe I can use it.
Can anyone please suggests some solution for this?
P. S. I know I could use ${log4j:configParentLocation} or something like this, but this gives me troubles when I deploy the app.
Edit: I don't use Spring boot, just usual Tomcat Servlet webapp with web.xml.

Logging.properties in WAR file ignored by Liberty server

I have a Maven java project, my logging.properties is placed under resources folder. I have configured to print FINE level messages using console logger.
The WAR file generated has the properties file under WEB-INF/classes but, the application when deployed and executed, I can see only INFO level logs.
Should i initialize any LogConfiguration apart from having my logging.properties in the correct path ?
As describe here, you configure loggers in Liberty by something like this in the server.xml:
<logging traceSpecification="*=audit:com.myco.mypackage.*=debug"/>
and see the logging metatype doc to configure other aspects like log file size, number of logs to keep, etc.
Or, as the article mentions, you can use the bootstrap.properties
entries to do the same, e.g. com.ibm.ws.logging.trace.specification.
Though WebSphere also supports java.util.logging APIs, its full infrastructure isn't necessarily configured the same way as say Tomcat, which your app may be patterned after.
If you want to configure different logging behavior for different applications you can have the application Java code use a different Logger name for each, and then configure them differently through the single server.xml config (or also potentially separate the apps out onto different servers).
Dynamically changing the trace settings on a running server can be done simply by editing the server.xml config (as can dynamically configuring almost any aspect of Liberty).

Jetty HTTP logging

I would like to have Jetty log all HTTP requests (along with the body) and responses. Is this natively supported by Jetty? Ideally it would log to my existing log4j log file.
I am running Jetty 6.
Jetty comes with a request logger that can log in NCSA format. That format doesn't include things like request body as you require, but that standard format will fit tools like webalizer and the like.
If you need to log more you can use the logback request log implementation or write your own logger by implementing Jetty's RequestLog interface.
Besides that I'd highly recommend to upgrade to jetty7/8 (same codebase, but 8 provides servlet 3.0 functionality). Or directly move to jetty9.
Here's the jetty9 documentation for request logs:
http://www.eclipse.org/jetty/documentation/current/configuring-logging.html#configuring-jetty-request-logs
Same for jetty7/8:
http://wiki.eclipse.org/Jetty/Tutorial/RequestLog
I leave it as an exercise for you to find the jetty6 docs or better yet, upgrade. :)
Ok, just found the jetty6 docs by accident: http://docs.codehaus.org/display/JETTY/Logging+Requests
TL;DR
You have to enable the right modules, just add into the start.ini file:
# Create access log file
--module=requestlog
# Redirect all the console log to a file
--module=console-capture
Restart Jetty and have a look into the logs directory.

where does System.out.println statements gets printed in websphere App Server

I have an application which is configured on IBM WebSphere 6.0 version.
In that application, where ever the System.out.printlN() Statements, are there
Where do they get printed?
I mean which log files, will get it printed?
In standalone I can check in the console, that application is deployed in windows server box
How to Identify where all the log.debug, log.info statements get printed from the application into the server box.
I tried checking in log4j.properties, but didnot find any useful info about that.
Background, we have a Websphere app server, where we have configured 2 Nodes and I am deploying in the Node 01, on my changes and trying to debug, but no help.
Please guide if any one has past exp on it.
I haven't been using WebSphere 6 lately. I newer versions you have a profile directory and a log directory within where the log file reside.
The second option is to go into the WAS administration console and go to "Troubleshooting > Logs and Trace > server_name " there you can directly view the logs. This way is documented for WAS 6.0 as well.
As others have hinted, by default the SystemOut.log and SystemErr.log files are located in each node's profiles/<profileName>/<serverName>/logs directory. (These locations and file names can be overridden in the Administration Console.)
log4j logs will depend on the appenders in your log4j configuration (could be a log4j.properties or a log4j.xml file), but might also be affected by whether anything in your application uses Jakarta Commons Logging. If it does, you may find all log4j logging also going to SystemOut.log.
It should get logged in Program files/IBM/SDP/profiles/runtimes/baseV6...
something like this .currently am at home and I don't have exact path.But search in profile directory .
You should always define your own path for appenders in your applications logging.xml instead of using default path of WAS.
The log files are resided at C:\Program Files\IBM\SDP\runtimes\base_v7\profiles\was70profile1\logs\server1

Where is my Java application's logs?

I am logging issues at my application like that:
private static Logger logger = LoggerFactory.getLogger(Student.class);
...
logger.info(msg);
logger.debug(another_msg);
I use Java and Spring framework running on Apache Tomcat 6 and slf4j for logging. When I debug my application on Intellij IDEA I see two tabs: Server and Tomcat Log. That logs are seen at Server tab. Under tomcat folder there is no file that records that logs. However I want to see it at file end if I can I want to change the log level(debug, info etc.) to see the logs.
How can I do it?
Search for the log4j.properties file in your application.
In the log4j.properties you specify the path for the log file.
See here
sl4j is not complete logging implementation, it is a facade to which we can couple other frameworks like log4j, java.util.logging, commons etc. so identify your logging framework and check the corresponding doc for the configuration file.FOr log4j it will be log4j.properties

Categories

Resources