Log4j基础应用及扩展

Log4j优化(一)扩展Log4j来实现性能优化的异步日志收集器 日志收集在互联网企业尤其是大数据时代是一件非常重要的事情,日志记录着用户行为和系统行为,是一种重要的数据来源。Log4j是Java应用程序使用的最多的一种日志收集工作。目前大量的Java应用程序都使用着Lo4j 1.2.X版本,Log4j 1.X版本饱受诟病的原因是使用了大量的锁,在高并发的情况下影响了系统的性能。这篇简单提供一种思路,说说如何扩展一下Log4j,提升一下Log4j的性能。 阅读详情
http://renqifan.blogdriver.com/renqifan/index.html
http://www-900.ibm.com/developerworks/cn/java/j-instlog/


Log4j日志管理系统简单使用说明
 

    Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:

1、 Loggers

    Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一点很重要,这里Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。

Java程序举例来说:

//建立Logger的一个实例,命名为“com.foo”

Logger  logger = Logger.getLogger("com.foo");

//设置logger的级别。通常不在程序中设置logger的级别。一般在配置文件中设置。

logger.setLevel(Level.INFO);

Logger barlogger = Logger.getLogger("com.foo.Bar");

//下面这个请求可用,因为WARN >= INFO

logger.warn("Low fuel level.");

//下面这个请求不可用,因为DEBUG < INFO

logger.debug("Starting search for nearest gas station.");

//命名为“com.foo.bar”的实例barlogger会继承实例“com.foo”的级别。因此,下面这个请求可用,因为INFO >= INFO

barlogger.info("Located nearest gas station.");

//下面这个请求不可用,因为DEBUG < INFO

barlogger.debug("Exiting gas station search"); 

这里“是否可用”的意思是能否输出Logger信息。 

    在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名字。一般情况下建议以类的所在位置来命名Logger实例,这是目前来讲比较有效的Logger命名方式。这样可以使得每个类建立自己的日志信息,便于管理。比如:

static Logger logger = Logger.getLogger(ClientWithLog4j.class.getName());

2、 Appenders

    禁用与使用日志请求只是Log4j其中的一个小小的地方,Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。

其语法表示为:

org.apache.log4j.ConsoleAppender(控制台),


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

配置时使用方式为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

…

log4j.appender.appenderName.option = valueN

这样就为日志的输出提供了相当大的便利。

3、 Layouts

    有时用户希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供了四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式等等。

其语法表示为:

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

配置时使用方式为:

     log4j.appender.appenderName.layout =       fully.qualified.name.of.layout.class
     log4j.appender.appenderName.layout.option1 = value1
     …
     log4j.appender.appenderName.layout.option = valueN
 
    以上是从原理方面说明Log4j的使用方法,在具体Java编程使用Log4j可以参照以下示例:
1、 建立Logger实例:
    语法表示:public static Logger getLogger( String name)
    实际使用:static Logger logger = Logger.getLogger   (ServerWithLog4j.class.getName ()) ;
2、 读取配置文件:
    获得了Logger的实例之后,接下来将配置Log4j使用环境:
    语法表示:
    BasicConfigurator.configure():自动快速地使用缺省Log4j环境。
    PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。
    DOMConfigurator.configure(String filename):读取XML形式的配置文件。
    实际使用:PropertyConfigurator.configure("ServerWithLog4j.properties");
3、 插入日志信息
    完成了以上连个步骤以后,下面就可以按日志的不同级别插入到你要记录日志的任何地方了。
    语法表示:
    Logger.debug(Object message);
    Logger.info(Object message);
    Logger.warn(Object message);
    Logger.error(Object message);
    实际使用:logger.info("ServerSocket before accept: " + server);
 
    在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义。定义步骤就是对Logger、Appender及Layout的分别使用,具体如下:
1、 配置根Logger,其语法为:
    log4j.rootLogger = [ level ] , appenderName, appenderName, …
这里level指Logger的优先级,appenderName是日志信息的输出地,可以同时指定多个输出地。如:log4j.rootLogger= INFO,A1,A2
2、 配置日志信息输出目的地,其语法为:
    log4j.appender.appenderName = fully.qualified.name.of.appender.class
    可以指定上面所述五个目的地中的一个。
