目录结构:

D:\code\kongee\log4jtest>tree

卷 软件 的文件夹 PATH 列表

卷序列号为 000D-CD8E

D:.

├─.settings

├─bin

│ └─com

│ └─laolang

│ ├─cal

│ ├─hello

│ └─say

├─lib

├─log

└─src

└─com

└─laolang

├─cal

├─hello

└─say

D:\code\kongee\log4jtest>tree /f

卷 软件 的文件夹 PATH 列表

卷序列号为 000D-CD8E

D:.

│ .classpath

│ .project

│ build.properties

│ build.xml

├─.settings

│ org.eclipse.core.resources.prefs

│ org.eclipse.jdt.core.prefs

├─bin

│ │ log4j.properties

│ │

│ └─com

│ └─laolang

│ ├─cal

│ │ Cal.class

│ │

│ ├─hello

│ │ HelloWorld.class

│ │

│ └─say

│ Hello.class

├─lib

│ hamcrest-core-1.3.jar

│ junit-4.11.jar

│ log4j-1.2.17.jar

├─log

│ say.log

│ say.log.2015-11-08

│ say.log.2015-11-09

│ say.log.2015-11-10

└─src

│ log4j.properties

└─com

└─laolang

├─cal

│ Cal.java

├─hello

│ HelloWorld.java

└─say

Hello.java

D:\code\kongee\log4jtest> 代码:

com.laolang.cal.Cal

package com.laolang.cal;

import org.apache.log4j.Logger;

public class Cal {

public int add( int a, int b ){

logger.debug("加运算");

logger.info("加运算");

logger.warn("加运算");

logger.error("加运算");

logger.fatal("加运算");

return a + b;

}

public int minus( int a, int b ){

return a - b;

}

public int mult( int a, int b ){

return a * b;

}

public int divide( int a , int b ){

return a / b;

}

//创建logger

public static final Logger logger = Logger.getLogger(Cal.class);

} com.laolang.say.Hello

package com.laolang.say;

import org.apache.log4j.Logger;

public class Hello {

public void syaHello() {

System.out.println("Hello World");

logger.debug("hello");

logger.info("hello");

logger.warn("hello");

logger.error("hello");

logger.fatal("hello");

}

private static final Logger logger = Logger.getLogger(Hello.class);

// 不建议使用

// private static final Logger logger = Logger.getLogger("hello");

} com.laolang.hello.HelloWorld

package com.laolang.hello;

import com.laolang.cal.Cal;

import com.laolang.say.Hello;

public class HelloWorld {

public static void main(String[] args) {

String url = HelloWorld.class.getClassLoader().getResource("").getPath();

System.out.println("url:" + url);

if (-1 != url.lastIndexOf("build/classes/")) {

url = url.replace("build/classes/", "log");

}

if (-1 != url.lastIndexOf("bin/")) {

url = url.replace("bin/", "log");

}

System.out.println("url:" + url);

System.setProperty("log_dir", url);

Cal cal = new Cal();

cal.add(1, 3);

Hello hello = new Hello();

hello.syaHello();

}

} log4j.properties

log4j.appender.stout=org.apache.log4j.ConsoleAppender

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

log4j.appender.stout.layout.ConversionPattern=[%p](%l)--->%m(%d)%n

log4j.rootLogger=DEBUG, stout

#log4j.appender.fout=org.apache.log4j.FileAppender

log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender

log4j.appender.fout.datePattern='.'yyyy-MM-dd

#绝对路径名,不建议使用

#log4j.appender.fout.file=d:/hello.log

log4j.appender.fout.file=${log_dir}/say.log

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

log4j.appender.fout.layout.ConversionPattern=[%p](%l)---->%m(%d)%n

# 通过名称访问,不建议使用

#log4j.logger.hello=DEBUG, fout

log4j.logger.com.laolang.say=DEBUG, fout ant

build.properties

Main-class=com.laolang.hello.HelloWorld build.xml

基于类路径的classname来完成执行

运行结果:

D:\code\kongee\log4jtest>type log\say.log

[DEBUG](com.laolang.say.Hello.syaHello(Hello.java:10))---->hello(2015-11-08 21:34:50,932)

[INFO](com.laolang.say.Hello.syaHello(Hello.java:11))---->hello(2015-11-08 21:34:50,944)

