项目上中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 correctMSG_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目录下。

  

时间: 2024-12-12 12:55:30

项目上中logger、message错误信息的配置的相关文章

遍历ModelState中存储的错误信息

在服务器端验证中,有时我们添加了一个ModelError,然后还需要将该信息以JS的形式返回到客户端.如: [HttpPost] public ActionResult Index(LogOnModel model) { if (string.IsNullOrEmpty(model.UserName)) { ModelState.AddModelError("UserName", "请输入用户名."); return JavaScript("alert('

面对对象中错误信息进行配置

错误信息是否显示: 显示错误:display_errors=on 屏蔽错误信息:display_errors=off 错误信息级别的显示: error_reporting=e_all(全部) error_reporting=e_all & ~e_noctice(除noctice的错误都显示) 异常是特殊的错误,异常处理使用try.....cath .....块.   常量 描述 2 E_WARNING 非致命的 run-time 错误.不暂停脚本执行. 8 E_NOTICE Run-time 通

在学习抛出异常的过程中,关于错误信息 TypeError: exceptions must derive from BaseException 的原因

虽然是个很low的问题,但是自己还是出现了,所以特地记录下来,保证自己不会再犯.首先看看我的代码 def FooError(ValueError): passdef foo(s): n=int(s) if n==0: raise FooError('无效的值:%s'%s) return 10/nprint(foo('0')) 运行结果为: Traceback (most recent call last): File "C:\Users\Administrator\Desktop\py\廖雪峰\

统一处理jquery ajax请求过程中的异常错误信息的机制

当jQuery ajax向服务器发送请求,服务器发生异常,比如:400.403.404.500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编码对应的异常页面,对异常集中展现与处理. 首先,发送ajax请求: $.ajax({ type: ‘POST’, url: url, data: data, success: success, dataType: dataType }); 然后,服务发生异常,将对应的异常编码响应给客户端: resp

在junit格式的结果信息中只包含错误信息的修改方法

文件名称:suiteJunit.vm 文件路径:src\fitnesse\resources\templates 添加如下黑体部分内容: <?xml version="1.0"?> #set( $String = "" ) #macro( format $s )$String.format("%.3f", $s)#end #set($suiteTotalRunTimeSeconds = $suiteExecutionReport.to

在ASP.NET 5中显示错误信息

在 ASP.NET 5 中如果不进行显示错误信息的相关配置,在发生错误时,在浏览器中只能看到空白页面. 显示错误信息的配置方法如下: 1)在 project.json 中添加对 Microsoft.AspNet.Diagnostics 的引用 { "dependencies":{ "Microsoft.AspNet.Diagnostics": "1.0.0-*" } } 2)在 Startup.cs 中添加 app.UseErrorPage()

php 错误信息配置

错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项.错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利.推荐关闭此选项 display_errors 错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项.错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利.推荐关闭此选项. display_errors = On 开启状态下,若出现错误,则报错,出现错误提示 dispaly_errors = Off 关闭状态下,若出现错误,则提示:

修改php.ini以达到 屏蔽错误信息

那是因为php.ini中关闭了错误显示,将错误写成了文件,这是人为设置的结果,display_errors =on就好了. 不过不显示错误倒安全点,建议调试时打开,然后提供服务时关闭. 提供一点资料给你: display_errors = On php缺省是打开错误信息显示的,我们把它改为: display_errors = Off 关闭错误显示后,php函数执行错误的信息将不会再显示给用户,这样能在一定程度上防止攻击者从错误信息得知脚本的物理位置,以及一些其它有用的信息,起码给攻击者的黑箱检测

winform程序捕获全局异常,对错误信息写入日志并弹窗

使用场景:在winform程序中如果没对方法进行try catch操作,若方法内出错,则整个程序报错并退出,如下图 如果程序已在客户手中,若没对错误的详细信息进行拍照,我们则不知道错误原因是什么.我们需要能捕获整个程序的错误信息,一旦程序出错,则跳到我们指定的方法中,执行错误信息的报错以及友好的错误提示(也可以不提示,直接退出程序). 实现代码如下:(代码放置位置:在Program.cs文件中的Main方法中) using System; using System.Collections.Gen