3、 配置日志信息的格式,其语法为:
    log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
    这里上面三个步骤是对前面Log4j组件说明的一个简化;下面给出一个具体配置例子,在程序中可以参照执行:
    log4j.rootLogger=INFO,A1
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=
                                        %-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
    这里需要说明的就是日志信息格式中几个符号所代表的含义:
    -X号: X信息输出时左对齐;
    %p: 日志信息级别
    %d{}: 日志信息产生时间
    %c: 日志信息所在地(类名)
    %m: 产生的日志具体信息
    %n: 输出日志信息换行
 
根据上面的日志格式,某一个程序的输出结果如下:
0    INFO  2003-06-13 13:23:46968 ClientWithLog4j Client socket: Socket[addr=localhost/127.0.0.1,port=8002,localport=2014]
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server says: 'Java server with log4j, Fri Jun 13 13:23:46 CST 2003'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j GOOD
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Command 'HELLO' not understood.'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j HELP
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j Server responds: 'Vocabulary: HELP QUIT'
16   DEBUG 2003-06-13 13:23:46984 ClientWithLog4j QUIT



Log4J、Log4J2、LogBack 的对比,最终选择...... Log4J2 凭借其性能优势和灵活性,已成为现代 Java 应用的首选日志框架,尤其适合高吞吐量系统(如微服务、大数据处理)。 阅读详情

相关推荐

Log4j的原理及应用详解(三)

Log4j是Apache的一个开源项目,它是一个可靠、快速、灵活的日志框架(API),主要用于Java语言编写的应用程序中。始于1996年,作为记录E.U. SEMPER(Secure Electronic Marketplace for Europe)项目跟踪信息的API。经过大量的完善和蜕变,最终演进为Log4j。 本文将跟随《Log4j的原理及应用详解(二)》的进度,继续介绍Log4j。希望通过本系列文章的学习,您将能够更好地理解Log4j的内部工作原理,掌握Log4j的使

凛鼕将至的博客 2426

Log4j日志管理系统简单使用说明

Log4j日志管理系统简单使用说明     Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。下面对三个组件分别进行说明:1、 Loggers    Loggers组件在此系统中被分为五个级别:DEBUG

编辑空间 2347

Log4j在Android中的应用实例

本文还有配套的精品资源,点击获取 简介:Android开发中,Log4j提供了一个灵活的日志记录方案,尽管Android自带Log类,但Log4j凭借其功能丰富和可配置性也备受开发者青睐。本篇将详细介绍在Android项目中集成和使用Log4j的步骤,包括理解其核心组件、添加依赖、配置Log4j、初始化、使用Logger及设置权限等。虽然对于简单日志需求Android的Lo...

weixin_42588877的博客 1408

记录一个疏忽导致的异常

今天对一个工程代码做重构,这个工程原先是通过Spring的InitializingBean将自身注册到Zookeeper上,做的改造包括: 1)将注册中心的接口独立出来形成一个工程 2)基于注册中心基本接口扩展出Zookeeper实现 3)使用properties文件记录配置,取代原先Spring的XML配置 然后通过SPI机制实现自动注册,就可以脱离Spring容器使用了,但是在测试时,...

Yhc不是咸鱼 564

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 116

STM32项目分享:智能家居语音系统

(资料分享见文末)基于STM32的智能家居语音系统温湿度采集:系统通过DHT11模块采集温湿度烟雾监测:通过MQ-2模块采集环境中烟雾浓度光照强度采集:通过BH1750传感器采集环境光照强度窗帘控制:通过步进电机转动模拟窗帘控制风扇控制:通过继电器和指示灯模拟风扇驱动照明控制:通过继电器和指示灯模拟照明驱动蜂鸣器报警:环境烟雾异常情况下蜂鸣器报警OLED显示:显示温湿度、光照强度和烟雾浓度APP功能:使用机智云APP,包括功能有控制照明灯和风扇开关、显示当前温湿度信息。

qq_44016222的博客 4147

奇怪的问题-Could not initialize class org.apache.log4j.Log4jLoggerFactory

1、场景    采用Flink进行数据操作采用的是JPA方式,用的是spring boot data jpa。配置如下: &lt;parent&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt; ...

大风起兮云飞扬 5560

计算机视觉——SIFT特征匹配

