首页天道酬勤,

,

张世龙 05-12 10:15 34次浏览

个人资料

zrdjd是Apache的开源项目(官网http://jakarta.apache.org/log4j )。 通过在项目中使用zrdjd,可以控制日志信息向控制台、文件、GUI组件以及数据库的输出。 可以控制各日志的输出格式。 通过定义日志的输出级别,可以更灵活地控制日志的输出过程。 对项目调试很有用。

组成

zrdjd主要由Loggers、Appenders和Layout组成。 在此,Loggers控制日志的输出级别和是否输出日志的Appenders指定日志的输出方法(输出到控制台、文件等); Layout控制日志信息的输出格式。

日志级别

zrdjd在org.apache.log4j.Level类中定义了七种日志级别: OFF、FATAL、ERROR、WARN、INFO、DEBUG和ALL。

关闭最高日志级别,关闭左右日志

FATAL会导致APP应用程序终止的错误

ERROR发生错误事件,但不影响系统的持续运行

WARN警告,即潜在的错误情况

INFO通常在粗粒度级别强调整个APP应用程序的执行

调试通常用于精细粒度级别,有助于调试APP应用程序

ALL最低级别,打开所有日志

注:通常只使用四个级别,按照优先级从高到低的顺序进行错误广域网信息调试

Appender (输出侧)

Appender用于指定日志的输出位置,也可以同时指定日志的输出位置。 Log4j的一般输出位置如下。

Layout (日志格式化程序) )。

快速启动

首先在maven中导入log4j的依赖:

log4j

log4j

1.2.17

创建Log4jTest类并测试Log4j的使用:

公共类zrdjdtest {

publicstaticvoidmain (字符串[ ] args ) {

获取Logger对象的实例

logger logger=logger.getlogger (zrdjdtest.class );

//使用默认的配置信息,不需要写log4j.properties

basic配置器. configure (;

//将日志输出级别设置为WARN。 这将复盖配置文件中设置的级别,仅打印日志级别高于WARN的日志

logger.setlevel(level.warn );

logger.debug (这是debug );

logger.info (这是info );

logger.warn (这是warn );

logger.error (这是error );

logger.fatal (这是fatal );

}

}

在本例中,首先使用logger.getlogger (log4test.class )创建logger实例,然后调用BasicConfigurator.configure )方法以使logger进行解码控制台的输出如下。

0 [ main ] warn com.Huang.log4j.zrdjdtest -这是warn

0 [ main ] warn com.Huang.log4j.zrdjdtest -这是error

0 [ main ] warn com.Huang.log4j.zrdjdtest -这是fatal

注:如果未调用BasicConfigurator.configure ()方法,则Log4j框架将在运行时加载项目路径下的log4j.properties配置文件,因此main函数(关于设定文件的使用将在后面叙述。 我们此时的项目中没有这个文件。 如果配置文件的名称不是log4j.properties,则可以在property configurator.configure (stringconfigfilename )中指定配置文件的名称。

使用格式化程序

更改zrdjdTest的代码:

公共类zrdjdtest {

publicstaticvoidmain (字符串[ ] args ) {

logger logger=logger.getlogger (zrdjdtest.class );

/p>

BasicConfigurator.configure();

HTMLLayout layout = new HTMLLayout();

// SimpleLayout layout = new SimpleLayout();

try {

FileAppender appender = new FileAppender(layout, "D:\\out.html", false);

logger.addAppender(appender);

//设置日志输出级别为info,这将覆盖配置文件中设置的级别,只有日志级别高于WARN的日志才输出

logger.setLevel(Level.WARN);

logger.debug("这是debug");

logger.info("这是info");

logger.warn("这是warn");

logger.error("这是error");

logger.fatal("这是fatal");

} catch (IOException e) {

e.printStackTrace();

}

}

}

首先创建一个HTML格式的格式化器(HTMLLayout),然后创建文件输出端(FileAppender)指定输出端的格式为 HTML 格式,这里我指定输出路径为 D 盘下的 out.html 文件。然后通过 logger.addAppender(appender) 将文件输出端加载到 Logger 中。运行 main 函数,在 D 盘下会生成一个 out.html 文件,打开文件,里面的信息就是代码中输出的日志信息:

log4j.properties配置文件的使用

上面使用代码的方式设置 Logger 的输出格式,这样在我们每个要输出日志的类上都得设置一遍配置未免也太麻烦了吧。有一种更加方便的方法,我们只需要在项目路径下新建 log4j.properties 配置文件,并配置日志的输出格式等信息,zrdjd 框架会自动的加载配置文件,并将配置信息设置到 Logger 中。最简单的配置文件如下:

# 控制台输出配置

log4j.appender.Console=org.apache.log4j.ConsoleAppender

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

log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

# 文件输出配置

log4j.appender.A = org.apache.log4j.DailyRollingFileAppender

log4j.appender.A.File = D:/log.txt #指定日志的输出路径

log4j.appender.A.Append = true

log4j.appender.A.Threshold = DEBUG

log4j.appender.A.layout = org.apache.log4j.PatternLayout #使用自定义日志格式化器

log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #指定日志的输出格式

log4j.appender.A.encoding=UTF-8 #指定日志的文件编码

#指定日志的输出级别与输出端

log4j.rootLogger=DEBUG,Console,A

在 log4j.properties 配置文件中,我们定义了日志输出级别与输出端,在输出端中分别配置日志的输出格式。

log4j 采用类似 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:

%m   输出代码中指定的日志信息

%p    输出优先级,及 DEBUG、INFO 等

%n    换行符(Windows平台的换行符为 "\n",Unix 平台为 "\n")

%r     输出自应用启动到输出该 log 信息耗费的毫秒数

%c    输出打印语句所属的类的全名

%t     输出产生该日志的线程全名

%d    输出服务器当前时间,默认格式为 ISO8601,也可以在后面指定格式。如:%d{yyyy年MM月dd日 HH:mm:ss}

%l     输出日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)

%F    输出日志消息产生时所在的文件名称

%L    输出代码中的行号

%x    输出和当前线程相关的 NDC(嵌套诊断环境)

%%   输出一个 "%" 字符

可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和魔幻的热狗的对其方式。如:

%5c    输出category名称,最小宽度是5,category<5,默认的情况下右对齐

%-5c   输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格

%.5c   输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格

%20.30c   category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉

然后编写测试类 zrdjdTest.java :

public class zrdjdTest {

public static void main(String[] args) {

//获取Logger对象的实例

Logger logger = Logger.getLogger(zrdjdTest.class);

logger.debug("这是debug");

logger.info("这是info");

logger.warn("这是warn");

logger.error("这是error");

logger.fatal("这是fatal");

}

}

程序运行后控制台输出魔幻的热狗:

2018-07-12 14:36:36,114 [main] WARN  [com.huang.log4j.zrdjdTest] - 这是warn

2018-07-12 14:36:36,114 [main] ERROR [com.huang.log4j.zrdjdTest] - 这是error

2018-07-12 14:36:36,114 [main] FATAL [com.huang.log4j.zrdjdTest] - 这是fatal

并会在 D 盘生成一份 log.txt 文件。魔幻的热狗内容如下:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

,