上一篇我们观察了System.out.println()方式打印简单类对象信息的一些注意事项,本篇我们仍以Person类为例看一下Log4j下对这种对象的处理。

《二》采用Log4j打印对象信息:

首先引入Log4j的jar包,本篇采用的是

log4j

log4j

1.2.16

然后配置Log4j,把log4j.properties放到maven项目的resources目录下:

### 设置###

log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###

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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File =E:/test0serv/test01serv/logs/log.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = DEBUG

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

log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File =E:/test0serv/test01serv/logs/error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

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

log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

测试用例代码:

import org.apache.log4j.Logger;

public class Person {

private static Logger logger = Logger.getLogger(Person.class);

private int age;

private String name;

public Person() {

}

public Person(int age, String name) {

this.age = age;

this.name = name;

}

public static void main(String[] args) {

Person p = new Person(22, "Allen");

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

System.out.println(p);

System.out.println("org.apache.log4j.Logger:");

logger.info(p);

}

}

程序运行输出结果为:

System.out.println:

Person@17d0685f

org.apache.log4j.Logger:

[INFO ] 2018-08-05 18:51:47,458 method:Person.main(Person.java:22)

Person@17d0685f

生成的log中的信息如下图:

可以看出在Person类没有重写 toString()函数的情况下,Log4j的输出对象信息和System.out.println是一致的,都不能明确打印出对象的成员信息。下面我们重写Object类中的toString()函数:

import org.apache.log4j.Logger;

public class Person {

private static Logger logger = Logger.getLogger(Person.class);

private int age;

private String name;

public Person() {

}

public Person(int age, String name) {

this.age = age;

this.name = name;

}

@Override

public String toString() {

return "年龄:" + age + ";名字:" + name;

}

public static void main(String[] args) {

Person p = new Person(22, "Allen");

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

System.out.println(p);

System.out.println("org.apache.log4j.Logger:");

logger.info(p);

}

}

程序运行结果为:

System.out.println:

年龄:22;名字:Allen

org.apache.log4j.Logger:

[INFO ] 2018-08-05 19:03:33,970 method:Person.main(Person.java:27)

年龄:22;名字:Allen

log文档中也打印出了对象的信息:

下面我们删除重写的toString()函数,改成使用Lombok插件试一试效果:

import lombok.Data;

import org.apache.log4j.Logger;

@Data

public class Person {

private static Logger logger = Logger.getLogger(Person.class);

private int age;

private String name;

public Person() {

}

public Person(int age, String name) {

this.age = age;

this.name = name;

}

public static void main(String[] args) {

Person p = new Person(22, "Allen");

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

System.out.println(p);

System.out.println("org.apache.log4j.Logger:");

logger.info(p);

}

}

程序输出结果:

System.out.println:

Person(age=22, name=Allen)

org.apache.log4j.Logger:

[INFO ] 2018-08-05 19:07:38,808 method:Person.main(Person.java:23)

Person(age=22, name=Allen)

log文档中也有对应的信息:

经过测试,我们想说的是,在定义一个类时,如果没有使用Lombok类似功能的插件,最好按照JDK文档的建议,实现Object类中的toString()函数,这样在打印日志对象的时候,不会出现打印出“Person@17d0685f” 这样不清不楚的信息,而且非常不利于排查问题,当你排查问题正需要看到某个对象的信息,却发现这样的日志输出,恐怕会长叹一声吧,所以最好还是按照规范来,避免这种情况。