文章目录一、SIFT特征检测原理1.1基本思想1.2二、SIFT特征检测图片兴趣点三、SIFT特征检测描述子匹配四、输入图片检测与之 一、SIFT特征检测原理 1.1基本思想 1.2 二、SIFT特征检测图片兴趣点 代码: 检测结果: 三、SIFT特征检测描述子匹配 四、输入图片检测与之 ...

weixin_43869874的博客 3855

java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory

(一) 现象与解决方法前些天在进行storm job的开发时候突然报了一个错误,记录一下Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory当然我们的第一个反应是log4j这个包缺失(当然也有这种情况,需要首先确认),打开pom文件查看依赖,文

Kevin.yang专栏 5万+

FPGA波束形成:从算法到硬件的艺术之旅

本文深入探讨了FPGA在波束形成技术中的应用,从算法原理到Verilog硬件实现的全过程。文章详细分析了FPGA并行处理、低延迟和可重构特性如何优化波束形成系统性能,并提供了Verilog关键模块代码示例和资源优化策略,为工程师实现高效FPGA波束形成解决方案提供实用指导。

tea88的博客 1046

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8972

包冲突 Could not initialize class org.apache.log4j.Log4jLoggerFactory 的解决方法

Could not initialize class org.apache.log4j.Log4jLoggerFactory 今天在项目的工程里引入了几个 hadoop 、Hive 的 jar 包 然后就出现了如上的异常。 解决办法: 使用 mvn dependency:tree &gt; tmp 将 Maven 依赖输出到文件中,然后分析到底哪里引入的 log4j 导致了包冲突 ...

HeatDeath的博客 7144

Android11车机系统海外项目资源包RRO方案优化

本文介绍了汽车设置应用如何通过Android RRO(运行时资源叠加)方案实现多车型差异化资源管理。针对不同车型(国内/海外、轿车/SUV)和配置(方向盘、轮毂等),采用产品变体(productFlavors)构建不同APK版本,并通过JSON配置文件动态启用对应资源包。系统根据车辆下线配置自动匹配适用的资源叠加包,解决了硬编码判断带来的维护问题。该方案实现了资源的高效复用,同时支持灵活配置多种车型组合,为汽车行业多车型共平台开发提供了可扩展的技术实现。

shusuanly的博客 469

使用Yak搭建Log4j漏洞检测工具

当然,以上是用最简单的方式进行了Log4j的复现和检测,如果需要检测线上环境是否有漏洞,可以把OpenLDAP环境地址映射到外网。如果真的做成生产力工具,还需要考虑更多的情况,比如线程、参数等等,文章中的Yak代码也有优化的空间,最后可以ssh到日志环境,根据日志信息用字符串判断是否触发漏洞,达到Log4j漏洞判断的自动化。本文只是简单的应用,入门而已,Yak还有很多精彩的特性,作者也还在学习中。总之Yak是整合了当前多种安全工具和开源项目,让安全从业人员无需安装复杂的依赖,就能上手工作。

YakProject的博客 715

【Claude】Claude Code 子代理(Subagents)完全指南:多 AI 编排与并行任务管理

子代理是在独立上下文窗口特性主代理子代理上下文窗口与你对话的主上下文完全独立的上下文工具权限拥有所有工具可自定义限制生命周期整个会话完成任务后结束通信方式直接对话结果返回给主代理模型继承主会话设置可指定不同模型你可以创建专属子代理,指定模型、工具权限和系统提示。在对话中,Claude 会根据任务自动选择合适的子代理。

博客 5538

【微服务】SpringBoot 整合 FastExcel 实现导入导出操作详解

SpringBoot 整合 FastExcel 实现导入导出操作详解

congge 4235

aop对请求后端的参数修改_Spring Boot中使用log4j实现http请求日志入mongodb

之前在《使用AOP统一处理Web请求日志》一文中介绍了如何使用AOP统一记录web请求日志。基本思路是通过aop去切web层的controller实现,获取每个http的内容并通过log4j将日志内容写到应用服务器的文件系统中。但是当我们在集群中部署应用之后,应用请求的日志被分散记录在了不同应用服务器的文件系统上,这样分散的存储并不利于我们对日志内容的检索。解决日志分散问题的方案多种多样,本文思路...

weixin_36267013的博客 117

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Log4j 应用实践指南

