我正在使用 Log4j 日志框架将日志插入到 oracle 数据库中。但是 log4j 属性文件中的插入查询需要花费大量时间来执行并且使应用程序非常慢。当我从 java 代码中删除日志语句时,应用程序运行良好。起初,我认为插入数据库需要时间,但是将日志写入外部文件也需要很多时间。
任何人都可以提出解决方案吗?
谢谢你,达瓦尔·马赫什瓦里。
如果您的应用程序正在开发中,那么日志级别应该是debug
并且在记录之前您应该检查 isDebugEnabled() 然后记录您的字符串。
但是如果您的应用程序处于生产状态,那么日志级别应该是info
并且您必须在日志文件中记录最少的信息。
始终在您的应用程序中使用至少两个日志级别,一个用于调试模式(用于开发环境),另一个用于生产模式,并且生产日志应该最少。
这是您可以加快应用程序的方式。
第二件事,如果您想将日志持久化到数据库中,那么创建一个
scheduler task
其职责是从平面文件中读取日志并将它们持久化到数据库中,并安排它每天只运行一次。
我建议不要遵循你现在遵循的技术。
首先,我不确定你为什么要在 DB 中记录 log4j 的输出。无论如何,如果有必要尝试这样的事情。让日志文件按原样写入文件,然后在文件作为批处理关闭到数据库时运行一个线程从磁盘转储该文件。
在这种情况下,您的应用程序将与 DB 的延迟分开。
还有其他解决方案也使用 JMS。您可以将其写入 JMS 队列,另一方面,消费者可以读取队列并将其写入数据库。
不过,这取决于您要解决的问题类型。
看看有帮助
在 Logging 中包含级别。例如,在生产中仅记录应用程序级别的异常和错误[ERROR level]。
如果是跟踪日志(如用户操作),不要将它们写入文件,直接将它们添加到数据库中。希望这可以帮助。