[WARN](com.laolang.say.Hello.syaHello(Hello.java:12))---->hello(2015-11-08 21:34:50,945)

[ERROR](com.laolang.say.Hello.syaHello(Hello.java:13))---->hello(2015-11-08 21:34:50,946)

[FATAL](com.laolang.say.Hello.syaHello(Hello.java:14))---->hello(2015-11-08 21:34:50,947)

D:\code\kongee\log4jtest>ant execute

Buildfile: D:\code\kongee\log4jtest\build.xml

init:

[echo] 初始化完成!

copySrc:

[echo] 复制文件完成!

compile:

[echo] 编译完成!

execute:

[echo] 基于类路径的classname来完成执行

[java] url:/D:/code/kongee/log4jtest/build/classes/

[java] url:/D:/code/kongee/log4jtest/log

[java] [DEBUG](com.laolang.cal.Cal.add(Cal.java:8))--->加运算(2015-11-08 21:35:24,595)

[java] [INFO](com.laolang.cal.Cal.add(Cal.java:9))--->加运算(2015-11-08 21:35:24,603)

[java] [WARN](com.laolang.cal.Cal.add(Cal.java:10))--->加运算(2015-11-08 21:35:24,604)

[java] [ERROR](com.laolang.cal.Cal.add(Cal.java:11))--->加运算(2015-11-08 21:35:24,605)

[java] [FATAL](com.laolang.cal.Cal.add(Cal.java:12))--->加运算(2015-11-08 21:35:24,605)

[java] Hello World

[java] [DEBUG](com.laolang.say.Hello.syaHello(Hello.java:10))--->hello(2015-11-08 21:35:24,608)

[java] [INFO](com.laolang.say.Hello.syaHello(Hello.java:11))--->hello(2015-11-08 21:35:24,618)

[java] [WARN](com.laolang.say.Hello.syaHello(Hello.java:12))--->hello(2015-11-08 21:35:24,618)

[java] [ERROR](com.laolang.say.Hello.syaHello(Hello.java:13))--->hello(2015-11-08 21:35:24,619)

[java] [FATAL](com.laolang.say.Hello.syaHello(Hello.java:14))--->hello(2015-11-08 21:35:24,620)

BUILD SUCCESSFUL

Total time: 3 seconds

D:\code\kongee\log4jtest>type log\say.log

[DEBUG](com.laolang.say.Hello.syaHello(Hello.java:10))---->hello(2015-11-08 21:34:50,932)

[INFO](com.laolang.say.Hello.syaHello(Hello.java:11))---->hello(2015-11-08 21:34:50,944)

[WARN](com.laolang.say.Hello.syaHello(Hello.java:12))---->hello(2015-11-08 21:34:50,945)

[ERROR](com.laolang.say.Hello.syaHello(Hello.java:13))---->hello(2015-11-08 21:34:50,946)

[FATAL](com.laolang.say.Hello.syaHello(Hello.java:14))---->hello(2015-11-08 21:34:50,947)

[DEBUG](com.laolang.say.Hello.syaHello(Hello.java:10))---->hello(2015-11-08 21:35:24,608)

[INFO](com.laolang.say.Hello.syaHello(Hello.java:11))---->hello(2015-11-08 21:35:24,618)

[WARN](com.laolang.say.Hello.syaHello(Hello.java:12))---->hello(2015-11-08 21:35:24,618)

[ERROR](com.laolang.say.Hello.syaHello(Hello.java:13))---->hello(2015-11-08 21:35:24,619)

[FATAL](com.laolang.say.Hello.syaHello(Hello.java:14))---->hello(2015-11-08 21:35:24,620)

D:\code\kongee\log4jtest>

如果修改系统时间的话,会在log目录下有一个相对应的log文件,这里不再演示

记录:

使用log4j的步骤:

1、创建logger

public static final Logger logger = Logger.getLogger(ClassName.class); 2、编写日志

logger.debug("hello");

logger.info("hello");

logger.warn("hello");

logger.error("hello");

logger.fatal("hello"); 3、编写配置文件

3.1创建apender

log4j.appender.fout=org.apache.log4j.DailyRollingFileAppender

log4j.appender.fout.datePattern='.'yyyy-MM-dd     3.2设置layout

