您好我当前的项目要求我,如标题所示,当开发人员在他们的计算机上运行应用程序时,登录到控制台,并在服务器上运行应用程序时登录到滚动日志文件。到目前为止,我已经创建了一个log4j2.properties文件(见下文),它可以很好地记录到控制台和滚动日志文件。我已经研究过,我已经在Apache网站和其他人看到过使用Routing appender的示例,但所有示例都使用了log4j2.xml文件。是否可以使用log4j2.properties文件创建它?谢谢。
status = error
dest = err
name = PropertiesConfig
property.filename = C:\\MyApplications\\ExampleApplication\\Example.log
filter.threshold.type = ThresholdFilter
filter.threshold.level = debug
#LOG TO CONSOLE
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{HH:mm:ss.SSS} [%t] %-5level %logger{1} - %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = debug
#LOG TO ROLLING FILE
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = ExampleLogBackup-%d{MM-dd-yy}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{HH:mm:ss.SSS} [%t] %-5level %logger{1} - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 10
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=1MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 20
logger.rolling.name = com.myapp.example
logger.rolling.level = debug
logger.rolling.additivity = true
logger.rolling.appenderRef.rolling.ref = RollingFile
rootLogger.level = debug
rootLogger.appenderRef.stdout.ref = STDOUT
答案 0 :(得分:1)
在RollingFileAppender
配置 -
appender.routing.type = Routing
appender.routing.name = routingLogger
appender.routing.script.type = Script
appender.routing.script.name = RoutingCondition
appender.routing.script.language = JavaScript
# Condition is - if isLocalMachine VM argument is true (-DisLocalMachine=true),
# then log messages in console else log messages in file.
appender.routing.script.value = var imports = new JavaImporter(java.lang); \
with (imports) { \
System.getProperty("isLocalMachine") == "true" ? "console" : "file"; \
}
appender.routing.routes.type = Routes
appender.routing.routes.route1.type = Route
appender.routing.routes.route1.ref = STDOUT
appender.routing.routes.route1.key = console
appender.routing.routes.route2.type = Route
appender.routing.routes.route2.ref = RollingFile
appender.routing.routes.route2.key = file
然后在RoutingAppender
-
Logger
logger.rolling.appenderRef.routing.ref = routingLogger
RootLogger
-
rootLogger.appenderRef.routing.ref = routingLogger
日志路由将根据isLocalMachine VM argument
的值完成。如果isLocalMachine VM argument
为true
(-DisLocalMachine=true
),则在控制台中记录消息,然后在文件中记录消息。
因此,在本地开发环境中,您可以将此VM argument
设置为true
值以启用登录控制台。对于Server,无需设置此VM argument
。