print a console Value from a jar file to GUI - java

I am running a dynamic spring MVC project. I am including some jar files/packages in my project to convert DNS lookup.
I am getting console Outputs (System.out.println()) which is written in jar file.It is the status of my DNS conversions.
Some of the final outputs I show in UI through Model Attribbute
I need To show that console messages which is printed from a jar file in my GUI. How can I do this? Any Idea ?

I would go with SLF4J to clean up all your logging. Something like the below link should work and you can re-direct any other logging (log4j, commons-io ect) using the other slf4j logging dependencies.
http://projects.lidalia.org.uk/sysout-over-slf4j/quickstart.html

Related

Redirect output (to file) from Maven dependency in Java

In my project, I'm working with the HeidelTime framework, that I included as a Maven dependency. This framework is very verbose, so I would like to redirect its output to a file (but not all outputs from my application). The constraints are the following:
HeidelTime uses a Logger (Log4J), so I can't simply redirect the standard output to a file.
I can't access the logger because it's private to the main class (HeidelTimeStandalone.java).
I included HeidelTime in my project as a Maven dependency and I prefer to keep it as is (even if I could download the code and modify directly the source code to make the logger public...)
Finally, I don't want to simply redirect all outputs (java -jar myApplication.jar > file.txt) because I would like to preserve my standard output apart from HeidelTime's output...
Does anybody have an idea to redirect HeidelTime's output in a file? Hope this at least is possible!

How to turn off all logging (even for dependencies) in a standalone command-line app (jar-with-dependencies)

I have an Java app that depends on a whole bunch of libraries. I use the assembly maven plugin to package the whole thing into a single JAR.
This library is mostly used a regular JAR dependency, so the client will be controlling logging. However, when it's packaged as a standalone executable JAR, I don't want to show all these logs that you would usually see in the server log.
I obviously don't control what type of logging libraries dependencies use. In my main, I use the JDK java.util.logging.
How do I programmatically turn off all logging (or leave it only at SEVERE level)?
I have tried to do what is suggested here (with the variation that I set the level to SEVERE) at the very start in my main, but all the logs are still showing up.
How do I get the logs to stop showing up on the command-line when I execute the JAR?
How do I get the logs to stop showing up on the command-line when I execute the JAR?
If you want to be heavy handed you can stop all console output by simply closing the out and error streams:
System.out.close();
System.err.close();
Keep in mind there is no way to re-open those streams.
How do I programmatically turn off all logging (or leave it only at SEVERE level)?
For JUL you can follow the instructions to create a logging.properties file.
I obviously don't control what type of logging libraries dependencies use...
You'll have to have to include configuration files for those frameworks to turn them off.
How do I programmatically turn off all logging (or leave it only at SEVERE level)?
Child loggers will inherit from the root logger. You can set the root logger to severe and set it's handlers to severe:
private static final Logger[] PINS = new Logger[]{Logger.getLogger("")};
static {
for (Logger l : PINS) {
l.setLevel(Level.SEVERE);
for (Handler h : l.getHanders()) {
h.setLevel(Level.SEVERE);
}
}
}

How to create my own logging configuration for an Openfire Plugin

I have the following setup
Version: Openfire 4.0.2
Server Directory: /opt/openfire
Running on a Centos (6) machine.
I have a plugin and I run a lot of debug code when developing. I will get an instance of a Logger using:
private static final Logger Log = LoggerFactory.getLogger(Submitter.class)
but the problem is that when I look at the logs (DEBUG level), I get EVERYTHING that has DEBUG (for example the httpd Apache libraries). I know that in JBOSS (and other systems) I can make a config that allows me to put Log Ouput of just my plugin to a specific location (e.g. a separate file).
Does anyone have any idea how to do this or if this is possible in Openfire?
Many thanks
In Openfire installation, under lib directory, there's a config file named
log4j.xml
just modify this and override default one.
If you need a log4j tutorial, check out at: https://www.mkyong.com/logging/log4j-xml-example
In you case you can:
redirect your own classes in another custom file
redirect all debug in another file and keep your custom class in
default debug log so it will be viable by Openfire webinterface

How to set different log levels in Eclipse Scout framework?

I'm having some trouble configuring proper logging in Eclipse Scout framework. My claims aren't that high as I only want to be able to set different log levels for different parts of my program in a configuration/properties/XML file.
The logging configuration in the config.ini of my Scout server plugin currently looks like this:
eclipse.consoleLog=true
org.eclipse.scout.log=eclipse
org.eclipse.scout.log.level=INFO
So as you can see this is the default logging configuration using Eclipse logging. It works fine for logging at a global level. The only thing I would like to do is to write something like this to set the different log levels:
packagename.ClassName=LOGLEVEL
As this is a very basic logging use case I think there must be some easy way to do this in Scout. Otherwise I would appreciate some help how to configure log4j, JUL or others for the use with Scout. The Eclipse Scout Wiki hasn't helped me so far. I created the example logger fragment to the host plugin 'org.eclipse.scout.commons' and removed the logging configuration lines from my config.ini but nothing happens. I'm also not sure where to put the log4j.poperties or how this is done otherwise.
I'm a bit ashamed for being unable to figure out such a basic problem, but would be very happy about some quick help.
I can tell you how to configure the logging if you choose the java logger (config.ini: org.eclipse.scout.log=java).
For the eclipse logger, I barely found any information at all.
Now, to configure the java (JUL) logging: You can do this in a file called logging.properties.
You can configure the logging by specifying the configuration file in your product:
Create your configuration file - say logging.properties inside the folder where your product file (for server or client respectively) is located. Typically this is in a folder named 'products'.
Open your product file and go to the "Launching" tab and specify your logging configuration file in the "VM Arguments" tab. Use the "java.util.logging.config.file" system property to do so:
-Djava.util.logging.config.file="${resource_loc:/com.yourapp.server/products/logging.properties}"
Now, you should be able to specify the log levels in your new logging.properties file:
### Root level of your application, all below are ignored
.level=INFO
### Handlers
handlers=java.util.logging.ConsoleHandler
### Handler properties
java.util.logging.ConsoleHandler.level=FINEST
### Override the logging level for certain classes
com.yourapp.server.SomeService.level=FINE
Alternatively, you can also use a class to initialize the logging with the java.util.logging.config.class option. See this wiki page for a detailed example.
Also, when building a WAR file, you might be interested in this answer.

Suppress clojure logging in Eclipse?

I'm working with a 3rd party library implemented in Clojure which logs messages using clojure.tools.logging.
I want to suppress these messages in Eclipse and have tried the following suggestion to no avail.
Any (hacky) solutions greatly appreciated.
It sounds like your clojure.tools.logging is using a different underlying logging implementation than the rest of your application?
For example if your application is using java.util.logging, but you have a stray log4j library in your classpath, then clojure.tools.logging would detect log4j and would therefore not react to the logging config changes you were making.
The logic for detecting the underlying logging implementation is here:
https://github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging/impl.clj
Specifically:
(defn find-factory
"Returns the first non-nil value from slf4j-factory, cl-factory,
log4j-factory, and jul-factory."
[]
(or (slf4j-factory)
(cl-factory)
(log4j-factory)
(jul-factory)
(throw ; this should never happen in 1.5+
(RuntimeException.
"Valid logging implementation could not be found."))))
It would be helpful to run mvn dependency:tree or lein deps :tree to see what logging dependencies are on your classpath.

Categories