如何使用Log4j?
Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析,要下载和了解更详细的内容,还是访问其官方网站吧: http://jakarta.apache.org/log4j 。
2、Log4j的概念
Log4j中有三个主要的组件,它们分别是 Logger、Appender和Layout,Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其它Logger通过 Logger.getLogger(String name)方法。
Appender则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 console、files、GUI components、NT Event Loggers等,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。
Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。
Log4j中将要输出的Log信息定义了5种级别,依次为DEBUG、INFO、WARN、ERROR和FATAL,当输出时,只有级别高过配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。
3、Log4j的配置文件
虽然可以不用配置文件,而在程序中实现配置,但这种方法在如今的系统开发中显然是不可取的,能采用配置文件的地方一定一定要用配置文件。Log4j支持两种格式的配置文件:XML格式和Java的property格式,本人更喜欢后者,首先看一个简单的例子吧,如下:
log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize= 100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
首先,是设置root,格式为 log4j.rootLogger=[level],appenderName, ...,其中level就是设置需要输出信息的级别,后面是appender的输出的目的地,appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。 配置日志信息输出目的地Appender,其语法为
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
....
log4j.appender.appenderName.layout.option = valueN
Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息<?XML:NAMESPACE PREFIX = O />
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似: <?XML:NAMESPACE PREFIX = ST1 />2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
4、Log4j在程序中的使用
要在自己的程序中使用Log4j,首先需要将commons-logging.jar和logging-log4j-1.2.9.jar导入到构建路径中。然后再将log4j.properties放到src根目录下。这样就可以在程序中使用log4j了。在类中使用log4j, 首先声明一个静态变量 Logger logger=Logger.getLog("classname");现在就可以使用了,用法如下:logger.debug("debug message")或者logger.info("info message"),看下面一个小例子:
import com.foo.Bar;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MyApp {
static Logger logger = Logger.getLogger(MyApp.class.getName());
public static void main(String[] args) {
// BasicConfigurator replaced with PropertyConfigurator.
PropertyConfigurator.configure(args[0]);
logger.info("Entering application.");
Bar bar = new Bar();
bar.doIt();
logger.info("Exiting application.");
}
}
转载于:https://blog.51cto.com/javaworker/183565
相关文章:

解决:无法创建该DNS 服务器的委派
第一次安装AD DNS的时候,你可能遇到以下的提示,无法创建该DNS 服务器的委派,这是一个提示,而不是一个报错。 以下是详细的说明。 将具有 DNS 服务器的新 Windows Server 2008 或 Windows Server 2008 R2 域控制器安装到 treyr…

SQL to Elasticsearch java code
把Elasticsearch当成Database用,因为Elasticsearch不支持SQL,就需要把SQL转换成代码实现。 1.按某个field group by查询count SELECT fieldA, COUNT(fieldA) from table WHERE fieldC "hoge" AND fieldD "huga" AND fieldB…

【转载】linux静态链接库与动态链接库的区别及动态库的创建
这篇文章对于动态库的概念及使用介绍的很不错,故收藏了。一、引言通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library&a…

买不到回家的票,都是“抢票加速包”惹的祸?
作者 | 屠敏来源 | CSDN(ID:CSDNNews)距离国家法定春节假日不足一个月,且首批除夕票已于近日正式开售。但万万没想到,当人、钱、手机、PC、iPad 万事俱备之际,东风刮得太快,眼巴巴盯着将于整点开…

HTSRealistic missions 10:Holy Word High School
这到题说实在的挺难。。。首先进入页面,进去后查看源代码发现有个空图片,图片是个链接,链接到staff.php。点击进入要求用户名密码,尝试注入,无效在来至主页,有个staff list的链接,点进去&#x…

Makefile的东西
宏定义: 1. Makefile中直接定义宏 OBJECTSfilea.o fileb.o filec.o #定义宏 Zfiled.oprog: $(OBJECTS) #引用宏cc $(OBJECTS) -o prog #我的机子环境中需要4个tab键prog1: $Z #引用宏,单个字符无需加园括号cc $Z -o prog12. 在make命令之后带有新的宏定…

