如何在本地运行时登录到控制台,并在使用log4j2在服务器上运行时登录到滚动日志文件?

时间:2017-10-18 15:49:36

标签: logging log4j2

您好我当前的项目要求我,如标题所示,当开发人员在他们的计算机上运行应用程序时,登录到控制台,并在服务器上运行应用程序时登录到滚动日志文件。到目前为止,我已经创建了一个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

1 个答案:

答案 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 argumenttrue-DisLocalMachine=true),则在控制台中记录消息,然后在文件中记录消息。

因此,在本地开发环境中,您可以将此VM argument设置为true值以启用登录控制台。对于Server,无需设置此VM argument