log4j2搭建记录

mac2022-06-30  45

  今天新建了一个项目,自己弄的小玩意,想要做的正式点,就想引入日志。就想到了log4j2,经过几个小时的努力,还真的可以用了,下面就记录一下我是怎么做的。

  下面是总的结构:

  下面是MAVEN依赖:

<!-- log配置:Log4j2 + Slf4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.2</version> </dependency> <dependency> <!-- 桥接:告诉Slf4j使用Log4j2 --> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.2</version> </dependency> <dependency> <!-- 桥接:告诉commons logging使用Log4j2 --> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency>

 

  下面是测试代码:

  下面是输出结果

  下面就来说一下是怎么做的。

  我用的是LOG4J2和SLF4J来做的日志系统,关于log4j2和slf4j及更早的log4j,有兴趣的可以自己找资料看一下。

  下面是我参考的log4j2和slf4j的例子:

  http://blog.csdn.net/clementad/article/details/44625787

   下面是我参考的配置的说明:

  https://www.cnblogs.com/hafiz/p/6170702.html

  https://www.cnblogs.com/garfieldcgf/p/5817923.html

  下面是我参考的输出到指定文件的说明:

  https://www.cnblogs.com/jessezeng/p/5144317.html

  下面是拓展,不使用配置文件,动态生成logger对象

  http://www.importnew.com/21079.html

  引入了JAR包或依赖后,配置好以后,就可以使用了。下面就说一下我是怎么配置的:

  我的配置文件是这样的:

  

<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status="WARN" monitorInterval="30">   <!--定义的属性--> <Properties> <Property name="log.basedir">logs</Property> <Property name="log.tempdir">temp</Property> <Property name="log.errordir">error</Property> <Property name="log.warndir">warn</Property> <Property name="log.infodir">info</Property> <Property name="log.debugdir">deubg</Property> <Property name="log.layout">[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n</Property> <Property name="log.templayout">%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n</Property> </Properties> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <console name="Console" target="SYSTEM_OUT"> <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/> <!--输出日志的格式--> <PatternLayout pattern="${log.layout}"/> </console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--> <File name="TempLog" fileName="${log.basedir}/${log.tempdir}/temp.log" append="false"> <PatternLayout pattern="${log.templayout}"/> </File> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFileInfo" fileName="${log.basedir}/${log.infodir}/info.log" filePattern="${log.basedir}/${log.infodir}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <!--这个的作用是只输出info级别的日志到指定文件--> <Filters> <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="${log.layout}"/> <Policies>          <!--策略:时间策略--> <TimeBasedTriggeringPolicy/>          <!--策略:文件大小策略,超过指定大小后创建新文件--> <SizeBasedTriggeringPolicy size="100MB"/> </Policies>          <!--最多创建的文件数量--> <DefaultRolloverStrategy max="20"/> </RollingFile> <RollingFile name="RollingFileWarn" fileName="${log.basedir}/${log.warndir}/warn.log" filePattern="${log.basedir}/${log.warndir}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="${log.layout}"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --> <DefaultRolloverStrategy max="20"/> </RollingFile> <RollingFile name="RollingFileError" fileName="${log.basedir}/${log.errordir}/error.log" filePattern="${log.basedir}/${log.errordir}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="${log.layout}"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <DefaultRolloverStrategy max="20"/> </RollingFile> <RollingFile name="RollingFileDebug" fileName="${log.basedir}/${log.debugdir}/debug.log" filePattern="${log.basedir}/${log.debugdir}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout pattern="${log.layout}"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <DefaultRolloverStrategy max="20"/> </RollingFile> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!--过滤掉spring和mybatis的一些无用的DEBUG信息, 这里没有用到--> <!-- <logger name="org.springframework" level="INFO"></logger> <logger name="org.mybatis" level="INFO"></logger> --> <root level="all"> <appender-ref ref="RollingFileDebug"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> <appender-ref ref="Console"/> <appender-ref ref="TempLog"/> </root>     <!--下面的两个日志不会同时记录到root日志中--> <Logger name="console" level="error" additivity="false"> <AppenderRef ref="Console"/> </Logger> <Logger name="tempLog" level="all" additivity="false"> <AppenderRef ref="TempLog"/> </Logger> </loggers> <!-- 格式化符号说明: %p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。 %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。 %r:输出自应用程序启动到输出该log信息耗费的毫秒数。 %t:输出产生该日志事件的线程名。 %l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。 %c:输出日志信息所属的类目,通常就是所在类的全名。 %M:输出产生日志信息的方法名。 %F:输出日志消息产生时所在的文件名称。 %L::输出代码中的行号。 %m::输出代码中指定的具体日志信息。 %n:输出一个回车换行符,Windows平台为"rn",Unix平台为"n"。 %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 %%:输出一个"%"字符。 另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如: 1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。 2)%-20c:"-"号表示左对齐。 3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。 --> </configuration>

  最后的日志结构

 

  大致就是这么多内容了,有兴趣的可以自己试一下。

转载于:https://www.cnblogs.com/liunianfeiyu/p/8294037.html

最新回复(0)