java – Log4j2为什么要用log4j?

前端之家收集整理的这篇文章主要介绍了java – Log4j2为什么要用log4j?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一定是想念一些东西,但是现在我已经看了几天,但是为什么在log4j之前你可以使用log4j2(而不是性能)呢?

从目前为止所看到的,log4j2被公布为更简单的配置,但实际上更复杂(现在已经三天了,我仍然无法在主目录中写入日志).自动配置根本不适用于我(或者至少我不能工作),配置文件本身在其结构上显着更复杂,并且在运行时看起来更难以在运行时添加东西来帮助诊断.

那么除了性能是否有什么理由使用log4j2比原来的log4j?

解决方法

从Log4j 1.x升级到Log4j 2的原因

>社区支持:Log4j 1.x没有主动维护,而Log4j 2有一个活跃的社区,问题得到回答,功能添加,错误被修复.更新:自2015年8月起,Log4j 1.x is officially End of Life建议升级到Log4j 2.更新2:Log4j 1.2 is broken in Java 9.
> Async Loggers – performance similar to logging switched off
> Custom log levels
>修改自动重新加载其配置,而不会在重新配置时丢失日志事件.
> Java 8风格lambda support用于延迟日志记录
>从版本2.6起,Log4j 2是garbage-free(或至少是低垃圾)
> Filtering:基于上下文数据,标记,正则表达式和Log事件中的其他组件进行过滤.过滤器可以与记录器相关联.您可以在任何这些情况下使用常用的Filter类.
> Plugin Architecture – 通过构建定制组件可以方便地扩展
>支持的API:SLF4J,Commons Logging,Log4j-1.x和java.util.logging
> Log4j 2 API与Log4j 2实现分开. API支持的不仅仅是记录字符串:CharSequences,Objects和custom Messages.消息允许支持有趣和复杂的结构,以便通过日志记录系统传递并被有效地操纵.用户可以自由创建自己的消息类型并编写自定义布局,过滤器和查找来操作它们.
>并发改进:log4j2使用java.util.concurrent库在最低级别执行锁定. Log4j-1.x已知死锁问题.
>通过XML,JSON,YAML,属性配置文件或以编程方式进行配置.

意识到

> log4j2.xml和log4j2.properties格式与Log4j 1.2配置语法不同
> Log4j 2不是fully与Log4j 1.x兼容:Log4j 1.2 API由log4j-1.2-api适配器支持,但依赖于Log4j 1.2内部机构的自定义设备可能无法正常工作.
>版本2.0到2.3需要Java 6. Log4j 2.4及更高版本需要Java 7.

升级时的提示

人们在开始使用log4j2时遇到的常见问题:

>您需要(at least)您的类路径中的log4j-api-2.6.2.jar和log4j-core-2.6.2.jar
> Log4j2寻找一个log4j2.xml配置文件,而不是一个log4j.xml配置文件
>配置文件location:将其放在类路径中或使用log4j.configurationFile系统属性指定其路径
>到debug the configuration,使用< Configuration status =“trace”>在你的配置文件的开头
>我建议从log4j2手册中提供的许多示例配置中选择一个,然后逐位添加更多的铃声和口哨.

如果您的问题不是上述问题之一,请显示您的配置,并提供有关您遇到的问题的更多详细信息. (不确定您对自动配置的期望,如果log4j2找不到配置文件,这是非常基本的功能,可以将ERROR事件记录到控制台,这很少是足够的.)

要写入您的主目录,可以使用系统属性lookup ${sys:PROPERTYNAME}.以下是一个示例配置:

<Configuration status="trace">
  <Properties>
    <Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property>
  </Properties>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
    <File name="FILE" fileName="${sys:logfile}">
      <PatternLayout>
        <pattern>%d %p [%t] %c{1.} %m%n</pattern>
      </PatternLayout>
    </File>
  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="STDOUT" level="ERROR" />
      <AppenderRef ref="FILE" />
    </Root>
  </Loggers>
</Configuration>

猜你在找的Java相关文章