Java 日志工具Log4j的简单配置和使用_留恋逝去的残梦的博客-程序员宅基地

技术标签: 编程分享  

Java 日志工具Log4j的简单使用

1. 简介

Log4j是Java的一个日志工具,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

2. 使用

这里通过Maven引入Log4j的依赖包

2.1 Idea新建Maven工程, 配置Maven依赖项

使用Idea工具新建一个Maven工程,建好的工程目录如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hNzDzB0c-1584256042975)(13BD6F0E-E99D-4258-95CD-C98B2F63191E.png)]

其中,pom.xml是Maven的工程配置文件,我们需要编写此文件来向工程添加外部依赖包。(如果Idea提示是否导入工程,这里选择Auto import)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLJOBoOY-1584256042976)(F694F6DD-7E3C-49FE-B305-2FD36EE879F6.png)]

<dependencies>
        <!-- log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

Log4j的最新版Maven依赖配置项可以在mvnrepository.com搜索得到。

2.2 示例

2.2.1 配置示例

Log4j使用src/main/resources/log4j.properties作为配置文件。内容如下:

###Log4j设置###
log4j.rootLogger=debug,stdout,D
### 输出信息到控制台 ###
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}  [ %t ]  %m%n
### 输出DEBUG 级别以上的日志到日志文件 ###
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=./log/debug.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

2.2.2 使用示例

LogUtils类

import org.apache.log4j.Logger;

/**
 * LogUtils
 * 日志输出类
 * @author ScorpioDong
 * @version 1.0
 * @date 2020/3/14 9:48 PM
 */
public class LogUtils {
    
    private static final Logger debugLogger = Logger.getLogger("DEBUG");
    private static final Logger infoLogger = Logger.getLogger("INFO");
    private static final Logger warnLogger = Logger.getLogger("WARN");
    private static final Logger errorLogger = Logger.getLogger("ERROR");

    /**
     * 输出debug级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logDebug(Object msg) {
    
        debugLogger.debug(msg);
    }

    /**
     * 输出info级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logInfo(Object msg) {
    
        debugLogger.info(msg);
    }

    /**
     * 输出warn级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logWarn(Object msg) {
    
        debugLogger.warn(msg);
    }

    /**
     * 输出error级别的日志
     *
     * @param msg Object 要输出的消息
     */
    public static void logError(Object msg) {
    
        debugLogger.error(msg);
    }
}

测试

public static void main(String[] args) {
    
        LogUtils.logDebug("Hello1");
        LogUtils.logInfo("Hello2");
        LogUtils.logWarn("Hello3");
        LogUtils.logError("Hello4");
    }

执行结果:

[DEBUG] 2020-03-15 15:00:48,441  [ main ]  Hello1
[INFO ] 2020-03-15 15:00:48,443  [ main ]  Hello2
[WARN ] 2020-03-15 15:00:48,443  [ main ]  Hello3
[ERROR] 2020-03-15 15:00:48,443  [ main ]  Hello4

日志文件信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DOazD051-1584256042977)(854337AD-1DFA-4D01-BB1F-8B21DFD3DF83.png)]

3 Log4j配置介绍

Log4j有三个主要的组件:Loggers(日志记录器),Appenders (日志的输出源)和Layouts(日志的布局)。

3.1 Loggers

Loggers可以理解为日志的级别,Log4j分为5个级别,从轻到重依次为:DEBUG、INFO、WARN、ERROR和FATAL。
Log4j可以在代码中调用相应级别的日志输出方法实现日志的记录。特别的规则:Log4j可以配置全局日志等级,最终输出的日志登记不低于全局日志等级。简单来说,全局日志等级为DEBUG则,五种日志全部记录,全局日志等级为WARN则会忽略DEBUG和INFO等级日志。

3.2 Appenders

Appenders可以理解为日志将要输出的地方的配置。Log4j允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
常用配置项如下:

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每隔一段时间产生一个新的日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3.3 Layouts

Layouts可以理解为日志以怎样的格式输出。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。
常用配置项如下:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

4 Log4j详细配置

4.1 rootLogger配置

