惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
T
Tailwind CSS Blog
美团技术团队
雷峰网
雷峰网
The Cloudflare Blog
S
SegmentFault 最新的问题
博客园 - Franky
C
Cisco Blogs
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
C
Comments on: Blog
Last Week in AI
Last Week in AI
Apple Machine Learning Research
Apple Machine Learning Research
L
Lohrmann on Cybersecurity
Latest news
Latest news
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
AWS News Blog
AWS News Blog
T
The Exploit Database - CXSecurity.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
LINUX DO - 热门话题
K
Kaspersky official blog
N
Netflix TechBlog - Medium
The Hacker News
The Hacker News
A
Arctic Wolf
Recent Announcements
Recent Announcements
Vercel News
Vercel News
B
Blog RSS Feed
C
CERT Recently Published Vulnerability Notes
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Spread Privacy
Spread Privacy
C
Cybersecurity and Infrastructure Security Agency CISA
Project Zero
Project Zero
Simon Willison's Weblog
Simon Willison's Weblog
量子位
腾讯CDC
I
Intezer
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
GRAHAM CLULEY
S
Schneier on Security
Y
Y Combinator Blog
Know Your Adversary
Know Your Adversary
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
L
LangChain Blog
有赞技术团队
有赞技术团队
D
Darknet – Hacking Tools, Hacker News & Cyber Security

博客园 - csdnexpert

美国程序员Peter:落脚北京只因这里的胡同 不是冷饭的冷饭:重评芙蓉姐姐现象 从早晨8点到晚上12点:WebEx合肥CTO的一天 转胡一虎Blog:父亲是我生命中的永恒 十年后,ELM会不会创造SOA现在所创造的局面? 来京两载,今日入清华读书,记一笔 传媒人应该具备的素质:批判 理性 正气 异国也有欢乐:北京Linux User Group探访实录 解释传统与敏捷方法最贴切的故事:大象与猴子 媒体的关键还是在于“软件”(人与规范) “Web开发之华山论剑”制作花絮与推荐导读 利用Radrails开发Ruby on Rails程序入门指南 “悲欣交集”的《开源大本营》制作之路 Alistair讲座的几点感受:纠正对敏捷方法的误解 在Eclipse里实现Ant自动编译 Java之父Gosling:Java没有受到PHP、Ruby或C#的威胁 PC-cillin 2005网络安全版使用简评 为什么刘彻会成为一代名君? 有选择才精彩 到哪里都是从零开始 可怜的微软与项目管理经典图解 从对一篇文章的修改看写作中的主题把握 谁说做软件测试没有好的前途?反驳之 《程序员》第9期:面对多核时代 我们以何应对? 8月的最后一天,我们开赴日照前线 Java Transaction Design Strategies推荐阅读 温总理对读书和思考问题的回答 共享软件大鳄来华抢人 是机遇还是挑战? 只有资源共享 中国共享软件才能突破性发展 又可以写Blog了 心里竟有点小小的激动 反射机制与系统耦合实例详解 事件驱动模型实例详解(Java篇) 商业项目应该向开源项目学习什么? 开源的软件+商业的服务=? 封印的武士 测试Google的网络Office——Writely 《男人装》2006.05 未来技术杂志会走向哪里? 评评点点,程序员的2006世界杯 终于理解了我的作者 你知道的Java,和你不知道的Java [投票]3·15消费者日 《程序员》杂志之现状调查 三言二拍 Eclipse+Tomcat实现Mysql数据库连接 解决在Eclipse中配置JBoss、Tomcat等插件时遇到的问题 IntelliJ IDEA使用技巧一览表 我喜欢使用IntelliJ Idea的25个理由 新帆起航,目标新大陆,感谢大家.... 6.26南汇校园行 面向对象的授课感想 集合框架的授课感想 反射在Java Swing中的应用 从杭州到北京 华为“新同事文化”:爱你的同事如兄弟 读书的快乐 闻听06年研究生收费有感 用创新产品支撑流体计算 杂拌儿:歪评百度牵手MTV、雅虎推出优化IE7现象 有钱的IBM 有争议的开发者大会 7月最后一天脑袋里的杂事 2006-IBM开发者大会现场组图与技术点(部分) 火锅论坛:要团队不要群体 中国软件的井喷时代 热烈庆祝CSDN 2006年中大会顺利闭幕 听同学谈有中国特色的软件营销模式 马云于“赢在中国”的一些讲话 看图识性格,蛮有意思的,累的时候玩一下:) 8月19日BBUG:电信技术开发经验分享与前景展望 Yahoo!新成立Python开发者中心 推动Python发展 也谈如何举办一场成功的技术讲座? 不满SourceForge服务 JRuby迁移至CodeHaus 看完《天狗》,我对社会充满了失望 从写Blog看技术人员成长6要素 再次慨叹生命的脆弱,我辈当惜之 急雨、泥土与睡觉 Google继续扩张,“魔爪”伸向服务器 感慨国内技术网站的环境 外包,从拧螺丝钉开始 史上最大规模的Agile开源项目Callisto发布 畅快、郁闷、遗憾 阿根廷,让我如何不爱你? 好笑的那几个小时 人是应该有长远目标的 庆祝阿根廷挺进八强 博客究竟能做什么? 对Web标准的9大误解 Slashdot热点一览 Blogger的痛心事——没人回贴 一个责任编辑的日记 你可以赚钱,但你赚不来时间 印度软件外包发展简记 那一段情系列之一:Fangfang 从《读库》关于“报人”文章感叹今日技术媒体 Mop研发团队:网络时代的技术偏执狂(全文) DevCo专家李维推荐的学习方法 英雄迟暮,一声长叹,且看10个可怜的技术天才 《程序员》7月刊即将上市 10大看点值得关注 把软件外包给中国,放心吗? 我也是个博客青苹果 DirectX 10后面的微软牛人们 参加IBM开发者大会前一天
Log4j日志管理系统简单使用说明
csdnexpert · 2007-12-17 · via 博客园 - csdnexpert

