gpt4 book ai didi

logging - Groovy - 根据环境配置日志记录属性

转载 作者:行者123 更新时间:2023-12-02 04:08:25 25 4
gpt4 key购买 nike

我正在编写一个简单的 Groovy 应用程序,需要进行一些日志记录。记录事物的实际属性将取决于特定的环境。例如,在开发时我只想登录到控制台,在测试和生产中我可能想写入文件,在生产中我可能想针对最严重的事件发送电子邮件。

现在我正在做的事情看起来像这样:

import org.apache.log4j.Logger
import org.apache.log4j.PropertyConfigurator

class BaseClass {
protected config

static Logger logger = Logger.getLogger(BaseClient.class)

def BaseClass(env) {
def configFilePath = // whatever

config = new JsonSlurper().parseText(configFile.text)[options.env]

def logConfigFilePath = ['somelogdir', config.log_file].join(File.separator)
PropertyConfigurator.configure(logConfigFilePath)
}
}

然后我所有需要进行日志记录的类都继承自BaseClass

通过这种方式,我可以为每个环境指定不同的文件名,然后我可以从那里读取日志配置。但这似乎有很多样板,并迫使我使用可能不理想的层次结构。

另一方面,here我发现我可以通过简单的注释获得一个记录器。

Is there a way to get different loggers depending on the environment - which may be set at runtime?

最佳答案

基于 tim_yates 的答案,使用 groovy 文件来配置 log4j。例如:

// log4j.groovy
log4j {
rootLogger="DEBUG, A1"
appender.A1 = "org.apache.log4j.ConsoleAppender"
appender.'A1.layout' = "org.apache.log4j.PatternLayout"

if (System.properties['env'] == 'prod') {
appender.'A1.layout.ConversionPattern'="prod %-4r [%t] %-5p %c %x - %m%n"
} else {
appender.'A1.layout.ConversionPattern'="dev %-4r [%t] %-5p %c %x - %m%n"
}
}

然后让你的脚本使用它:

@GrabConfig(systemClassLoader=true)
@Grab(group='log4j', module='log4j', version='1.2.17')

import groovy.util.logging.Log4j
import org.apache.log4j.PropertyConfigurator

@Log4j
class Test {
def dosome() {
log.info('Logging!')
}

static main( args ) {
def config = new ConfigSlurper().parse(new File('log4j.groovy').toURL())
PropertyConfigurator.configure(config.toProperties())

new Test().dosome()
}
}

最后,使用系统属性中的环境启动您的程序:

groovy -Denv=prod Test.groovy

关于logging - Groovy - 根据环境配置日志记录属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11504197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com