java 打印出了对象_Java打印对象信息(二)相关推荐

  1. Algs4-1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)

    1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列). public  class Test {     public static void main(String[] arg ...

  2. java常见对象_Java各种对象理解

    关于VO.PO的理解-java的(PO,VO,TO,BO,DAO,POJO)解释收藏 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就 ...

  3. java类怎么删除对象_java中对象的生成使用和删除

    请教大神,在java里,对象生成后,如何删除对象呢?请教大神,在java里,对象生成后,如何删除对象呢? 对象状态由JVM自动管理,GC线程自动回收无用对象,无需也不能自己删除对象. 请问在JAVA中 ...

  4. java input是关键字吗_Java中对象的串行化(Serialization)和transient关键字 - 金色阳光...

    Java中对象的串行化(Serialization)和transient关键字: 对象的串行化(Serialization) 一.串行化的概念和目的 1.什么是串行化 对象的寿命通常随着生成该对象的程 ...

  5. java class对象_java class对象

    RTTI 运行时类型信息 与 Reflect 反射 RTTI,Run Time Type Information,运行时类型信息. 要理解RTTI在java中的工作原理,必须知道 类型信息 在 运行时 ...

  6. php用打印出实心菱形,php打印实心菱形

    编程打印实心菱形的四种算法 刘雨玚 [期刊名称]<福建电脑> [年(卷),期]2016(032)004 [摘要]本文提出了编程打印实心菱形的四种算法,其中前三种方法都是将实 心菱形分为上下 ...

  7. inputstream转fileinputstream对象_Java Web--Servlet--HttpServletResponse对象

    HttpServletResponse对象 一.HttpServletResponse对象介绍 1.1.负责向客户端(浏览器)发送数据的相关方法 1.2.负责向客户端(浏览器)发送响应头的相关方法 1 ...

  8. 怎么用计算机打印出东西,如何用纸打印出细胞“计算机”?

    细胞墨水冲压工艺 近日,西班牙庞培法布拉大学(PFU)生物医学应用合成生物学研究团队的Sira Mogas-Díez.Eva Gonzalez-Flo和Javier Macía等人,通过纸上细胞打印, ...

  9. 用java怎么写三角形图案_Java 打印三角形图案

    以下是打印三角形图案的Java程序- 示例import java.util.*; public class Demo{ public static void main(String[] args){ ...

  10. java 泛型 与类反射_Java技能 —— 对象泛型以及类反射机制的应用

    一,泛型和反射的初识 Java泛型是JDK 5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型.简单的理解就是参数化类型,我们一开始就知道这个泛型T是Str ...

最新文章

  1. Zeal 离线API文档浏览器
  2. WIN7 64位系统下,右下角的声音和电源图标不见的解决办法
  3. Python 3.8 新特性全面解读
  4. 关于.net实现网站模板机制(非标签替换)
  5. ssh汉字乱码怎么办_ssh中文乱码解决
  6. adb server version (41) doesn‘t match this client (39); killing
  7. Script 入门实践
  8. 浅谈分布式一致性协议之2PC
  9. 数据库优化常用的途径(方法)
  10. node重命名文件名_node文件批量重命名
  11. 分享146个培训课件PPT模板,总有一款适合你
  12. 数据库系统概念第六版课后习题答案-第二章
  13. 离线数仓项目, 数仓理论(概要, 建模方法, 数仓分层, 模型介绍,元数据), 数仓设计(需求分析, 数据埋点, 指标体系, 架构设计(方案选型,逻辑架构, 物理环境, 命名规范))
  14. 美团设计模式在外卖营销业务中的实践-学习笔记(一)
  15. EXCEL:获取某列或得中最后一个非空单元格的行数和数值
  16. 英雄联盟更新完服务器维护,英雄联盟lol今天维护到什么时候结束 停服更新期间玩家是无法进入游戏...
  17. Python:打印星号
  18. 自然语言处理seq2seq模型实现人工智能对对联(基于TensorFlow框架)
  19. 计算机音乐我还是曾经那个少年,我还是曾经的那个少年什么歌曲
  20. oracle18c shard技术分享-安装部署

热门文章

  1. 第三次作业代码规范修改
  2. MongoDB进阶系列(12)——MongoDB 固定集合
  3. OpenSource.com 评出 2014 年十佳开源软件
  4. spring(12)
  5. 重磅推出Android4开发系列精品课程
  6. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之32---BREW PUSH 服务...
  7. 建立网站需要什么条件_教育学校网站建设有什么作用?学校建立网站为的是什么?...
  8. 安卓接入高德地图3dmap黑屏问题解决
  9. PHP可变变量($$)
  10. linux下设置set位权限,网络安全系列之四十 在Linux中设置SET位权限