log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
  • level:设定全局日志等级,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。
  • appenderName: 日志信息要输出到哪里,名字可以随意取。可以同时指定多个输出目的地,用逗号隔开。

4.2 appender的详细配置

配置appender的输出方式
log4j.appender.appenderName = org.apache.log4j.ConsoleAppender

常用配置项如下:

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每隔一段时间产生一个新的日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

不同输出方式的详细配置 (可选)

ConsoleAppender(控制台)
  • Threshold=WARN:指定该输出方式的最低输出级别,默认DEBUG。
  • ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
  • Target=System.err: 指定输出流,默认System.out。
FileAppender(文件)
  • Threshold=WARN:同上。
  • ImmediateFlush=true:同上。
  • Append=false:设置文件是覆盖写还是添加写,false为覆盖,true是添加。默认为true。
  • File=./log/logging.log4j:指定消息输出到工程log文件夹的logging.log4j文件中。
DailyRollingFileAppender(固定时间间隔产生一个日志文件)
  • Threshold=WARN:同上。
  • ImmediateFlush=true:同上。
  • Append=false:同上。
  • File:同上。
  • DatePattern=’.'yyyy-MM:指定多久产生新的配置文件。就文件命名为"指定文件名.yyyy-MM".
    • '.'yyyy-MM:每月
    • '.'yyyy-ww:每周
    • '.'yyyy-MM-dd:每天
    • '.'yyyy-MM-dd-a:每天两次
    • '.'yyyy-MM-dd-HH:每小时
    • '.'yyyy-MM-dd-HH-mm:每分钟
RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • Threshold=WARN:同上。
  • ImmediateFlush=true:同上。
  • Append=false:同上。
  • File:同上。
  • MaxFileSize=100KB:后缀可以是KB, MB或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到"指定文件名.1"文件中。
  • MaxBackupIndex=2:指定可以产生的滚动文件的最大数,2表示可以保存"指定文件名.1"、"指定文件名.2"和"指定文件名"三个文件,存满会覆盖.1文件

不同输出方式的Layout输出格式配置 (可选)

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

常用配置项如下:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
HTMLLayout
  • LocationInfo=true:输出java文件名称和行号,默认值是false。
  • Title=My Logging: 默认值是Log4J Log Messages。
PatternLayout选项
  • ConversionPattern=%m%n:设定以怎样的格式显示消息。

格式化符号:

  • %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平台为"\r\n",Unix平台为"\n"。
  • %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
  • %%:输出一个"%"字符。

格式化修饰符

  • c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
  • %-20c:"-"号表示左对齐。
  • %.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

本文参考自 https://blog.csdn.net/qq_28082757/article/details/89554144

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37771142/article/details/104879103

智能推荐

初识MFC----MFC简介-程序员宅基地

一、MFC的概念和作用  1、什么是MFC?     全称:Microsoft Foundation Class Library(微软基础类库)     1-MFC从硬盘存在形式来说就是一个库(静态MFC库、动态MFC库)     2-MFC从原理来说还是一个程序框架  2、为什么使用MFC?     基于框架编程,提高工作效率,减少开发周期,降低开发成本。二、..._mfc简介

ganglia简介以及工作原理和配置-程序员宅基地

Ganglia简介,ganglia工作流程以及组成

wget java 1.7_linux下安装和配置jdk1.7-程序员宅基地

0)到官网去下在jdkwget http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64.tar.gz -O jdk-7-linux-x64.tar.gz1)安装tar -zxvf jdk-7-linux-x64.tar.gz2)移动到指定目录,下面用软连接的原因是便于以后升级mv jdk1.7.0 /Application/ln ..._java1.7de wegt地址

提高运维效率(一)远程管理-程序员宅基地

市场上远程控制的软件很多,大多是商业软件,价格高,用户端也要去安装 client。此方案的优势是免费,开源,免安装。1. 下载ultraVNC软件,放到域控下的netlogon文件夹下;http://pan.baidu.com/s/1dFcXVxf2. 打开vnc.exe,配置好只读密码、远程控制密码和隐藏图标;3.设置域控组策略,从共享文件夹复制v...

