• 项目中logger、message错误信息的配置


    申明:在一个项目中必不可少的是Logger和错误信息的配置,现在给出在我们常用的处理方法。

    —、创建一个ConfigUtils类和他对应的rah.properties文件和Test测试类

    ConfigUtis:

    package com.rah;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    public class ConfigUtils {
        
        private static final String PROPERTIES_FILE = "com/rah/rah.properties";
        
        private static Properties prop = null;
    
        static{
            InputStream propStream = ConfigUtils.class.getClassLoader().getResourceAsStream(PROPERTIES_FILE);
            prop = new Properties();
            try {
                prop.load(propStream);
            } catch (IOException e) {
                System.out.println("读取文件失败");
            } 
        }
        
        public static  String getProperty(String key){
            return prop.getProperty(key);
        }
    }

    rah.properties

    photoDir=d:/temp/photo
    videoDir=d:/temp/video

    test

    package com.rah;
    
    public class Test {
        public static void main(String[] args) {
            String photoDir = ConfigUtils.getProperty("photoDir");
            String videoDir = ConfigUtils.getProperty("videoDir");
            System.out.println("photoDir Path is: " + photoDir);
            System.out.println("videoDir path is: " + videoDir);
        }
    }

    测试结果:

    photoDir Path is: d:/temp/photo
    videoDir path is: d:/temp/video

    二、创建MessageManager类、message.properties和测试类Test.

    MessageManager

    package com.rah;

    import java.io.IOException;
    import java.io.InputStream;
    import java.text.MessageFormat;
    import java.util.Properties;

    public class MessageManager {
        private static final String PROPERTIES_FILE = "/properties/message.properties";
        private static Properties prop = null;
        static{
            InputStream propStream = MessageManager.class.getResourceAsStream(PROPERTIES_FILE);
            prop = new Properties();
            try {
                prop.load(propStream);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                System.out.println("读取文件失败");
            }
        }
        
        public static String getProperty(String messageCode){
            return prop.getProperty(messageCode);
        }
        
        public static String getProperty(String messageCode, String arg1){
            Object[] args = new Object[1];
            args[0] = arg1;
            
            return getFormatMessage(messageCode, args);
        }
        
        public static String getProperty(String messageCode, String arg1, String arg2){
            Object[] args = new Object[2];
            args[0] = arg1;
            args[1] = arg2;
            
            return getFormatMessage(messageCode, args);
        }
        
        public static String getProperty(String messageCode, String arg1, String arg2, String arg3){
            Object[] args = new Object[3];
            args[0] = arg1;
            args[1] = arg2;
            args[2] = arg3;
            
            return getFormatMessage(messageCode, args);
        }
        
        private static String getFormatMessage(String messageCode, Object[] args) {
            String argMessage = getProperty(messageCode);
            
            return MessageFormat.format(argMessage, args);
        }

    }

    Message.properties

    MSG_E00001=password is not correct
    MSG_E00002=country is {0}
    MSG_E00003=country is {0} provice is {1}
    MSG_E00004=country is {0} provice is {1} city is {2}

    Test

    package com.rah;
    
    public class Test {
        public static void main(String[] args) {
            System.out.println("MSG_E00001 data is: " +  MessageManager.getProperty("MSG_E00001"));
            System.out.println("MSG_E00002 data is: " +  MessageManager.getProperty("MSG_E00002", "CHINA"));
            System.out.println("MSG_E00003 data is: " +  MessageManager.getProperty("MSG_E00003", "CHINA", "JIANGXI"));
            System.out.println("MSG_E00004 data is: " +  MessageManager.getProperty("MSG_E00004", "CHINA", "JIANGXI", "SHANGRAO"));
        }
    }

    测试结果:

    MSG_E00001 data is: password is not correct
    MSG_E00002 data is: country is CHINA
    MSG_E00003 data is: country is CHINA provice is JIANGXI 
    MSG_E00004 data is: country is CHINA provice is JIANGXI city is SHANGRAO 

    三、Loger日志输出,其实就是对log4j的一点封装,方便开发人员使用

    log4j-1.2.13.jar下载

    public class Logger {
    
        private static org.apache.log4j.Logger logger = org.apache.log4j.Logger
                .getLogger(org.apache.log4j.Logger.class);
    
        public static void debug(String message) {
            logger.debug(message);
        }
    
        public static void debug(String message, Throwable ex) {
            logger.debug(message, ex);
        }
    
        public static void info(String message) {
            logger.info(message);
        }
    
        public static void info(String message, Throwable ex) {
            logger.info(message, ex);
        }
    
        public static void error(String message) {
            logger.error(message);
        }
    
        public static void error(String message, Throwable ex) {
            logger.error(message, ex);
        }
    
        public static void fatal(String message) {
            logger.fatal(message);
        }
    
        public static void fatal(String message, Throwable ex) {
            logger.fatal(message, ex);
        }
    
    
        public static void warn(String message) {http://i.cnblogs.com/EditPosts.aspx?opt=1
            logger.warn(message);
        }
    
        public static void warn(String message, Throwable ex) {http://i.cnblogs.com/EditPosts.aspx?opt=1
            logger.warn(message, ex);
        }
    }

    四、对class.getResourceAsStream()、class.getClassLoader().getResourceAsStream()区别的分析

      思心的网友肯定会发现我上面的两个测试分别采用了class.getResourceAsStream(),和class.getClassLoader().getResourceAsStream().其实一开始我也没有注意,是在查API的时候发现有不同的方法,于是为了试试他们的用法特地采用了不同的写法。

    class.getResourceAsStream()会指定的加载的资源路径与当前类所在的包的路径一致

      像上面的MessageManager类如果写成getResourceAsStream("message.properties")则他就只会在ciom.rah包下寻找,此时我们采用"/"开头,那么就会从classpath的根路径开始查找(SRC根目录)getResourceAsStream("/properties/message.properties")就是在SRC目录下创建了properties目录接着创建了message.properties文件。

    ClassLoader.gettResourceAsStream()无论要查找的资源前面是否有"/"都是从classpath的根路径下查找。

      像上面的ConfigUtil类getResourceAsStream("/rah.properties")和("rah.properties")都是直接从SRC目录下找rah.properties文件。

    最后补充:

    程序运行的是最后编译成.class的文件。这个SRC目录下的所有东西都会编译在bin目录下。

      

  • 相关阅读:
    Javascript判断多选框checkbox和单选钮是否选中
    怎么样察看经过编译过的代码exe或者dll文件
    人才的识与用
    Asp.net中把DataTable或DataGrid导出为Excel
    ASP.NET 2.0 绑定高级技巧
    c#文件操作(二)
    ASP.NET 2.0 正式版中callback的一些变化+使用示例
    用人之道
    我常用的js
    NUnit2.0详细使用方法
  • 原文地址:https://www.cnblogs.com/rah123/p/3985052.html
Copyright © 2020-2023  润新知