Apache Log4j 2.0值得升级吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Log4j 2.0值得升级吗相关的知识,希望对你有一定的参考价值。
Apache软件基金会 最近发布了Log4j 2.0通用版本 ,相比之前Log4j的1.x版本有了很大的 性能提升 。本版本的灵感来自于诸如Log4j 1.x和java.util.logging之类的已有日志解决方案,它是经过了数年的努力从头开始编写完成的。Log4j 2.0引入了新的插件系统、对properties的支持、对基于 JSON配置的支持和配置的自动化重载。它支持很多已有的日志框架,包括SLF4J、Commons Logging、Apache Flum、Log4j 1.x,并提供了新的程序员API。
Apache Logging PMC成员 Christian Grobmeier 在2012年12月率先报道了新的Log4j 2.0 。他是这样描述流行的API的:
在以前,大家是这么写的:
if (logger.isDebugEnabled())
logger.debug("Hi, " + u.getA() + " " + u.getB());
log4j 2.0的团队对这种写法进行了思考和改进。现在你可以这么写了:
logger.debug("Hi, ", u.getA(), u.getB());
Grobmeier接着阐述了API方面更多的改进,包括 Markers 和 Flow Tracing 。他还提到了插件架构的改进,配置的增强(使用热重载、JSON和properties),还有Log4j 2.0如何处理了Log4j 1.x的许多死锁问题。
在 Hacker News 上,有许多针对JVM日志框架的抱怨。Ceki Gülcü(许多Java日志框架的作者,其作品包括Log4j、SLF4J和Logback) 表达了他不喜欢Apache模型的原因 。Gülcü仍然是一名社区成员,并持续从事着 Apache Logging 的 PMC 的工作。
在2013年7月,Grobmeier发表了另一篇标题为《 Log4j 2:性能几近于 疯狂》 的文章。在这篇文章里,他对 Remko Popma 的“AsyncLoggers”产生的日志吞吐量大加赞赏,并讨论了它的日志吞吐量如何能够比其他框架多出了12倍。
我们谈到每秒超过18,000,000条的消息,而其他框架在同样的环境中只能达到1,500,000或者更少。
我看到下面这张图表,简直不敢相信。一定是哪里搞错了吧。我反复地检查。我亲自来测试。的确像图中一样,Log4j 2有着疯狂的速度。
你可以在Log4j的 异步文档 中找到更多的信息。
然而,并非所有人都觉得Log4j的异步特性有多么地了不起。FullContact的高级平台工程师 Michael Rose 写过一篇博客,名为《 过度设计:Log4j2的AsyncAppender 》。他总结说,这个特性并不值得使用:
我认为Log4j2的AsyncAppender虽然看上去很优雅,但不过是个好看的玩具,对于任何合理的应用来说它实际上并不像评估的那么突出。Log4j2的团队非常令人尊敬,但我真诚的希望他们更加专注于简单的、内聚的下一代Java日志框架,而不是把主要精力放在添加另外的日志框架上。
无论如何,Logback是SLF4J(构建类路径日志的实事标准)的原生实现,性能也完全合乎要求(特别是打开本地设置时)。它仍然是我对日志框架的第一选择。它使用起来很方便,而且我在使用过程中也从没有发现过什么问题。
如果没有其他方面的考虑,那就要像躲瘟疫那样躲着Log4j 1.x。在任何具有负载的系统中,你最终都会发现它会导致竞争问题。
从 Log4 1.x 迁移到 2.0
我最近把我的 AppFuse应用从Log4j 1.x升级到了2.0 ,发现它很难从 Maven dependencies 上直接获取。至少,你得需要log4j-core JAR(它依赖于log4j-api)。如果你要用于网络应用,还需要依赖log4j-web。如果集成Velocity 1.7,还必须增加log4j-1.2-api。如果集成Spring,还必须增加log4j-jcl(因为它使用了commons-logging)。对于那些依赖了SLF4J的类库,必须包括log4j-slf4j-impl。如果集成Hibernate,还必须升级 JBoss Logging到3.2.0.Beta1 。
你可能需要把某些依赖中以前的Log4j依赖排除掉。如果你使用Maven,下面有个不错的命令,可以显示你可能需要排除的依赖。
mvn dependency:tree | grep log
我最后要做的一步是把log4j.xml文件重命名为log4j2.xml,并重构它们以匹配 它新的配置 。
总结
新的Log4j 2.0版本有了大幅的性能提升、新的插件系统,以及配置设置方面的很多改善。是否需要把当前Log4j升级到2.0或者将已有的日志解决方案换成Log4j 2.0呢?有的用户可能会找到充分的理由,有的也可能还找不到。 参考技术A Apache软件基金会最近发布了Log4j
2.0通用版本,相比之前Log4j的1.x版本有了很大的性能提升。本版本的灵感来自于诸如Log4j
1.x和java.util.logging之类的已有日志解决方案,它是经过了数年的努力从头开始编写完成的。
Log4j 2.0引入了新的插件系统、对properties的支持、对基于
JSON配置的支持和配置的自动化重载。它支持很多已有的日志框架,包括SLF4J、Commons Logging、Apache Flum、Log4j
1.x,并提供了新的程序员API。本回答被提问者和网友采纳
Apache 服务
参考技术A 一、介绍二、Linux下apache的安装
三、apache的基础信息
四、配置apache服务
五、apache的虚拟主机
六、Apache httpd.conf配置详解
七、特殊使用场景
1. Linux Apache配置多个站点同时运行
Apache HTTP Server (简称Apache)是 Apache软件基金会 的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。 [2]
Apache HTTP服务器 是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的 Web服务器 软件。
它可以运行在几乎所有广泛使用的 计算机平台 上。
Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的 Web服务器 软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是 自由软件 ,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做 代理服务器 来使用。
yum install httpd -y #安装apache软件包
systemctl start httpd #打开服务
systemctl enable httpd #开机自启动
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #开机不启动防火墙
systemctl restart httpd#重新开启
firewalld-cmd --permanent --add-service=http #在防火墙策略中添加http和https服务
firewalld-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=8080/tcp
firewalld-cmd --reload #重新加载策略
firewall-cmd --list-all #查看防火墙:
apache还有一个使用手册:需要安装httpd-manual包
yum install httpd-manual -y
各个主要子目录的用途如下:
bin:存放httpd服务的各种执行程序文件。包括主程序httpd、服务控制工具apachectl等。
cgi-bin:存放各种CGI程序文件。
logs:存放httpd服务的日志文件。
conf:存放httpd服务的各种配置文件,包括主配置文件httpd.conf、增强配置子目录extra等。
htdocs:存放网页文档,包括默认首页文件index.html等。
module:存放httpd服务的各种模块文件。
1.在默认发布目录发布内容
主配置目录: /etc/httpd/conf
主配置文件:/etc/httpd/conf/httpd.conf
子配置目录:/etc/httpd/conf.d
子配置文件:/etc/httpd/conf.d/*.conf
默认发布目录:/var/www/html
默认发布文件:index.html
默认端口:80
默认安全上下文:httpd_sys_content_t
程序开启默认用户:apache
apache日志:/etc/httpd/logs/*
netstat -antlupe | grep httpd ##查看当前http服务的网络接口
2.修改默认端口
vim /etc/httpd/conf/httpd.conf
Listen 8080 ##修改默认端口为8080
3.修改默认发布文件:
默认发布文件就是访问apache时没有指定文件名称时默认访问的文件。
这个文件可以指定多个,有访问顺序
vim /etc/httpd/conf/httpd.conf
DirectoryIndex westos.html index.html
##当index.html不存在时,访问westos.html
##如果将westos.html放到index.html前面,
在两个文件都存在的情况下会默认访问westos.html里面的内容
##如果没编辑/etc/httpd/conf/httpd.conf(没添加加westos.html),
要想看到westos的页面,则在浏览器中输入:http端IP/westos.html 即可
# systemctl restart httpd.service 修改完配置文件记得一定要重启服务生效
4.修改默认发布目录
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www/html"
<Directory "/www/html">
Require all granted
</Directory>
index.html:apache默认发布文件
news.conf 或 music.conf:apache子配置文件
恢复默认发布目录,并创建默认文件index.html
cd /etc/httpd/conf.d/ #进入apache服务子配置目录
vim adefault.conf #建立默认发布目录配置文件
<VirtualHost _default_:80>
DocumentRoot /var/www/html #发布文件路径
CustomLog "logs/adefault.log" combined #日志路径,这里写相对路径,内容在/etc/httpd/logs/*.log里面
</VirtualHost>
https://www.cnblogs.com/mzhaox/p/11216635.html
1. Linux Apache配置多个站点同时运行
这样一种场景;我们有一台服务器;但是想挂多个网站;那么Apache下配置虚拟主机可以满足这个需求;
1). 比较简单的是基于主机名的配置步骤如下:
step0:示例环境:
ip:115.28.17.191
域名:baijunyao.com
thinkbjy.com
目录: /var/www/html/baijunyao
/var/www/html/thinkbjy
step1:修改hosts文件
[root@iZ28qa8jt4uZ /]# ifconfig; //查看ip并记录自己的ip地址
[root@iZ28qa8jt4uZ /]# vim /etc/hosts; //修改hosts文件 添加如下两行内容
115.28.17.191 baijunyao.com
115.28.17.191 anlianma.com
step2:修改httpd.conf文件
[root@iZ28qa8jt4uZ /]# vim /etc/httpd/conf/httpd.conf; //修改httpd.conf文件 删除990行 NameVirtualHost *:80前的#注释
step3:修改httpd-vhosts.conf文件
[root@iZ28qa8jt4uZ /]# vim /etc/httpd/conf.d/virtual.conf; //设置httpd-vhosts.conf如下 如没有则新建
<VirtualHost *:80>
DocumentRoot /var/www/html/baijunyao
ServerName baijunyao.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/anlianma
ServerName anlianma.com
</VirtualHost>
虚拟主机配置到此结束;在对应的目录下新建html页面测试即可;
2). 另一种方式是
实际应用中,一个使用自己独有的配置文件,另一个使用默认Apache配置
Apache默认配置不表述。下面仅仅介绍独立配置文件,以zabbix为例
以上是关于Apache Log4j 2.0值得升级吗的主要内容,如果未能解决你的问题,请参考以下文章
Apache Log4j2团队宣布Log4j 2.16.0发布,强烈建议升级
spring boot项目升级到2.0.1,提示java.lang.ClassNotFoundException: org.apache.log4j.Logger错误
VS2005的.NET Framework 2.0升级成NET Framework 3.5相对应的VS2005会升级成VS2008吗