Oracle导出用户对象 exporting cluster definitions 挂起-程序员宅基地

About to export specified users ... . exporting pre-schema procedural objects and actions . exporting foreign function library names for user SYSTEM . exporting PUBLIC type synonyms

【转】Unity3D研究院之使用Android的硬件缩放技术优化执行效率-程序员宅基地

Andoird太头疼了,尤其有些机器就是屏幕大别的硬件条件都很烂,为了优化渲染效率可以试试安卓的硬件缩放技术,我在真机上已经测试通过,效率确实提升了很多,FPS直线上升。。原理如下http://android-developers.blogspot.it/2013/09/using-hardware-scaler-for-performance.html但是需要拿到Unity andro...

随便推点

FFmpeg命令行实现两路/多路视频拼接 合并 合成 同时播放_ffmpeg 两个摄像头画面拼接在一个画面中-程序员宅基地

首先放一个两路视频合并的例子ffmpeg -pix_fmt rgb24 -s 960x960 -i bag_level_7_renderSize_1_960x960_8bits_rgb24i.rgb -pix_fmt rgb24 -s 960x960 -i bag_level_7_renderSize_1_960x960_8bits_rgb24i.rgb -filter_complex "[0:v]pad=iw*2:ih[a];[a][1:v]overlay=w*1" -pix_fmt rgb24 o_ffmpeg 两个摄像头画面拼接在一个画面中

工作站 显卡 测试软件,【戴尔Precision 3530移动图形工作站笔记本使用总结】配置|硬盘|显卡|屏幕|续航_摘要频道_什么值得买...-程序员宅基地

戴尔Precision 3530移动图形工作站笔记本使用总结(配置|硬盘|显卡|屏幕|续航)配置说明CPU8代标压CPU的本子大家应该也都见多了,但是实际跑分的时候还是要感慨一句:intel这管牙膏挤得真香PCMARK 10跑分略低于notebookcheck上看的评测,料想由于notebookcheck的测试机CPU、内存上略强cinebench 15随手跑的分,cinebench15算是一个很..._precision 3530加硬盘

MySQL应用-程序员宅基地

CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8;USE cms;-- 管理员表cms_adminCREATE TABLE cms_admin(id TINYINT UNSIGNED AUTO_INCREMENT KEY,username VARCHAR(20) NOT NULL UNIQUE,passwo..._创建新闻表 cms_news -- 编号、新闻标题、新闻内容、新闻发布时间、点击量、是否

百度公共dns-程序员宅基地

常用公共DNS服务器地址DNS(Domain Name System),即域名解析系统,作为将域名和IP地址相互映射的一个分布式数据库,能够使人通过相对好记的域名访问网站,而是一串数字。目前国内运营商通过使用DNS劫持和DNS污染的方法,干扰用户正常上网(弹出广告、某无法访问某些网站等)。//原来是这么回事,我用电信的,就不时弹出电信的广告。奸商啊~!全文:http://jingyan.bai...

[scala代码风格指南]--命名规范-程序员宅基地

英文原文:http://docs.scala-lang.org/style/译文如下:命名约定一般来说,Scala使用“驼峰命名法”命名。也就是说,每个单词都被大写,除了可能的第一个单词:UpperCamelCaselowerCamelCasenames(_)中的下划线实际上并不被编译器所禁止,而是强烈地不鼓励,因为它们在Scala语法中具有特殊意义。(但请看下面的例外。)一、类/性状类应以上面...

大数据运维工程师面试题目_hdfs有哪些核心指标需要采集和监控-程序员宅基地

作者:焦振清时间:2018-07-23当前你们公司使用的Hadoop版本是什么HDFS常见的数据压缩格式有哪些,介绍其中一种详细的实现方式HDFS垃圾回收的时间模式是多久,如何修改该时间HDFS如何生效机架感知,取消机架感知有什么问题HDFS常见的运维操作有哪些,哪些操作是高危的,如果高危操作出现问题,如何解决HDFS常见的故障是什么,如何处理,是否可以给出三种预案来防范大部分常..._hdfs有哪些核心指标需要采集和监控