我试图在我的log4j2.xml
文件中创建一个条件语句,它似乎不接受任何条件格式。我尝试了各种选项,如xslt等,它似乎不起作用。如果有任何帮助就太好了。
我的意图是基于操作系统为日志记录创建单独的路径。我看到appender错误是因为没有设置MyRollingLog值。然而,这是CLASS_NOT_FOUND
的错误,我无法解决和invalid element
.
我得到以下错误的代码…
2014-06-10 17:19:48,771 ERROR Error processing element then: CLASS_NOT_FOUND
2014-06-10 17:19:48,773 ERROR appenders contains an invalid element or attribute "if"
2014-06-10 17:19:48,776 ERROR Unable to locate appender MyRollingLog for logger com.xxx.xyz
如果有任何帮助就太好了。
<?xml version="1.0" encoding="UTF-8"?>
<configuration status = "WARN">
<appenders>
<if>
<conditions>
<condition property="isMac">
<os family="mac" />
</condition>
</conditions>
<then>
<RollingFile name="MyRollingLog" fileName='../logs/CheckView.log'
filePattern="../logs/$${date:yyyy-MM}/CheckView-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>%d %p %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="15 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"></DefaultRolloverStrategy>
</RollingFile>
</then>
</if>
<Console name="Console-out" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %m%n"/>
</Console>
</appenders>
<loggers>
<logger name="com.xxx.xyz" level = "TRACE" additivity="false">
<appender-ref ref="MyRollingLog" />
</logger>
<root level = "ERROR">
<appender-ref ref="Console-out" />
</root>
</loggers>
</configuration>
如果您想有条件地记录到不同的appenters,或不同的地方(取决于环境),您可以添加Properties
默认值。例:
<Properties>
<Property name="LOG_DIR">${LOG_PATH:-${sys:logging.path:-./log}}</Property>
<Property name="APPENDER">${default.log.appender:-file}</Property>
</Properties>
它创建log4j2 'LOG_DIR'变量,它可以取value:变量"$LOG_PATH"的第一个,如果它是空的(部分:-
),那么它会寻找系统变量logging.path
,如果它也是空的,则回退到"./log"。你可以在appender
:
<RollingRandomAccessFile append="true" fileName="${LOG_DIR}/myapp.log" name="file">
如果变量"default.log. log. "Appender"不存在,它的值为"file"。所以我们可以通过创建或不创建这个变量来"有条件地"选择appender。然后,您可以选择appender(从现有的一个),例如
<Loggers>
<Logger name="com.example" level="debug" />
<Root level="INFO">
<AppenderRef ref="${APPENDER}"/>
</Root>
</Loggers>
log4j2配置不支持条件逻辑。
但是,您可以通过使用文件名的系统属性来实现为不同的操作系统提供不同的路径的目标。文档解释了如何做到这一点,并提供了一些示例:http://logging.apache.org/log4j/2.x/manual/configuration.html PropertySubstitution
您可以在Log4j2中有条件地添加追加器
我是这样做的。仅当变量设置为true时才有条件地显示控制台输出。我使用的是YAML配置,但您将获得要点。脚本https://logging.apache.org/log4j/2.0/manual/configuration.html
AsyncLogger:
- name: SampleLogger
level: error
additivity: false
AppenderRef:
- ref: RollingError
- ref: STDOUT
ScriptFilter:
onMatch: ACCEPT
onMisMatch: DENY
Script:
name: ConsoleOutputCheck
language: groovy
value: "return ("true").equalsIgnoreCase(System.getenv("ConsoleOutput"));"