自定义封装Logger demo 小测试

1》  log4j.properties 文件:

log4j.rootLogger=DEBUG,MINA,file

### 控制台 ###

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{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

log4j.appender.MINA=org.apache.log4j.ConsoleAppender

log4j.appender.MINA.layout=org.apache.log4j.PatternLayout

log4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p %c{1} %x - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender

log4j.appender.file.File=D:/logfile/minademos.log

log4j.appender.file.MaxFileSize=5120KB

log4j.appender.file.MaxBackupIndex=10

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[luozhonghua-error][%d] %p | %m | [%t] %C.%M(%L)%n

2》Log4jConfig:

import org.apache.log4j.PropertyConfigurator;

public class Log4jConfig {

private static boolean isReload = true;

/**

* 装载log4j配置文件

*/

public static void load() {

String path = Log4jConfig.class.getClass().getResource("/").getPath()

+ "config/log4j.properties";

System.out.println("log4j configfile path=" + path);

PropertyConfigurator.configureAndWatch(path, 1000);// 间隔特定时间,检测文件是否修改,自动重新读取配置

}

public static void main(String[] args) {

load();

}

private static void reload() {

if (isReload) {

load();

}

isReload = false;

}

public void setReload(boolean flag) {

isReload = flag;

}

}

3》Logger文件

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class Logger {

private Log log = null;

static {

Log4jConfig.load();// 装载log4j配置文件

}

private Logger() {

log = LogFactory.getLog(this.getClass());

}

private Logger(Class c) {

log = LogFactory.getLog(c);

}

private Logger(String className) {

log = LogFactory.getLog(className);

}

public static Logger getLogger() {

return new Logger();

}

public static Logger getLogger(Class c) {

return new Logger(c);

}

public static Logger getLogger(String className) {

return new Logger(className);

}

public void trace(String info) {

if (log.isTraceEnabled())

log.trace(info);

}

public void debug(String info) {

if (log.isDebugEnabled())

log.debug(info);

}

public void info(String info) {

if (log.isInfoEnabled())

log.info(info);

}

public void warn(String info) {

if (log.isWarnEnabled())

log.warn(info);

}

public void error(String info) {

if (log.isErrorEnabled())

log.error(info);

}

public void error(Object info, Throwable t){

if (log.isErrorEnabled())

log.error(info+","+t);

}

public void fatal(String info) {

if (log.isFatalEnabled())

log.fatal(info);

}

public boolean isTraceEnabled() {

return log.isTraceEnabled();

}

public boolean isDebugEnabled() {

return log.isDebugEnabled();

}

public boolean isInfoEnabled() {

return log.isInfoEnabled();

}

public boolean isWarnEnabled() {

return log.isWarnEnabled();

}

public boolean isErrorEnabled() {

return log.isErrorEnabled();

}

public boolean isFatalEnabled() {

return log.isFatalEnabled();

}

}

4:测试

public class test {

static Logger log = Logger.getLogger(test.class);

public static void main(String[] args) {

for (int i = 0; i < 2; i++) {

log.info("----------info");

log.debug("----------debug");

log.error("----------error");

System.out.println("***********************");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

测试通过,但貌似可用,不过log4j源码貌似强大应用场景

时间: 2024-09-30 10:03:14

自定义封装Logger demo 小测试的相关文章

【swoole】php5.6 swoole(demo)小测试

swoole:网上看到的解释"实现实时异步任务队列:PHP的异步.并行.高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询. Swoole内置了Http/WebSocket服务器端/客户端.Http2.0服务器端."相关文档地址:https://wiki.swoole.com/wiki/page/6.html刚接触sw

浅谈android中的自定义封装易用的Dialog

好久没写android的博客,最近在做一个android的项目,里面用到我们经常用的一个控件就是对话框,大家都知道android自带的对话框是很丑的,android5.x之后除外.所以就出现了自定义view,自己定义美观的对话框.好我们就来自定义对话框. 整体思路:定义一个类然后去继承Dialog类,然后重写相应的构造器方法.大家都知道一般的对话框的创建过程都是来一个AlertDialog.Builder对象,然后使用一些set方法来设置标题内容以及设置一些自定义的view和点击的Button以

[工具]小测试和学习项目清单化框架

下载:Personal_Study_Assistant.zip 背景 实际中,我们可能要经常会对一些API或小核心代码不太确定,于是写一些小测试代码,如正则表达式测试.时间久了,这些小项目散落得到处都是,查找和整理起来都比较费时间. “工欲善其事,必先利其器”,下面让我们来解决一下这个问题吧. 程序的思路是: 1所有的测试文件统一归类存放于不同的Project; 2Project启动时,自动生成所有测试代码的清单,通过输入清单序号选择对应的测试来执行,不用更改Program的Main方法. (目

Python+Selenium进阶版(八)- Python自定义封装一个简单的Log类

目标:如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里. 练习场景: 我们需要封装一个简单的日志类,主要有以下内容: 1.生成的日志文件格式是 年月日分秒.log 2.生成的XXX.log文件存储在项目根目录下Logs文件夹下 3.这个日志类,支持INFO,ERROR两种日志级别 4.日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述 解决思路: 1.在根目录下新建一个Logs的文件夹,获取这个Log的相对路径: 2.日志的保存命名,需要系统时间:

struts2 返回页面数据小测试

用户通过查询,后台得到查询数据,那么struts2这么把查询的数据,在页面显示?做个小测试. 创建项目 导入jar包(如果不知道导入哪些jar,参考前面章节)测试jar包为2.5 配置web.xml 写测试 项目结构图 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&qu

iOS开发——UI篇Swift篇&amp;玩转UItableView(四)自定义&amp;封装

UItableView自定义&封装 一:Model 1 class AppsModel: NSObject { 2 3 //定义模型的三个属性 4 var imageName:String! //图片名称 5 var appName:String! //应用名称 6 var appDescription:String! //应用描述 7 8 9 10 //自定义初始化方法 11 init(imageName image_Name:String , app_Name:String , app_De

[UNet]通过一个小测试了解Command和ClientRpc的功能

作者只是业余时间接触Unity 2个月的新人一枚,如有不对的地方,请各位大神指正! Unity 5.以后使用了新的网络模块UNet(其实我接触的晚压根没用过老的- -!),但是在使用过程中确实关于UNet的资料和讨论挺少的,于是自己做了个小项目测试了Command和ClientRpc两个命令. 首先我们看看官方给出的定义: Commands Commands are sent from player objects on the client to player objects on the s

[Python]threading local 线程局部变量小测试

概念 有个概念叫做线程局部变量,一般我们对多线程中的全局变量都会加锁处理,这种变量是共享变量,每个线程都可以读写变量,为了保持同步我们会做枷锁处理.但是有些变量初始化以后,我们只想让他们在每个线程中一直存在,相当于一个线程内的共享变量,线程之间又是隔离的.python threading模块中就提供了这么一个类,叫做local. 多线程中共享变量和局部变量的区别我画两个小图,简单描述下(作图能力一般,请见谅,概念性的东西大家可以google下,很多好文章) 全局变量 线程局部变量 对比: 下面是

一个基于cocos2d-x 3.0和Box2d的demo小程序

p图demo小应用.想怎么p就怎么p 本文參考于http://blog.csdn.net/xiaominghimi/article/details/6776096和http://www.cnblogs.com/liufan9/archive/2013/04/11/3012275.html. 于上面基于cocos2d-x 2.0不一样的地方,本本是基于cocos2d-x 3.0. 首先.当然是下载和安装cocos2d-x 3.0了,网址:http://www.cocos2d-iphone.org/