log4j.appender.fout.file=${log_dir}/say.log

log4j.appender.fout.layout=org.apache.log4j.PatternLayout     3.3设置输出格式

log4j.appender.fout.layout.ConversionPattern=[%p](%l)---->%m(%d)%n 4、设置日志输出级别

log4j.logger.com.laolang.say=DEBUG, fout

java log4j 实例_log4j使用例子 - 小代码2016的个人页面 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java连连看项目汇报_java连连看小项目 - osc_x4wlt5vu的个人空间 - OSCHINA - 中文开源技术交流社区...

    /* *本人也是刚入门,希望各位多多指教 *该项目主要代码在于连线 *1.2个连线没有拐弯 *2.2个连线有一个拐弯 *3.2个连线有2个拐弯 *采用递归算法 */ package llk; impo ...

  2. java 锁的类型_Java锁的种类 - shawnplaying的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java锁和并发需要结合在一块了理解,涉及到了多个话题. 本文主要参考了 http://ifeve.com/java_lock_see1/ 但是我认为原文中有某些错误,我在下面的代码中做了修改. 公平 ...

  3. java数组输出是地址_java数组输出 - SuperPcf的个人空间 - OSCHINA - 中文开源技术交流社区...

    java数组输出 输出一个数组中的元素,我们通常用for循环来做,比如: [java] view plaincopy在CODE上查看代码片派生到我的代码片 package test; public c ...

  4. java小兔跳铃铛,Java小知识 - 顾小兔2018的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java小知识 [TOC] (1)三种读取文件方法 URL url = this.getClass ().getResource ("/a.txt"); Resources.asC ...

  5. java狼追着羊跑的程序_写一个狼吃羊的小游戏 - osc_3xmkn220的个人空间 - OSCHINA - 中文开源技术交流社区...

    其实在2016年,我就准备写这个小游戏了.但是奈何当时没文化

  6. java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

  7. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  8. java web远程调试工具_java远程调试 - Dendy的个人页面 - OSCHINA - 中文开源技术交流社区...

    新接手的项目采用的是Maven作为编译管理工具,项目内容则是按子模块Module来划分.由于模块太多,且都比较大(基本上都能独立运行并负责处理一方面的业务),并采用Socket来进行模块之间的数据通信 ...

  9. java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...

    java类加载过程: 在我们代码中,一般就一个new的方法,就能够创建一个java的对象类,但在java虚拟机中 1:首先,我们需要判断该类是否已经在方法区中的常量池中有一个类的符号的引用存在,如果该 ...

最新文章

  1. php3.2手册中文版,Uploadify v3.2中文手册分享
  2. sql 自动增加排序 并且初始值是000001
  3. ansi编码_了解字符编码,不再恐惧文件乱码
  4. 接触Jenkins(Hudson)API,第1部分
  5. 遇到了消息堆积,但是问题不大
  6. python server酱_12306这是肿么了?开售一秒就抢完,如何用Python抢到回家车票?
  7. 漫威蜘蛛侠Mac动态壁纸
  8. Ubuntu14.04编译Opencv3.1错误:下载ippicv,解决方案
  9. C语言 结构体中的成员域偏移量
  10. 断线的风筝,该飘向哪里
  11. 华为面试题——压缩字符串
  12. P2P业务整体流程图
  13. LabVIEW如何将脚本插入Quick Drop
  14. 《浪潮之巅》内容整理
  15. 知乎APP 产品分析
  16. 《中国合伙人》经典台词:一个人迫于无奈之下的选择,往往是正确的。。。
  17. 自动投注c语言,yy七周年自动挂机
  18. java tongpaiyu danliantiao_五年级语文第一学期词语表
  19. 再寄小读者之数学篇[2014.07.01-2014.12.31]
  20. faiss search(检索)截断

热门文章

  1. db2存储过程简单写法
  2. 每天干攻防,都不会写驱动了
  3. java把含小数点的数字字符串转换为int类型
  4. 配置SQL Server 2008 R2 Reporting Services
  5. go 排序sort的使用
  6. 利用sdkman安装kotlin和java环境
  7. Linux命令行常用小结
  8. 《编写有效用例》阅读笔记04
  9. jmeter的逻辑控制器
  10. HTML5与CSS3权威指南.pdf7