Best technique to print text to console
I am writing a command line tool that performs a number of tests to our servers and reports an output to screen.
I am currently using log4j to print to screen and to a log file.
However, I was wondering if there was a better technique to manage all the printing from one class instead of having the "print" commands scattered开发者_Python百科 all over my code.
e.g.
logger.info("Connecting to environment: " + envName);
if (cmd.hasOption(OPTION_CHECK_PRIMARY)) {
//print primary leg
String primaryLegName = env.getPrimaryLeg().getLegName();
String message = "is primary";
logger.info(String.format("%s : %-4s %s", envName, primaryLegName, message));
}
This is an example of the output that is now scattered across all my code.
Would it be best to have a Formatter class that handles all the printing?
What is the best approach to create it?
What do you think about something like:
Formatter pf = new PlainFormatter();
...
pf.printEnvironment(envName);
if (cmd.hasOption(OPTION_CHECK_PRIMARY)) {
//print primary leg
String primaryLegName = env.getPrimaryLeg().getLegName();
pf.printPrimary(envName, primaryLegName);
}
Have you tried using log4j.properties to format the text. I think if you are trying to format uniquely for each class, then this is still possible using log4j.properties.
Here is a simple example of log4j.properties
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
You can use Pattern in properties like so:
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j has appenders to redirect log messages to different locations. quote" Multiple appenders exist for the console, files, GUI components, remote socket servers, JMS, NT Event Loggers, and remote UNIX Syslog daemons "unquote
精彩评论