log4j2.xml中的xml条件代码
我试图在我的log4j2.xml中的xml条件代码,xml,xslt,log4j2,Xml,Xslt,Log4j2,我试图在我的log4j2.xml文件中创建一个条件语句,但它似乎不接受任何条件格式。我尝试了各种选项,如xslt等,但似乎不起作用。这里的任何帮助都会很好 <?xml version="1.0" encoding="UTF-8"?> <configuration status = "WARN"> <appenders> <if> <conditions> <condition prop
log4j2.xml
文件中创建一个条件语句,但它似乎不接受任何条件格式。我尝试了各种选项,如xslt等,但似乎不起作用。这里的任何帮助都会很好
<?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>
我的目的是根据操作系统创建单独的日志路径。我发现appender错误是因为没有设置MyRollingLog值。然而,我无法解决的是CLASS\u NOT\u FOUND
错误和无效元素
我得到这个代码的以下错误
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>
%d%p%m%n
log4j2配置不支持条件逻辑
但是,通过使用文件名的系统属性,您可以实现为不同的操作系统(例如,不同的操作系统)提供不同路径的目标。
本文档介绍了如何执行此操作,并提供了一些示例:
如果您希望有条件地登录到不同的附加器或不同的位置(取决于环境),您可以使用默认值添加属性。例:
<Properties>
<Property name="LOG_DIR">${LOG_PATH:-${sys:logging.path:-./log}}</Property>
<Property name="APPENDER">${default.log.appender:-file}</Property>
</Properties>
如果变量“default.log.appender”不存在,则取值“file”。因此,我们可以通过创建或不创建此变量来“有条件地”选择appender。
然后可以选择appender(从现有的appender中)ex
您可以在Log4j2中有条件地添加附加器 我是这样做的。仅当变量设置为true时才有条件地显示控制台输出。我使用的是YAML配置,但您将了解要点。
雷姆科,我知道你是个log4j2提交人。请将条件逻辑带到log4j2,好吗?让我知道提出功能请求的过程。您可以在log4j邮件列表中提出。如果您有这些配置的详细示例,那么Jira票证可能是一个好主意,因为它允许更好的格式和附件。如果你有一个补丁,你会把它附加到Jira票上。讨论通常发生在邮件列表上。嘿,你能解释一下这个
:-
语法是如何工作的吗?我以前没见过它。偶然发现了答案,这是log4j2的一个特性:是的,这是lo4j语法。我相信它的灵感来自LinuxBash语法。它非常流行,因为spring也在SPel(spring表达式)中使用它。
<Loggers>
<Logger name="com.example" level="debug" />
<Root level="INFO">
<AppenderRef ref="${APPENDER}"/>
</Root>
</Loggers>
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\"));"