当前位置: 首页 > 知识库问答 >
问题:

Log4J2属性替换-默认值

杭曦
2023-03-14

我只是想知道有没有什么方法可以为log4j中的属性替换提供默认值呢?

我想在Java系统属性中传递文件路径,然后与“${env:MySystemProperty}”一起使用。但如果开发人员忘记设置此属性怎么办?那么我希望在log4j2.xml中定义一些有意义的默认值。

你知道如何实现这个功能吗?

编辑:

环境替换对我不起作用:

standalone.conf

-DoauthLoginLogPath=/path/oauth2.log

log4j2.xml

<Appender type="File" name="File" fileName="${env:oauthLoginLogPath}" immediateFlush="true">
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}" immediateFlush="true">

我可以在wildfly控制台看到属性,我重新启动了服务器,但我无法完成它。

共有2个答案

燕智
2023-03-14

您可以使用相同的${sys:propName:-default}语法。注意':-',它被称为“变量默认值定界符”。“variable default value delimiter”的默认值是:-,就像在bash和其他*nix shell中一样。

您可以在StrSupportor类的Log4J2文档中了解更多有关这方面的信息。

若要使用相同的示例,请执行以下操作:

<Configuration status="debug">
  ...
    <Appenders>
        <Appender type="File" name="File"
                  fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
        ....
    </Appenders>
</Configuration>
长孙正卿
2023-03-14

默认属性映射

查看http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution您可以在配置文件中指定默认属性映射。其形式如下:

<Configuration status="debug">
  <Properties>
    <Property name="oauthLoginLogPath">default/location/of/oauth2.log</Property>
  </Properties>
  ...
  <Appenders>
    <Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}">
    ....
</Configuration

然后,如果使用系统属性-doauthlogpath=/path/oauth2.log启动html" target="_blank">应用程序,将首先在系统属性中查找文件appenderfilename值,但如果失败,它将返回到log4j2.xml配置文件顶部的properties部分中定义的属性。

内联

第二种方法是内联提供默认值:

<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">

通常,所有Log4j2查找都遵循以下模式:${type:key:-defaultvalue}

环境与系统

顺便说一下,env前缀用于环境变量(如Windows上的%path%),与sys无关,后者是Java系统属性。另见http://logging.apache.org/log4j/2.x/manual/lookups.html

 类似资料:
  • 20.1 属性默认值 Spring Boot支持的一些库使用缓存来提高性能。例如,模板引擎会缓存已编译的模板,以避免重复解析模板文件。此外,Spring MVC可以在服务静态资源时将HTTP缓存的头部添加到响应中。 虽然缓存功能对生产环境非常有益,但在开发过程中可能会产生反作用,使您无法看到程序中刚刚做出的更改。由于这个原因,spring-boot-devtools默认会禁用那些缓存选项。 缓存选

  • 我在哪里可以找到默认的log4j配置文件的工人和驱动程序? 1) 目前Spark正在将执行器/工作者(stdout/stderr)级别的日志记录到工作文件夹,并将驱动程序级别的日志记录到日志文件夹。 我在哪里可以找到这个配置? 我尝试将Log4j2用于spark,而不是log4j。我正在尝试获取默认属性文件,以便可以将其中的一些内容复制到log4j2属性XML。 2) 另外,是否可以修改当前正在运

  • 本文向大家介绍C#属性的默认值,包括了C#属性的默认值的使用技巧和注意事项,需要的朋友参考一下 示例 可以使用初始化程序(C#6)设置默认值 如果它是只读的,则可以返回如下值:            

  • 我正在使用log4j2进行一个项目,我的log4j2中有一些值。可配置的属性。该项目还将包括其他组件的配置文件。理想情况下,我希望将所有配置保存在一个地方,以便能够在同一个文件中为log4j设置那些可配置的值,这样我就不会有两个不同的地方更改配置值(例如,包括环境变量)。 我在这方面找到的方法并不理想,比如让我的项目的其他部分从主配置文件中读取值,并将它们放入系统变量中,由log4j获取,因为我希

  • 我试图在登录过程中添加用户ip验证。如果用户的ip地址不在数据库中,应用程序应该拒绝身份验证。 问题:根据下面的设置,Auth.AuthenticationProvider()并没有替换默认的DaoAuthenticationProvider,而是将UserIpAuthenticationProvider添加为列表中的第一个AuthenticationProvider。 在用户名/密码组合不正确的

  • 我正在尝试配置tomcat 7.0.23中的RollingFile appender(带有10个日志文件的log4j2(2.0.2)。 当我将${sys:catalina.base}替换为filePattern=“c:/apache-tomcat-7.0.23/logs/app.%I.log”时,它起作用了。 这意味着无法正确解释filePattern。 如何克服这个问题而不必静态地指定日志目录?