- 浏览: 963846 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
loggers
additivity属性,决定是否从root继承
如果一个logger的名字后面跟着一个点号,它就是点号后面的那个logger的前辈(ancestor),是这个晚辈(descendant) 的前缀。如果在它自己和这个晚辈之间没有其它的前辈,它和这个晚辈之间就是父子关系。
例如,叫做"com.foo"的logger是叫做 "com.foo.Bar"的logger的父辈 。同样地,"java"是"java.util" 的父辈,是"java.util.Vector"的前辈。这和java中package的概念是一样的。
根(root)logger 位于logger阶层的最上层。它在三个方面很特别:
1.它总是存在的。
2.不能给它的level设置为null
3.不能通过name获取到它。
根logger是通过Logger.getRootLogger获取的。而非根logger是通过Logger.getLogger获取的。
logger拥有如下方法
package org.apache.log4j;
public class Logger {
// Logger creation & retrieval methods:
public static Logger getRootLogger();
public static Logger getLogger(String name);
// printing methods:
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);
// printing methods for exceptions:
public void debug(Object message, Throwable t);
public void info(Object message, Throwable t);
public void warn(Object message, Throwable t);
public void error(Object message, Throwable t);
public void fatal(Object message, Throwable t);
// generic printing method:
public void log(Level p, Object message);
}
logger的创建和检索
记录器创建时,会以如上说的结构创建。通过getLogger方法,我们可以得到一个logger。这个方法如果发现这个logger不存在,就回创建它。而getLogger方法传入的name相同,它们得到的引用是同一个。
如:
Logger x = Logger.getLogger("wombat");
Logger y = Logger.getLogger("wombat");
得到的是两个相同实例。
对于祖先logger,在创建后代logger的时候,如果祖先没有创建,那么祖先的logger会先被创建。
对于日志级别,这和UNIX的日志是一样的。而windows则叫做日志时间类型。
常用的级别
1.FATAL致命级别。这个级别表示应用出现了致命的错误。这样的错误难以恢复的。而对于java的Exception,则不应该属于这个级别。
2.ERROR错误级别。一般在发生了Exception使用
3.WARN警告级别。对系统的警告。如当发现数据不正确的时候。
4.INFO信息级别。比DEBUG级别略高。它一般用于记录系统信息,或者记录系统运行中的重要标志。
5.DEBUG调试级别。这个级别使用比较多。一般用来再开发阶段使用。来输出调试信息,方便调试。
级别包含
ALL, DEBUG, INFO, WARN, ERROR, FATAL and OFF等。
级别等级关系
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
实现org.apache.log4j.Level接口,我们还可以定义自己的级别。
一个logger的有效级别如果没有指定(level 为null),那么它将从它的父类继承,直到root logger,找到一个level不为null的祖先为止。
如表格,只有root logger被指派了级别。这个级别的值,DEBUG,被其它的loggers X, X.Y 和 X.Y.Z继承了。
如表格,所有的logger都指定了级别,无需继承。
如表只有x.y没设置级别,它将从它的上级logger(x)继承级别DEBUG
如表root和x指定了级别。x.y和x.y.z未设置级别,他们将从x继承而来。
日志过滤器。
日志是通过调用对应级别的方法来完成的。如果当前的logger开启的级别高于调用的方法级别,那么过滤器就会不允许打印。
例子
package com.cgodo.log4j.test;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
private static final Logger LOGGER = Logger.getLogger("test");
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger logger = Logger.getLogger("com.foo");
// 设置等级为info
logger.setLevel(Level.INFO);
// 它未设置级别,从com.foo继承
Logger barLogger = Logger.getLogger("com.foo.Bar");
// because WARN >= INFO.
logger.warn("warn.");
// This request is disabled, because DEBUG < INFO.
logger.debug("debug.");
// INFO >= INFO.
barLogger.info("Located nearest gas station.");
// This request is disabled, because DEBUG < INFO.
barLogger.debug("debug2");
}
}
结果只有两句级别是输出的
0 [main] WARN com.foo - warn.
0 [main] INFO com.foo.Bar - Located nearest gas station.
层次性的级别过滤 Threshold
它设置的是全局的过滤级别。而logger的级别只是针对当前logger的
package com.cgodo.log4j.test;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerRepository;
/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger x = Logger.getLogger("foo.bar");
x.setLevel(Level.INFO);
LoggerRepository repository = x.getLoggerRepository();
//设置了全局的为WARN
repository.setThreshold(Level.WARN);
//info < warn
x.info("Dropped message.");
//设置全局的为off
repository.setThreshold(Level.OFF);
//fatal < off
x.fatal("This is a serious message but it will also be dropped.");
repository.setThreshold(Level.ALL);
x.info("Hello world.");
//debug >= all
x.debug("Remember: DEBUG < INFO.");
}
}
输出内容为
0 [main] INFO foo.bar - Hello world.
打印异常
package com.cgodo.log4j.test;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger x = Logger.getLogger("foo.bar");
x.setLevel(Level.ALL);
x.error("exception测试", new RuntimeException("测试"));
}
}
输出内容
0 [main] ERROR foo.bar - exception测试
java.lang.RuntimeException: 测试
at com.cgodo.log4j.test.Test.main(Test.java:24)
additivity属性,决定是否从root继承
如果一个logger的名字后面跟着一个点号,它就是点号后面的那个logger的前辈(ancestor),是这个晚辈(descendant) 的前缀。如果在它自己和这个晚辈之间没有其它的前辈,它和这个晚辈之间就是父子关系。
例如,叫做"com.foo"的logger是叫做 "com.foo.Bar"的logger的父辈 。同样地,"java"是"java.util" 的父辈,是"java.util.Vector"的前辈。这和java中package的概念是一样的。
根(root)logger 位于logger阶层的最上层。它在三个方面很特别:
1.它总是存在的。
2.不能给它的level设置为null
3.不能通过name获取到它。
根logger是通过Logger.getRootLogger获取的。而非根logger是通过Logger.getLogger获取的。
logger拥有如下方法
package org.apache.log4j;
public class Logger {
// Logger creation & retrieval methods:
public static Logger getRootLogger();
public static Logger getLogger(String name);
// printing methods:
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);
// printing methods for exceptions:
public void debug(Object message, Throwable t);
public void info(Object message, Throwable t);
public void warn(Object message, Throwable t);
public void error(Object message, Throwable t);
public void fatal(Object message, Throwable t);
// generic printing method:
public void log(Level p, Object message);
}
logger的创建和检索
记录器创建时,会以如上说的结构创建。通过getLogger方法,我们可以得到一个logger。这个方法如果发现这个logger不存在,就回创建它。而getLogger方法传入的name相同,它们得到的引用是同一个。
如:
Logger x = Logger.getLogger("wombat");
Logger y = Logger.getLogger("wombat");
得到的是两个相同实例。
对于祖先logger,在创建后代logger的时候,如果祖先没有创建,那么祖先的logger会先被创建。
对于日志级别,这和UNIX的日志是一样的。而windows则叫做日志时间类型。
常用的级别
1.FATAL致命级别。这个级别表示应用出现了致命的错误。这样的错误难以恢复的。而对于java的Exception,则不应该属于这个级别。
2.ERROR错误级别。一般在发生了Exception使用
3.WARN警告级别。对系统的警告。如当发现数据不正确的时候。
4.INFO信息级别。比DEBUG级别略高。它一般用于记录系统信息,或者记录系统运行中的重要标志。
5.DEBUG调试级别。这个级别使用比较多。一般用来再开发阶段使用。来输出调试信息,方便调试。
级别包含
ALL, DEBUG, INFO, WARN, ERROR, FATAL and OFF等。
级别等级关系
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
实现org.apache.log4j.Level接口,我们还可以定义自己的级别。
一个logger的有效级别如果没有指定(level 为null),那么它将从它的父类继承,直到root logger,找到一个level不为null的祖先为止。
logger name | 指定级别 | 有效级别 |
root(根级别) | DEBUG | DEBUG |
x | none | DEBUG |
x.y | none | DEBUG |
x.y.z | none | DEBUG |
如表格,只有root logger被指派了级别。这个级别的值,DEBUG,被其它的loggers X, X.Y 和 X.Y.Z继承了。
logger name | 指定级别 | 有效级别 |
root(根级别) | DEBUG | DEBUG |
x | ERROR | ERROR |
x.y | INFO | INFO |
x.y.z | DEBUG | DEBUG |
如表格,所有的logger都指定了级别,无需继承。
logger name | 指定级别 | 有效级别 |
root(根级别) | INFO | INFO |
x | DEBUG | DEBUG |
x.y | none | DEBUG |
x.y.z | WARN | WARN |
如表只有x.y没设置级别,它将从它的上级logger(x)继承级别DEBUG
logger name | 指定级别 | 有效级别 |
root(根级别) | DEBUG | DEBUG |
x | ERROR | ERROR |
x.y | none | ERROR |
x.y.z | none | ERROR |
如表root和x指定了级别。x.y和x.y.z未设置级别,他们将从x继承而来。
日志过滤器。
日志是通过调用对应级别的方法来完成的。如果当前的logger开启的级别高于调用的方法级别,那么过滤器就会不允许打印。
例子
package com.cgodo.log4j.test;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
private static final Logger LOGGER = Logger.getLogger("test");
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger logger = Logger.getLogger("com.foo");
// 设置等级为info
logger.setLevel(Level.INFO);
// 它未设置级别,从com.foo继承
Logger barLogger = Logger.getLogger("com.foo.Bar");
// because WARN >= INFO.
logger.warn("warn.");
// This request is disabled, because DEBUG < INFO.
logger.debug("debug.");
// INFO >= INFO.
barLogger.info("Located nearest gas station.");
// This request is disabled, because DEBUG < INFO.
barLogger.debug("debug2");
}
}
结果只有两句级别是输出的
0 [main] WARN com.foo - warn.
0 [main] INFO com.foo.Bar - Located nearest gas station.
层次性的级别过滤 Threshold
它设置的是全局的过滤级别。而logger的级别只是针对当前logger的
package com.cgodo.log4j.test;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerRepository;
/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger x = Logger.getLogger("foo.bar");
x.setLevel(Level.INFO);
LoggerRepository repository = x.getLoggerRepository();
//设置了全局的为WARN
repository.setThreshold(Level.WARN);
//info < warn
x.info("Dropped message.");
//设置全局的为off
repository.setThreshold(Level.OFF);
//fatal < off
x.fatal("This is a serious message but it will also be dropped.");
repository.setThreshold(Level.ALL);
x.info("Hello world.");
//debug >= all
x.debug("Remember: DEBUG < INFO.");
}
}
输出内容为
0 [main] INFO foo.bar - Hello world.
打印异常
package com.cgodo.log4j.test;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
/**
* log4j测试
*
* @author liyixing liyixing1@yahoo.com.cn
* @version 1.0
* @since 2011-7-3 上午01:37:42
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
Logger x = Logger.getLogger("foo.bar");
x.setLevel(Level.ALL);
x.error("exception测试", new RuntimeException("测试"));
}
}
输出内容
0 [main] ERROR foo.bar - exception测试
java.lang.RuntimeException: 测试
at com.cgodo.log4j.test.Test.main(Test.java:24)
发表评论
-
Invalid signature file digest for Manifest main attributes
2015-09-23 14:26 8332java.lang.SecurityException: In ... -
log4jdbc
2014-12-25 13:55 3058该框架目前支持到jdbc3.和jdbc4的版本。 提供了多种 ... -
filter
2011-07-16 01:12 1050log4j默认提供了几个过滤器,包括repository过滤器 ... -
layout
2011-07-10 23:28 1144抽象类Layout public abstract ... -
appender
2011-07-10 17:03 2147Appender实现了Appender 类定义如下 packa ... -
配置文件
2011-07-09 21:47 1575log4j的配置支持xml和属性文件两种。在前面的文章中说过B ... -
log4j基础知识2 LoggingEvent类,性能
2011-07-07 23:21 4634LoggerEvent 当threshold和logg ... -
log4j的执行流程
2011-07-03 18:50 1850当调用了记录日志的方法后,比如调用log()方法 1.检测th ... -
log4j 基础知识
2011-07-03 01:41 1225简单例子: 将log4j-VERSION.jar架包加入到cl ...
相关推荐
基于改进YOLOv5s的森林烟火检测算法.pdf
人力资源管理工具绩效考核excel模板01
施工班组长绩效考核表
57 -营业部经理绩效考核表1
XX公司行政部绩效考核指标
1、文件内容:ant-apache-xalan2-1.9.4-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ant-apache-xalan2-1.9.4-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
部门绩效考核表模板(基于KPI以月度为例2)
11-6-质检员绩效考核表(含自动计算、等级评价及任意设置等级)
2024最新全国河流湖泊矢量数据 【数据介绍】 2024年中国河流湖泊数据 一份包含中国境内所有主要河流和湖泊的地理信息数据。 数据格式:Shapefile:广泛使用的GIS数据格式,方便在各类GIS软件中使用。 数据获取:访问OpenStreetMap官网,通过导出工具选择中国区域并下载所需的数据。 使用Geofabrik等第三方网站,可以下载预处理好的中国区域的OSM数据。 数据使用:GIS软件:如QGIS、ArcGIS等,用户可以在这些软件中导入OSM数据进行可视化、分析和编辑。 数据应用: 环境研究:分析河流湖泊的水质变化,研究水资源分布及其环境影响。 城市规划:用于规划城市水系、洪水防控、水资源管理等。 导航和旅游:为河流湖泊的导航和旅游路线规划提供数据支持。 科研:为水文地理研究、生态保护、气候变化等领域提供基础数据。 数据特点: 实时更新:OSM数据由全球用户贡献,具有较高的实时性和更新频率。 开放性:所有数据都在开放许可下发布,允许用户自由使用、修改和分发。 详细性:由于全球志愿者的不断努力,数据细节较为丰富,涵盖了从主要河流湖泊到小型水体的广泛范围。 数据时间2024年5月,shp格式,数据来源OpenStreetMap。 OpenStreetMap(OSM)介绍: 一个开放的、免费的、全球性的地图项目,由全球的志愿者和地图爱好者们共同创建和维护。 OSM的数据包括道路、建筑、公园、河流、湖泊等各类地理信息。由于是由众多志愿者共同编辑,OSM的数据具有很高的实时性和详细程度,特别是在一些活跃的区域,地图数据的更新速度和精度往往超过商业地图服务。 用户可以直接在OSM官网下载地图数据,数据格式主要有OSM XML和PBF等。此外,还有一些第三方网站和工具提供更加便捷的数据下载和处理服务,如Geofabrik、Overpass API等。 OSM的数据可以在各种GIS软件中使用,如QGIS、ArcGIS等。此外,还可以使用Python的OSMnx、GeoPandas等库进行编程处理,或者通过Leaflet、Mapbox等JavaScript库将OSM数据集成到web地图应用中。 OSM的所有数据都在开放许可下发布,允许用户自由使用、修改和分发。这使得OSM成为了许多公共项目、研究机构和商业公司的重要数据来源。
部门绩效考核评分表
12-11-运输车队长绩效考核表(含自动计算、等级评价)
1、文件内容:ant-javadoc-1.9.4-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ant-javadoc-1.9.4-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
springboot整合 freemarker方法
1、文件内容:apache-commons-codec-1.8-7.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-codec-1.8-7.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
《旅游抽样调查资料》是反映入境游客在华(内地)花费和国内居民国内旅游情况的资料性年刊,分为上下两篇。 上篇为在华(内地)停留时间在3个月以内的入境游客抽样调查资料,由综合分析报告和调查分类数据两部分组成,分类数据包括:入境游客的主要特征,入境外国人、港澳台同胞的花费水平和花费构成、在境内的停留时间以及入境次数、流向和对住宿单位的选择等。 下篇为国内旅游抽样调查资料,汇集了对城镇居民和农村居民的国内旅游抽样调查结果,共分为四个部分:第一部分为综合分析报告;第二部分为国内旅游出游及花费情况;第三部分为城镇居民国内旅游抽样调查分类数据;第四部分为农村居民国内旅游抽样调查分类数据。
1、表单界面,身份证信息保存在dbf表中,供vfp应用使用,可导出为xls电子表格。 2、提供了身份证过期校验和查询功能。
人事行政主管绩效考核评分表
08 -大堂副理绩效考核表1
1、文件内容:apr-1.4.8-7.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apr-1.4.8-7.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
ComponentNameError解决办法.md