2022-05-11 Log4j 使用&Google-option使用

网友投稿 249 2022-11-19

2022-05-11 Log4j 使用&Google-option使用

Log4j使用

概述

Log4J 是 Apache 的一个开源项目。通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。官网: ​​官网连接​​

3大组件

Log4J主要由Logger(日志记录器)、Appender(输出端)和 Layout(日志格式化器)组成。Logger控制日志的输出级别与日志是否输出;Appender指定日志的输出方式(ConsoleAppender控制台、FileAppender文件、JDBCAppender等;Layout控制日志信息的输出格式(simple格式、HTML格式、PatternLayout自定义格式).

日志等级说明

1.Log4J 在 org.apache.log4j.Level 类中定义了:OFF < DEBUG < INFO < WARN < ERROR < FATAL < ALL2.可以简单地理解为级别越大越重要。 Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR、FATAL和ALL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。3.一般只使用4个级别,优先级从高到低为 ERROR > WARN > INFO > DEBUG。

目录

说明

ERROR

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

WARN

警告,即潜在的错误情形

INFO

一般在粗粒度级别上,强调应用程序的运行全程

DEBUG

一般用于细粒度级别上,对调试应用程序非常有帮助

配置log4j.properties

1.只需要在项目路径下新建log4j.properties配置文件,并配置日志的输出格式等信息,Log4J框架会自动的加载配置文件,并将配置信息设置到Logger中。2.log4j.rootLogger = [level], appenderName, appenderName, ... (level是错误级别,appenderName是输出目的地,本例设为Console,可以定义多个)

# 控制台输出配置log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayout# 如果使用PatternLayout布局就要指定的打印信息的具体格式ConversionPatternlog4j.appender.Console.layout.ConversionPattern=%d [%t] %p [%c] - %m%n#指定日志的输出级别与输出端log4j.rootLogger=DEBUG,Console #%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, #%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921 #%r: 输出自应用启动到输出该log信息耗费的毫秒数 #%c: 输出日志信息所属的类目,通常就是所在类的全名 #%t: 输出产生该日志事件的线程名 #%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。 #%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 #%%: 输出一个"%"字符 #%F: 输出日志消息产生时所在的文件名称 #%L: 输出代码中的行号 #%m: 输出代码中指定的消息,产生的日志具体信息 #%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行

程序中使用Log4j

项目中引入log4j的jar包添加配置文件log4j.properties代码中使用

import org.apache.log4j.Logger;public class Log4jTest { public static void main(String[] args) { Logger logger = Logger.getLogger(Log4jTest.class); logger.debug("这是debug"); logger.info("这是info"); logger.warn("这是warn"); logger.error("这是error"); logger.fatal("这是fatal"); }}

测试结果

E:\Develop\jdk8\bin\java.exe "-javaagent:E:\Develop\idea2018-3\IntelliJ IDEA 2018.3.6\lib\idea_rt.jar=61421:E:\Develop\idea2018-3\IntelliJ IDEA 2018.3.6\bin" -Dfile.encoding=UTF-8 -classpath E:\Develop\jdk8\jre\lib\charsets.jar;E:\Develop\jdk8\jre\lib\deploy.jar;E:\Develop\jdk8\jre\lib\ext\access-bridge-64.jar;E:\Develop\jdk8\jre\lib\ext\cldrdata.jar;E:\Develop\jdk8\jre\lib\ext\dnsns.jar;E:\Develop\jdk8\jre\lib\ext\jaccess.jar;E:\Develop\jdk8\jre\lib\ext\jfxrt.jar;E:\Develop\jdk8\jre\lib\ext\localedata.jar;E:\Develop\jdk8\jre\lib\ext\nashorn.jar;E:\Develop\jdk8\jre\lib\ext\sunec.jar;E:\Develop\jdk8\jre\lib\ext\sunjce_provider.jar;E:\Develop\jdk8\jre\lib\ext\sunmscapi.jar;E:\Develop\jdk8\jre\lib\ext\sunpkcs11.jar;E:\Develop\jdk8\jre\lib\ext\zipfs.jar;E:\Develop\jdk8\jre\lib\javaws.jar;E:\Develop\jdk8\jre\lib\jce.jar;E:\Develop\jdk8\jre\lib\jfr.jar;E:\Develop\jdk8\jre\lib\jfxswt.jar;E:\Develop\jdk8\jre\lib\jsse.jar;E:\Develop\jdk8\jre\lib\management-agent.jar;E:\Develop\jdk8\jre\lib\plugin.jar;E:\Develop\jdk8\jre\lib\resources.jar;E:\Develop\jdk8\jre\lib\rt.jar;E:\Develop\Hadoop-Idea-Dev\example-hdfs\target\classes;E:\Develop\apache-maven-3.6.1\repository\org\apache\hadoop\hadoop-common\3.1.4\hadoop-common-3.1.4.jar;E:\Develop\apache-maven-3.6.1\repository\org\apache\hadoop\hadoop-annotations\3.1.4\hadoop-annotations-3.1.4.jar;E:\Develop\jdk8\lib\tools.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\guava\guava\27.0-jre\guava-27.0-jre.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\guava\failureaccess\1.0\failureaccess-1.0.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;E:\Develop\apache-maven-3.6.1\repository\org\checkerframework\checker-qual\2.5.2\checker-qual-2.5.2.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\errorprone\error_prone_annotations\2.2.0\error_prone_annotations-2.2.0.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;E:\Develop\apache-maven-3.6.1\repository\org\codehaus\mojo\animal-sniffer-annotations\1.17\animal-sniffer-annotations-1.17.jar;E:\Develop\apache-maven-3.6.1\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;E:\Develop\apache-maven-3.6.1\repository\org\apache\commons\commons-math3\3.1.1\commons-math3-3.1.1.jar;E:\Develop\apache-maven-3.6.1\repository\org\apache\Log4jTest2022-05-12 10:12:06,561 [main] ERROR [Log4jTest] - 这是error2022-05-12 10:12:06,561 [main] FATAL [Log4jTest] - 这是fatal

Google-option使用

Google-option是Bazel Project中的命令行参数解析器。option程序包已拆分为一个单独的jar,可用于通用程序。GitHub:Option解析命令行参数。读取要采集的数据目录,生成上传任务,上传任务包含一个任务文件,该文件包含了要上传哪些文件到HDFS上。执行任务,读取要上传的任务文件,挨个将任务文件中的文件上传到HDFS。上传中、上传完毕需要给任务文件添加特别的标识。

安装

所谓安装就是在项目中引入Google-option的jar包

com.github.pcj google-options 1.0.0

Step1:首先创建参数实体类

类应提供与预期的命令行选项相对应的public字段;每个public字段都应使用@Option注释进行注释

Option注解参数说明

name:选项名称defaultValue:默认值abbrev:选项的单字符缩写help:使用信息的帮助字符串category:描述此选项所属的类别allowMultiple:一个标志,指示是否应允许选项类型在单个选项列表中多次出现。

import com.google.devtools.common.options.Option;import com.google.devtools.common.options.OptionsBase;import com.sun.tools.javac.util.List;public class ServerOption extends OptionsBase { @Option( name = "help", abbrev = 'h', help = "Prints usage info", defaultValue = "true" ) public boolean help; @Option( name = "host", abbrev = 'o', help = "The server Host", category = "startup", defaultValue = "" ) public String host; @Option( name = "port", abbrev = 'p', help = "The server Port", category = "startup", defaultValue = "8080" ) public int port; @Option( name = "dir", abbrev = 'd', help = "Name of directory to serve static files", category = "startup", allowMultiple = true, defaultValue = "" ) public List dirs;}

Step2:在main方法中解析参数

import com.google.devtools.common.options.OptionsParser;import java.util.Collections;public class Server { //在main方法中解析参数 public static void main(String[] args) { OptionsParser parser = OptionsParser.newOptionsParser(ServerOption.class); parser.parseAndExitUponError(args); ServerOption options = parser.getOptions(ServerOption.class); //isEmpty() 检查字符串是否为空或空的示例 为空true if (options.host.isEmpty() || options.port < 0 || options.dirs.isEmpty()) { printUsage(parser); return; } System.out.format("Starting server at %s:%d...\n", options.host, options.port); for (String dirname : options.dirs) { //format()格式化输出 System.out.format("\\--> Serving static files at <%s>\n", dirname); } } private static void printUsage(OptionsParser parser) { //输入java -jar server.jar OPTIONS; 运行jar文件 System.out.println("Usage: java -jar server.jar OPTIONS"); System.out.println(parser.describeOptions(Collections.emptyMap(), OptionsParser.HelpVerbosity.LONG)); }}

测试结果

E:\Develop\jdk8\bin\java.exe "-javaagent:E:\Develop\idea2018-3\IntelliJ IDEA 2018.3.6\lib\idea_rt.jar=57407:E:\Develop\idea2018-3\IntelliJ IDEA 2018.3.6\bin" -Dfile.encoding=UTF-8 -classpath E:\Develop\jdk8\jre\lib\charsets.jar;E:\Develop\jdk8\jre\lib\deploy.jar;E:\Develop\jdk8\jre\lib\ext\access-bridge-64.jar;E:\Develop\jdk8\jre\lib\ext\cldrdata.jar;E:\Develop\jdk8\jre\lib\ext\dnsns.jar;E:\Develop\jdk8\jre\lib\ext\jaccess.jar;E:\Develop\jdk8\jre\lib\ext\jfxrt.jar;E:\Develop\jdk8\jre\lib\ext\localedata.jar;E:\Develop\jdk8\jre\lib\ext\nashorn.jar;E:\Develop\jdk8\jre\lib\ext\sunec.jar;E:\Develop\jdk8\jre\lib\ext\sunjce_provider.jar;E:\Develop\jdk8\jre\lib\ext\sunmscapi.jar;E:\Develop\jdk8\jre\lib\ext\sunpkcs11.jar;E:\Develop\jdk8\jre\lib\ext\zipfs.jar;E:\Develop\jdk8\jre\lib\javaws.jar;E:\Develop\jdk8\jre\lib\jce.jar;E:\Develop\jdk8\jre\lib\jfr.jar;E:\Develop\jdk8\jre\lib\jfxswt.jar;E:\Develop\jdk8\jre\lib\jsse.jar;E:\Develop\jdk8\jre\lib\management-agent.jar;E:\Develop\jdk8\jre\lib\plugin.jar;E:\Develop\jdk8\jre\lib\resources.jar;E:\Develop\jdk8\jre\lib\rt.jar;E:\Develop\Hadoop-Idea-Dev\example-hdfs\target\classes;E:\Develop\apache-maven-3.6.1\repository\org\apache\hadoop\hadoop-common\3.1.4\hadoop-common-3.1.4.jar;E:\Develop\apache-maven-3.6.1\repository\org\apache\hadoop\hadoop-annotations\3.1.4\hadoop-annotations-3.1.4.jar;E:\Develop\jdk8\lib\tools.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\guava\guava\27.0-jre\guava-27.0-jre.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\guava\failureaccess\1.0\failureaccess-1.0.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;E:\Develop\apache-maven-3.6.1\repository\org\checkerframework\checker-qual\2.5.2\checker-qual-2.5.2.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\errorprone\error_prone_annotations\2.2.0\error_prone_annotations-2.2.0.jar;E:\Develop\apache-maven-3.6.1\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;E:\Develop\apache-maven-3.6.1\repository\org\codehaus\mojo\animal-sniffer-annotations\1.17\animal-sniffer-annotations-1.17.jar;E:\Develop\apache-maven-3.6.1\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;E:\Develop\apache-maven-3.6.1\repository\org\apache\commons\commons-math3\3.1.1\commons-math3-3.1.1.jar;E:\Develop\apache-maven-3.6.1\repository\org\apache\ServerUsage: java -jar server.jar OPTIONSOptions category 'misc': --[no]help [-h] (a boolean; default: "true") Prints usage infoOptions category 'startup': --dir [-d] (a string; may be used multiple times) Name of directory to serve static files --host [-o] (a string; default: "") The server Host --port [-p] (an integer; default: "8080") The server PortProcess finished with exit code 0

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:猪脸识别(附数据集)
下一篇:白天也能用,VEZ乐BOX-T微型投影仪体验评测
相关文章

 发表评论

暂时没有评论,来抢沙发吧~