Log4j是Apache软件基金会的一个开源日志记录工具,是Java生态中最流行的日志框架之一。它提供了灵活的配置、多种日志级别和输出目的地,帮助开发者高效地记录应用程序的运行状态。Log4j作为Java生态中最成熟的日志框架之一,在企业应用开发中扮演着重要角色。通过合理配置和使用,可以显著提高系统的可观察性和可维护性。本指南涵盖了从基础安装到企业级应用的全方位内容,希望能帮助你在项目中高效地实现日志管理。

zll的博客 1154

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

浅谈Log4j的扩展 (一)

转自:http://blog.sina.com.cn/s/blog_5f53615f0100sfo1.html   浅谈Log4j的扩展 (一)     #1楼 摘要:Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输出地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人

koutatu的专栏 1326

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

深入浅出Log4j2:从入门到实战应用指南

Log4j2是Apache基金会推出的新一代Java日志框架,作为Log4j 1.x和Logback的升级版本,它通过重新设计架构实现了显著的性能提升。根据Apache官方基准测试,异步日志性能比Log4j 1.x提升18倍,同步日志效率也提高了20倍以上。插件化架构:支持通过简单配置扩展Appender、Filter等组件异步日志记录:基于LMAX Disruptor库实现无锁高性能异步日志智能配置重载:支持运行时动态修改配置(无需重启应用)多API支持。

F2022697486的博客 1334

appender log4j 扩展_学习如何用自己的 appender 来扩展 log4j 框架

Ruth Zamorano, 软件架构师, Orange SoftRafael Luque, CTO, Orange Soft2003 年 9 月 29 日日志记录不仅是开发和测试周期中的一个重要元素――提供关键调试信息,而且对于系统已部署到生产环境之后调试错误也是很有用的――提供修复错误所需的准确上下文信息。在本文中,Orange Soft 公司(这是一家专业从事面向对象技术、服务器端Java ...

weixin_39683025的博客 435

Log4j和Log4j2的安装、配置讲解

什么是日志? 日志是记录系统或应用程序在运行过程中所发生事件或行为的详细信息的文件。它通常包括时间戳、事件类型、事件描述等信息,以便在需要时进行故障排查、性能优化、安全审计等工作。日志可以帮助开发人员和系统管理员诊断应用程序问题,了解系统运行情况,以及存档和监控事件。

qq_71443736的博客 1196

Log4j2原理及应用详解(一)

随着Logback的兴起,Log4j开始式微。为了应对这一挑战,Apache软件基金会决定开发Log4j的继任者——Log4j2。Log4j2不仅改进了Log4j的缺点,还借鉴了Logback的许多优点,号称在性能上完胜Logback。

凛鼕将至的博客 1895

浅谈Log4j的扩展(第一篇)

    1       基本介绍Log4j   Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输出地;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。   log4j的好处在于: 1) 通过修改配置文...

iteye_4162的博客 270

Log4j2原理及应用详解(十四)

随着Logback的兴起,Log4j开始式微。为了应对这一挑战,Apache软件基金会决定开发Log4j的继任者——Log4j2。Log4j2不仅改进了Log4j的缺点,还借鉴了Logback的许多优点,号称在性能上完胜Logback。 本文将跟随《Log4j2原理及应用详解(十三)》的进度,继续介绍Log4j2。希望通过本系列文章的学习,您将能够更好地理解Log4j2的内部工作原理,掌握Log4j2的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化Log4j2的潜力,为系统的高

凛鼕将至的博客 1460

Log4j的原理及应用详解(四)

Log4j是Apache的一个开源项目,它是一个可靠、快速、灵活的日志框架(API),主要用于Java语言编写的应用程序中。始于1996年,作为记录E.U. SEMPER(Secure Electronic Marketplace for Europe)项目跟踪信息的API。经过大量的完善和蜕变,最终演进为Log4j。 本文将跟随《Log4j的原理及应用详解(三)》的进度,继续介绍Log4j。希望通过本系列文章的学习,您将能够更好地理解Log4j的内部工作原理,掌握Log4j的使用技巧,

凛鼕将至的博客 1864
上一篇: 关于J2EE模式
下一篇: 企业应用程序客户端的选择
differ1
博客等级 码龄25年 0粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值