TensorFlow 2.0开发者预览版发布
整理 | Jane出品 | AI科技大本营从去年 8 月 Google 公开发布消息正在研发 TensorFlow 2.0 ,让我们在 12 月 提前看到了一些 高级 API 的变化,今天我们终于等来了“tf-nightly-2.0”,一个 TensorFlow 2.0 开发者预览版。在今天 Wicke 的邮件中…

DOCKER OVERLAY NETWORK consul 注册
下载 consul 二进制包并启动 wget https://releases.hashicorp.com/consul/0.9.2/consul_0.9.2_linux_amd64.zip unzip consul_0.9.2_linux_amd64.zip mv consul /usr/bin/consul && chmod x /usr/bin/consul nohup consul agent -server -bootstrap -ui -data-dir /va…

怎么写shell脚本才能不耍流氓?
1、不记录日志的 SHELL 脚本就是耍流氓! 我们经常在工作中会遇到一个苦恼的事情,一个 Shell 脚本到底干了什么,什么时候开始执行,什么时候结束的。尤其是数据库备份,我们想知道我们的 MySQL 数据库备份时间。所以给脚本…

透过腾讯张潼离职事件,看AI研究院如何才算成功?
作者 | 洪亮劼编辑 | 琥珀【AI科技大本营导读】近日腾讯 AI Lab 第一负责人张潼博士的离职事件,让不少圈内人士对企业 AI 研究院/实验室的定位、落地能力等问题进行了深刻思考和讨论。据最新消息,张潼未来将回到学界,继续 AI 领域的学术研究&…

java vs .net
... vs paramsjavaprivatestaticintsumUp(int... values) { intsum 0; for(inti 0; i < values.length; i) { sum values[i]; } returnsum; } .netparams 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力它在只能出现一次并…

#QCon# Devops
今天参加了QCon2011 杭州。听了百度项目管理部的乔梁关于“Devops”的分享。比如如下: continuous integration —— Dev , QA agile —— Business,Dev,QA devops —— Dev,QA,Ops Devops Culture Too…

雷军的100亿计划:不服就干,生死看淡
图片来自小米官网整理 | 琥珀出品 | AI 科技大本营1 月 10 日,红米品牌正式独立。11 日,雷军在小米年会上宣布,2019 年,小米将正式启动“手机AIoT”双引擎战略,作为小米未来五年的核心战略。同时,未来 5 年…

cppcheck源码学习(一)
今天整理了下cppcheck的源码结构,为什么通过写一个个子文件就能够扩展cppcheck的功能呢? 看了下代码,并通过简化代码,略懂一二了。 首先我们定义一个基类test.h,只定义一个头文件足够: #ifndef TESTH #defi…

产品与技术优势发威 用友U9截击SAP ORACLE
随着金融危机的全面爆发,实体经济的冬天也随之而来。也正是金融危机,使得多年以来一直高调占据媒体头条的管理软件厂商们略显低迷,使一直剑拔弩张的中国管理软件市场,进而升级为一场“血腥四溅的肉搏”。<?xml:namespace pref…

oracle中的exists 和 not exists 用法详解
from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.htmloracle中的exists 和 not exists 用法详解 (2009-05-14 16:58:18) 有两个简单例子,以说明 “exists”和“in”的效率问题1) select * from T1 where exists(select 1 from T2 where T1.aT2.a)…

清华北大“世界排名断崖式下跌”?
作者 | 琥珀出品 | AI 科技大本营为什么人们疯狂地爱着排名?基本每过一年公布的全球大学排行榜,都会吸引不少的利益相关方甚至吃瓜群众的集体关注。每每此时,网络上泛滥着的却是眼花缭乱、无法令人辨别真假的数字依据,甚至是“专家…

#Qcon# 分享
明天被领导要求分享Qcon体会,实在是件不怎么容易的事情。Qcon这样的企业开发大会,很多东西必须要实际应用过才能深有体会,泛泛的谈似乎又觉得乏味。好吧,泛一下就泛一下吧,总比废话要强(上一句是我认为的废话)。 第二天…

