本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/log4j_properties_simple_introduction

简述

使用log4j可以根据配置文件控制输出日志的级别,记录到文件、命令行等的位置,不需要代码上的更改。

日志在一定程度上会影响性能,特别是高并发环境。一般更建议使用log4j 2.x,在性能上有较大的提高,由于hadoop 2.7使用的log4j 1.2,下面主要写这一版本。

  • 根据日志级别记录日志 (logger上设置)
  • 运行时决定具体的记录位置(appender上设置)和日志格式(layout上设置)

一些概念

日志级别(priority,代码里为level)

日志级别从低到高为trace, debug, info, warn, error, fatal。默认级别为info,低于设置级别的日志不会被打印。

常用组件

一般情况下常设置的组件有logger,appender, layout。

用类的方式表达三个组件的关系为

Logger{
name;
level; // 控制日志级别
appenderList; // 可对应多个appender
} Appender{
name; // 控制文件位置 如fileAppender
layout; // 控制格式
filter; // 过滤部分日志
}

logger

logger以一种树状关系管理日志的类型,log4j.rootCategory为根节点,如果没有标记 log4j.additivity.MyLogger = false ,则子logger会默认继承上一级的设置。

通过树的组织形式,对不同的包中的不同的类,可以分别设置不同的日志方式。

通过点表示层级,如com.foo为com.foo.Bar的上级

关于category,早期的log4j使用category较多,但在log4j 1.2之后,建议使用logger代替category

appender

主要用于

  1. 控制日志的输出位置,当前支持the console, files, GUI components, remote socket servers, NT Event Loggers, and remote UNIX Syslog daemons.
  2. 控制日志的格式(通过下面的layout)

一个logger能够指定多个appender,使日志记录在多个位置。

layout

用于控制日志的格式,一个典型的格式为

%r [%t]%-5p %c - %m%n 会得到:
176 [main] INFO org.foo.Bar - Located nearest gas station.

上面的日志分别对应:程序运行时间 线程 优先级 category的名称 日志信息

log4j.properties 配置

提供了两种动态的配置方式,一种使用配置文件log4j.properties(更建议),另一种使用java代码直接配置。

一般涉及:

  • 配置rootLogger (配置全局的appender和priority)
  • 配置子logger (配置指定类的appender和priority)
  • 配置appender (配置日志记录的位置等属性)
  • 配置layout (配置日志输出的格式)

示例

# root logger 的level和对应的appender (fileAppender在后面定义)
log4j.rootLogger=info, fileAppender # 定义fileAppender 为 File appender
log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.File=/home/abc/test # 定义 fileAppender 的 layout
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.conversionPattern=%m%n # 子logger配置 针对com.a.Test4log这个类 设置为System.err的输出
log4j.logger.com.a.Test4log = INFO, myConsole # 输出到标准err的appender
log4j.appender.myConsole=org.apache.log4j.ConsoleAppender
log4j.appender.myConsole.target=System.err # 定义layout输出格式
log4j.appender.myConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.myConsole.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n myConsole

分层的语法略奇葩,而且前面可以用到后面定义的变量。

java代码调用

Log log = LogFactory.getLog(Test4log.class);
log.info("test");

程序会在classpath下查找log4j.properties,因此一般放在src/main/resources文件夹下

log4j 1.2 配置和使用简述的更多相关文章

  1. log4j的Appenders配置

    因为是刚开始使用log4j,很多配置方面的东西都不懂,记录下. 下面是我用STS(Spring Tool Suite)新建Spring MVC项目的时候,帮我自动生成的一个log4j.xml配置文件. ...

  2. (转)log4j(六)——log4j.properties简单配置样例说明

    一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 老规矩,先来个栗子,然后再聊聊感受 (1)使用配文件的方式,是不是感觉非常的清爽,如果不在程序中读取配置文件就更加的清 ...

  3. log4j使用和配置详解

    日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录.以下是个人经验,具体请参考Log4j文档指南. Log4j下载 在apache网站:htt ...

  4. Log4j – Configuring Log4j 2 - Log4j 2的配置

    Configuration Inserting log requests into the application code requires a fair amount of planning an ...

  5. Activiti中的log4j(slf4j)的配置

    今天试了一下在Activiti中使用log4j来进行配置发现这个会出现问题,其实Activiti中的日志系统是采用的是slf4j而不是log4j 然后使用slf4j驱动log4j来做的 通过Proce ...

  6. Maven项目引入log4j的详细配置

    注:本文来源于 _xiaoxiong  <Maven项目引入log4j的详细配置> 引入log4j pom.xml <dependency> <groupId>lo ...

  7. Log4j 日志操作包配置详解

    log4j简介 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...

  8. Java log4j slf4j 日志配置笔记

    http://www.cnblogs.com/Scott007/p/3269018.html 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender, ...

  9. Log4j1的使用与log4j.properties的配置

    这里介绍Log4j1(即Log4j 1.x版本),这里以普通的Java项目为例,用eclipse编写,项目结构如下图所示: 该项目主要包括: java文件:Log4jv1Util 以及 Log4jv1 ...

随机推荐

  1. 1.将控制器添加到 ASP.NET Core MVC 应用

    模型-视图-控制器 (MVC) 体系结构模式将应用分成 3 个主要组件:模型 (M).视图 (V) 和控制器 (C). 模型(M):表示应用数据的类. 模型类使用验证逻辑来对该数据强制实施业务规则. ...

  2. JS前端加密JAVA后端解密详解

    最近有一个加解密的需求,其实没有什么难度,但是实践过程中踩了很多坑,把踩坑过程分享出来. 1.前端JS加密 /** * 加密(需要先加载aes.min.js文件) * @param word * @r ...

  3. 2019 用友网络java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条. 用友网络等公司offer,岗位是Java后端开发,最终选择去了 用友网络. 面试了很多家公司,感觉大部分公司考察 ...

  4. Excel表格快速将公式运用到一整列

    假设你的公式在B2单元格,需要复制公式到B3:B999,那么你先选择包含公式单元格的所有需要复制公式的单元格(B2:B999),然后按Ctrl+D即可全部填充.

  5. Django使用 django-allauth实现第三方登陆

    Django使用 django-allauth实现第三方登陆 这里我们使用 django-allauth 模块来实现第三方账号验证登录,官方文档如下:https://django-allauth.re ...

  6. Java 之 Cookie

    Cookie 一.会话概述 1.会话:一次会话中包含多次请求和响应.       一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止. 2.功能: 在一次会话的范围内的多次请求间 ...

  7. 使用PATH变量进行Linux权限升级技巧

    0x00 前言 在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助.在本文中,我们将学习“使用$path变量的各种方法”以 ...

  8. Python的正则表达式re模块

    Python的正则表达式(re模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Python使用re模块提供了正则表达式处理的能力.如果对正则表达式忘记的一干二净的话,可以花费 ...

  9. 团队最后一次——冲刺+Beta发布

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在哪里 https:// ...

  10. docker学习6-docker-compose容器集群编排

    前言 实际工作中我们部署一个应用,一般不仅仅只有一个容器,可能会涉及到多个,比如用到数据库,中间件MQ,web前端和后端服务,等多个容器. 我们如果一个个去启动应用,当项目非常多时,就很难记住了,所有 ...