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值得升级吗的主要内容,如果未能解决你的问题,请参考以下文章

Log4j 2.0在开发中的高级使用具体解释—介绍篇

如何查看当前系统apache 版本

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吗

将 LogStash Log4j 配置升级到 Log4j2