代码之家  ›  专栏  ›  技术社区  ›  o.o

Apache log4j 2.3从另一个文件获取日志文件路径

  •  1
  • o.o  · 技术社区  · 9 年前

    我想从另一个日志文件获取log4j日志文件的路径 properties 文件所以,如果我有这个:

    配置属性:

    # Path to logs
    logPath=/home/flow/logs/projectName.log
    

    我想获取该路径并更改 log4j.appender.LOGFILE.File=axis2.log 在…内 log4j.properties .

    我如何才能做到这一点?

    编辑 :我的日志4j。属性文件:

    # Set root category priority to INFO and its only appender to CONSOLE.
    #log4j.rootCategory=INFO, CONSOLE
    log4j.rootCategory=INFO, CONSOLE, LOGFILE
    
    # Set the enterprise logger priority to FATAL
    log4j.logger.org.apache.axis2.enterprise=FATAL
    log4j.logger.de.hunsicker.jalopy.io=FATAL
    log4j.logger.httpclient.wire.header=FATAL
    log4j.logger.org.apache.commons.httpclient=FATAL
    
    # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n
    
    # LOGFILE is set to be a File appender using a HTML Layout.
    log4j.appender.LOGFILE=org.apache.log4j.FileAppender
    log4j.appender.LOGFILE.File=axis2.log
    log4j.appender.LOGFILE.Append=true
    #log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
    #log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
    log4j.appender.LOGFILE.layout=org.apache.log4j.HTMLLayout
    log4j.appender.LOGFILE.layout.Title=NPC Simulator Log
    

    更新(此方法无效):

    public class Foo 
    {
        public void test() {
            System.setProperty("my.log", ConfigHandle.getProperty("logPath");
            Logger log = Logger.getLogger(MyClass.class.getName());
    
           log.info("Testing...");
        }
    }
    

    配置属性

    # log4j.properties
    logPath=/home/flow/logs
    

    log4j.属性

    ...
    log4j.appender.LOGFILE.File=${my.log}/axis2.log
    ...
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   PVR    9 年前

    请参考此示例:

    日志4j.属性

    # Root logger option
    log4j.rootLogger=DEBUG, stdout, file
    
    # Redirect log messages to console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    
    # Redirect log messages to a log file, support file rolling.
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=${my.log}
    log4j.appender.file.MaxFileSize=5MB
    log4j.appender.file.MaxBackupIndex=10
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    

    配置属性

    FILE_PATH=D://logfile.log
    

    示例代码:

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    import org.apache.log4j.Logger;
    
    public class HelloExample {
    
    static { 
        String filePath=readFile();
        System.setProperty("my.log", filePath); }
    
    final static Logger logger = Logger.getLogger(HelloExample.class);
    
        public static void main(String[] args) {
    
            HelloExample obj = new HelloExample();
            obj.runMe("myRun");
    
        }
    
        private void runMe(String parameter){
    
            if(logger.isDebugEnabled()){
                logger.debug("This is debug : " + parameter);
            }
    
            if(logger.isInfoEnabled()){
                logger.info("This is info : " + parameter);
            }
    
            logger.warn("This is warn : " + parameter);
            logger.error("This is error : " + parameter);
            logger.fatal("This is fatal : " + parameter);
    
        }
    
        public static String readFile()
        {
            Properties prop = new Properties();
            InputStream input = null;
    
            try {
                //load file from classpath
                input=   HelloExample.class.getClassLoader().getResourceAsStream("config.properties");
    
                // load a properties file
                prop.load(input);
    
                // get the property value and print it out
                return prop.getProperty("FILE_PATH");
    
            } catch (IOException io) {
                io.printStackTrace();
            } finally {
                if (input != null) {
                    try {
                        input.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
    
    }
    

    因此,此处从中读取新路径 config.properties 然后把它放进去 static 块,它将在运行时替换它。