a way to use log4j pass values like java -DmyEnvVar=A_VALUE to my code
        Posted  
        
            by raticulin
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by raticulin
        
        
        
        Published on 2010-03-15T16:21:01Z
        Indexed on 
            2010/03/15
            20:49 UTC
        
        
        Read the original article
        Hit count: 264
        
I need to pass some value to enable certain code in may app (in this case is to optionally enable writing some stats to a file in certain conditions, but it might be anything generally).
My java app is installed as a service. So every way I have thought of has some drawbacks:
- Add another param to main(): cumbersome as customers already have the tool installed, and the command line would need to be changed every time.
- Adding java -DmyEnvVar=A_VALUE to my command line: same as above.
- Set an environment variable: service should at least be restarted, and even then you must take care of what user is the service running under etc.
- Adding the property in the config file: I prefer not to have this visible on the config file so the user does not see it, it is something for debugging etc.
So I thought maybe there is some way (or hack) to use log4j loggers to pass that value to my code. I have thought of one way already, although is very limited:
- Add a dummy class to my codebase com.dummy.DevOptions - public class DevOptions { public static final Logger logger = Logger.getLogger(DevOptions.class); 
- In my code, use it like this: - if (DevOptions.logger.isInfoEnabled()){ //do my optional stuff } //... if (DevOptions.logger.isDebugEnabled()){ //do other stuff } 
This allows me to use discriminate among various values, and I could increase the number by adding more loggers to DevOptions. But I wonder whether there is a cleaner way, possibly by configuring the loggers only in log4j.xml??
© Stack Overflow or respective owner