判断一个数为多少位 比如 3 是 1位 102 是3位。
12345678910111213141516//判断一个数为多少位 比如 3 是 1位 102 是3位。#include <iostream>using namespace std; int main() {int a; cout<<"input a num"<<endl; cin>>a; int t1; for(int i10;i<10000000;i*10,t) if(a<i) brea…

完成CitrixVDI架构了解及部署测试
很是不错,经过近两周时间对CitrixVDI架构的学习,有了初步的了解和认识,同时,也在家中完成了整个体系的部署实验。由于公司正在使用着VMware的VDI(Viewe3.0),又在测试CitrixVDI,使两者终于有了直接的对比&am…

keepalive
高可用解决方案: heartbeat corosync cman keepalived 前面我们讲解了,LVS(负载均衡器)、Heartbeat、Corosync、Pacemaker、Web高可用集群、MySQL高可用集群、DRDB、iscsi、gfs2、cLVM等,唯一没有讲解的就是LVS可用&a…

普元王葱权:数字化时代需要新一代的大数据应用平台架构
记者 | 杨丽出品 | AI 科技大本营(rgznai100)2018 年 12 月 6 日,北京新云南皇冠假日酒店,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的 2018 中国大数据技术…

Agile DSL Development in Ruby 笔记
pdf见:http://obiefernandez.com/presentations/obie_fernandez-agile_dsl_development_in_ruby.pdf 1. What is DSL ——designed for a specific domain ——captures jargon in executable form ——can be internal or external 2. How to design Ruby DSL (…

人生的出口。在哪
清晨,雨停了。到处都是滴滴答答的雨滴声。似乎这场空洞漫长的过程一直在延续着。也不知道是为什么。在下完雨之后。自己的心情会特别的低落沉重。似乎经历了一场浩劫。没有太多的言语可以去描述。只有自己内心乏味的明白那些含义深刻的东西。约了好友。我迟到了十多…

zabbix专题:第十一章 zabbix之SNMP方式监控
(SNMP基本都是监控网络设备,本文介绍点理论知识) 概述 如果我们需要监控打印机、路由器、UPS等设备,肯定不能使用zabbix agentd,因为他们不能安装软件的,还好他们一般都支持SNMP协议,这样我可以使用SNMP来监控他们.如果你希望使用SNMP agent来…

Some Rules from wrting your own dsl with ruby
来自:http://blog.nofail.de/2010/02/writing-your-own-dsl-with-ruby/ Some Rules from wrting your own dsl with ruby 1. let the user choose how to use it all implemented methods return the object instance itself,so one can chain method calls for con…

免费报名 | 微软全双工语音对话以及在智能硬件上的应用
微软小冰第六代发布会上正式宣布上线全新的共感模型,同时也开始公测一种融合了文本、全双工语音与实时视觉的新感官。这项新技术可以实时预测人类即将说出的内容,实时生成回应,并控制对话节奏,从而使长程语音交互成为可能。而采用…

文件服务器迁移
不论大小,几乎每个公司都有自己的文件服务器,或者简单点的共享文件夹。随着数据的爆炸式增长,以及天长日久累积下来,数据量往往在一年两之后就超出服务器的容量。要解决这个问题,首先当然是做好数据管理,用…

Windows脚本初探之PowerShell流程控制if
Windows Powershell中if语句为可以为一下三种形式,只用表达式为True时才执行相应花括号中的命令语句/块: 示例1: 1234if (表达式1) { 命令语句/块1 } 示例2: 12345678if (表达式1) { 命令语句/块1 } else{ 命令语句/块2 } 示例3&a…

“万人迷”小冰背后的AI故事
作者 | Jane出品 | AI科技大本营从 2014 年的夏天小冰出现在我们的视野到今天,谈到小冰,你的第一印象是什么?一款可爱、萌萌哒的聊天机器人?一款随时在你身边,可以帮你做一些场景任务的语音助手?如果说&…