java - 如何在运行时设置log4j的DB Credentials

标签 java logging log4j

这是我的 log4j 属性文件。我正在将日志写入数据库。我想在运行时设置数据库凭据

log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.URL=jdbc:sqlserver://172.16.0.201:1433;databaseName=databaseone;autoReconnect=true
log4j.appender.DB.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
log4j.appender.DB.user=username
log4j.appender.DB.password=password$123
log4j.appender.DB.sql=INSERT INTO usage_fact(accessed_date,accessed_item_id,user_id,tenant_id,log_level) VALUES('%d{yyyy-MM-dd HH:mm:ss}','%X{accessed_item_id}','%X{user_id}','%X{tenant_id}','%p')
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

如何捕获 log4j 连接数据库或写入表时出现的 sql 异常。所有异常堆栈跟踪都在控制台上打印,我不想在控制台上打印它。

最佳答案

您可以通过java代码初始化日志框架,如下所示:

public class CoreLogger {
    public static Logger getLogger(final Class moduleName) {
        Logger logger = Logger.getLogger(moduleName);
        Properties prop = new Properties();
        try {
            prop.load(new FileReader("log4j.properties"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        prop.put("log4j.appender.DB.user", "root");
        prop.put("log4j.appender.DB.password", "root");
        PropertyConfigurator.configure(prop);
        return logger;
    }
}

并使用

static Logger log = CoreLogger.getLogger(Demo.class);

在您的类中获取记录器的实例,这样您就可以在运行时设置凭据。

关于捕获文件中的错误,您可以将 stdoutstderr 重定向到日志文件,请参阅 Dario's 答案 log4j redirect stdout to DailyRollingFileAppender了解更多详细信息。

关于java - 如何在运行时设置log4j的DB Credentials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36709409/

相关文章:

java - 无法解析多部分 servlet 请求

java - 帮助使用 Java 编写的 ISBN Checker

同一主机上运行的多个容器的日志记录解决方案

具有共享日志配置的 Gradle 多项目

java - 如何为 DBRef 数组创建字段

logging - Phoenix 删除 [调试] 日志记录

java - Spring Boot 2.3 中不打印自定义异常的 Stacktrace

java - 重定向 xsl :message to log4j

java - 使用 Log4J 的同一类中的不同 Logger

java - 这与 firestore 读取请求有关。 Firestore 在 Android 应用程序中实现