How to suppress logging output to stdout when using Jetty Websocket client? - java

When using Jetty's Websocket client implementation and creating an instance of WebSocketClient, logging is being written to stdout as such:
2018-08-22 22:30:34.720:INFO::main: Logging initialized #26651ms to org.eclipse.jetty.util.log.StdErrLog
This occurs as soon as doing this:
WebSocketClient client = new WebSocketClient();
I tried including a jetty-logging.properties file as part of the resource bundle with log levels turned OFF but that didn't work:
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StrErrLog
org.eclipse.jetty.LEVEL=OFF
org.eclipse.jetty.websocket.LEVEL=OFF
How do I suppress this?
Thanks,
Tobias

Verified with Jetty 9.4.x: add /jetty-logging.properties to your classpath:
org.eclipse.jetty.util.log.announce=false
Because I'm using slf4j-simple, also /simplelogger.properties:
org.slf4j.simpleLogger.defaultLogLevel=warn
Setting a system property inside the code is flaky for obvious reasons. (https://javagc.leponceau.org/2019/02/how-to-suppress-embedded-jetty-logging.html)

I managed to figure it out by stepping into WebSocketClient() with a debugger until the message was printed to stdout.
To disable this logging announcement, set a system property.
System.setProperty("org.eclipse.jetty.util.log.announce", "false");
I wish the Jetty documentation had an overview of properties it honors.

Related

log output from qpid library running in weblogic

I am looking for a way to get more detail, like debug or verbose level logging, of a JMS message send over amqps to AzureServiceBus.
I am using qpid client 0.60.1 and I have no access to the calling code. I am working with a web application running in Weblogic. The application provides a servlet that has generic JMS functions, and I can use configuration that maps those to a specific providers' JMS connection factory libraries. To make qpid available to use, I add the qpid client jars to the CLASSPATH for when I start weblogic, and I provide a jndi.properties file that currently contains only two entries:
con
connectionfactory.ServiceBusConnectionFactory=amqps://?jms.username=&jms.password=
queue.inbound-general-q-QueueLookup=
Currently, this is the only message that I see in the weblogic log:
Connection ID:6147a0e7-1870-4a1a-8dd5-bd7102fc1aa4:106 connected to server: amqps://
I have been told that we don't have enough information to open a case with Microsoft.
I am looking for a way to get more detail, like debug or verbose level logging, of a message send. Ideally, want to see as much as possible: headers, properties, payload, etc.
The things I have access to change:
Weblogic environment, including classpath and any other java runtime flags
The jnd.properties file
I am reviewed the qpid.apache.org documentation on logging, but it has not been helpful to me as it is too vague.
The main application running in weblogic has these parameters in its runtime:
-Djava.util.logging.config.file=properties/logging.properties
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
I have tried adding some things to logging.properties, but it has never changed the output of the resulting log file to include anything from amqp.

JAX-WS logging & timestamp

I am using JAX-WS in WebLogic and I was able to enable the message logging by using following parameters (as specified at https://metro.java.net/guide/ch02.html#logging):
com.sun.xml.ws.transport.http.HttpAdapter.dump=true
com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
The log entries however do not contain any timestamps so I have almost no information about when each message was received/sent.
Is there any way to add timestamps to the resulting log entries?
I guess you need to configure log messages format:
java.util.logging.SimpleFormatter.format="%4$s: %5$s [%1$tc]%n
More about configuration options could be found here:
http://docs.oracle.com/javase/7/docs/api/java/util/logging/SimpleFormatter.html
I have finally found a solution for this.
The only thing that must be done is to redirect stdout logging to WebLogic logging system by checking “Redirect stdout logging enabled” in Advanced logging section of your managed server’s configuration (e.g. Logging -> General -> Advanced).
This will add timestamps to the SOAP message logs.

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.

SLF4J logs error messages at info level

I'm running into a weird problem. I have a class that used to use Log4j, and I could do something like:
LOGGER.log(Level.SEVERE, "This is a message");
And I'd get output like this:
SEVERE: This is a message
I replaced it with an SLF4J logger for consistency with the rest of the application:
LOGGER.error("This is a message.");
But now it's logging at INFO level:
INFO: 2012-01-23 16:50:43,306 [http-thread-pool-8080(3)] ERROR com.mycompany.MyClass - This is a message
I was expecting this to be logged at ERROR level (SLF4J doesn't seem to have any levels above that).
Any idea what's going on? Is this the default? The application is fairly complicated, so I wouldn't be surprised if this was changed somewhere, but where would I find that to change it back?
I'm using Glassfish, in case that might be related.
you need to make your SLF4J use the Java Util Logging backend. That's what Glassfish uses internally. Since it's not using that, it's dumping to the console, and GF reports everything on the console as INFO.
So hook up the JUL adapter and you should be all good.
without configuration listing for logging it's only a guess. but I think the logging framework is probably misconfigured. slf4j logs at ERROR level:
ERROR com.mycompany.MyClass - This is a message
then this output is sent into console, which is redirected into general log file at INFO level by glassfish.
previous setup probably used glassfish logging directly inheriting its configuration. after switching to slf4j no config was found so everything is sent to console and then to server.log

hsqldb messing up with my server´s logs

I have a server I made in Java that needs to use a database, I chose HSQLDB.
So I have a lot of entries in my server like:
Logger.getLogger(getClass().getName()). severe or info ("Some important information");
When I run my server it goes to System.out which I think its the default configuration of java.util.logging?, so far its ok for me, and later I will make it go to a file ...
But, the problem is, when I start hsqldb it messes up with the default configuration and I can´t read my log entries on System.out anymore..
I already tried to change hsqldb.log_data=false, but it still messes up the default configuration.
Can someone help me??
I dont want to log hsqldb events, just my server ones.
Thanks
This issue was reported and fixed in the latest version 2.2.0 released today.
Basically, you set a system property hsqldb.reconfig_logging to the
string value false.
A system property is normally set with the -D option in the Java startup command for your application:
java -Dhsqldb.reconfig_logging=false ....
See below for details of the change:
http://sourceforge.net/tracker/?func=detail&aid=3195462&group_id=23316&atid=378131
In addition, when you use a fremework logger for your application, you should configure it directly to choose which levels of log to accept and which ones to ignore.
The hsqldb.applog setting does not affect framework logging and only controls the file log.
The hsqldb.log_data=false is for turning off internal data change logging and should not be used for normal databases. Its usage for bulk imports is explained in the Guide.
Try setting hsqldb.applog to 0, that shuts off application logging to the *.app.log file.
Start your server with a property pointing to the location of a dedicated properties file:
-Djava.util.logging.config.file=/location/of/your/hsqldblog.properties"
Which contains the following line to change Java logging for Hsqldb.
# Change hsqldb logging level
org.hsqldb.persist = WARNING
Side note, you can choose from the following levels:
SEVERE WARNING INFO CONFIG FINE FINER FINEST

Categories

Resources