Log4j日志管理系统简单使用说明 

    Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:

1、 Loggers

    Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。

Java程序举例来说:

//建立Logger的一个实例,命名为“com.foo”

Logger  logger = Logger.getLogger("com.foo");

//设置logger的级别。通常不在程序中设置logger的级别。一般在配置文件中设置。

logger.setLevel(Level.INFO);

Logger barlogger = Logger.getLogger("com.foo.Bar");

//下面这个请求可用,因为WARN >= INFO

logger.warn("Low fuel level.");

//下面这个请求不可用,因为DEBUG < INFO

logger.debug("Starting search for nearest gas station.");

//命名为“com.foo.bar”的实例barlogger会继承实例“com.foo”的级别。因此,下面这个请求可用,因为INFO >= INFO

barlogger.info("Located nearest gas station.");

//下面这个请求不可用,因为DEBUG < INFO

barlogger.debug("Exiting gas station search"); 

这里“是否可用”的意思是能否输出Logger信息。 

    在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名字。一般情况下建议以类的所在位置来命名Logger实例,这是目前来讲比较有效的Logger命名方式。这样可以使得每个类建立自己的日志信息,便于管理。比如:

static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());

2、 Appenders

    禁用与使用日志请求只是Log4j其中的一个小小的地方,Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。

其语法表示为:

org.apache.log4j.ConsoleAppender(控制台),


org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

配置时使用方式为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN

这样就为日志的输出提供了相当大的便利。

3、 Layouts

    有时用户希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。

其语法表示为:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

配置时使用方式为:

     log4j.appender.appenderName.layout =       fully.qualified.name.of.layout.class
     log4j.appender.appenderName.layout.option1 = value1
     …
     log4j.appender.appenderName.layout.option = valueN
 
    以上是从原理方面说明Log4j的使用方法,在具体Java编程使用Log4j可以参照以下示例:
1、 建立Logger实例:
    语法表示:public static Logger getLogger( String name)
    实际使用:static Logger logger = Logger.getLogger   (ServerWithLog4j.class.getName ()) ;
2、 读取配置文件:
    获得了Logger的实例之后,接下来将配置Log4j使用环境:
    语法表示:
    BasicConfigurator.configure():自动快速地使用缺省Log4j环境。
    PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。
    DOMConfigurator.configure(String filename):读取XML形式的配置文件。
    实际使用:PropertyConfigurator.configure("ServerWithLog4j.properties");
3、 插入日志信息
    完成了以上连个步骤以后,下面就可以按日志的不同级别插入到你要记录日志的任何地方了。
    语法表示:
    Logger.debug(Object message);
    Logger.info(Object message);
    Logger.warn(Object message);
    Logger.error(Object message);
    实际使用:logger.info("ServerSocket before accept: " + server);
 
    在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用,具体如下:
1、 配置根Logger,其语法为:
    log4j.rootLogger = [ level ] , appenderName, appenderName, …
这里level指Logger的优先级,appenderName是日志信息的输出地,可以同时指定多个输出地。如:log4j.rootLogger= INFO,A1,A2
2、 配置日志信息输出目的地,其语法为:
    log4j.appender.appenderName = fully.qualified.name.of.appender.class
    可以指定上面所述五个目的地中的一个。
3、 配置日志信息的格式,其语法为:
    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
    这里上面三个步骤是对前面Log4j组件说明的一个简化;下面给出一个具体配置例子,在程序中可以参照执行:
    log4j.rootLogger=INFO,A1
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=
                                        %-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
    这里需要说明的就是日志信息格式中几个符号所代表的含义:
    -X号: X信息输出时左对齐;
    %p: 日志信息级别
    %d{}: 日志信息产生时间
    %c: 日志信息所在地(类名)
    %m: 产生的日志具体信息
    %n: 输出日志信息换行
 
根据上面的日志格式,某一个程序的输出结果如下:
0    INFO  2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=14953