首页 \ 问答 \ 如何打印Log4j java sql logger(How to print Log4j java sql logger)

如何打印Log4j java sql logger(How to print Log4j java sql logger)

我想将log4j用于java和sql。 我想在我的班级中不使用“logger.debug(”log4j logger“)”打印java和sql日志。

下面是使用的类和log4j属性

package com.log4j;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogTest {

public static void main(String[] args) throws Exception{
      final  Logger logger = Logger.getLogger(LogTest.class);
      PropertyConfigurator.configure("log4j.properties");
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        Connection   conn = DriverManager.getConnection("XXX", "YYY", "ZZZ");          
       String inserQuery = "insert into table1 (name,id) values (?,?)";
       PreparedStatement prestat = conn.prepareStatement(inserQuery);
       prestat.setString(1, "Test");
       prestat.setString(2, "2");
       prestat.executeUpdate();
    }
    catch (Exception ex)
    {
        System.out.println("Exception: " + ex.getMessage() + "");

    }
}

}

以下是log4j属性

log4j.rootLogger=DEBUG,CA
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

请指教。

任何帮助将不胜感激

谢谢


I want to use log4j for java and sql. i want to print the java and sql logs without using "logger.debug("log4j logger")" in my class.

Below are the class and log4j properties used

package com.log4j;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogTest {

public static void main(String[] args) throws Exception{
      final  Logger logger = Logger.getLogger(LogTest.class);
      PropertyConfigurator.configure("log4j.properties");
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        Connection   conn = DriverManager.getConnection("XXX", "YYY", "ZZZ");          
       String inserQuery = "insert into table1 (name,id) values (?,?)";
       PreparedStatement prestat = conn.prepareStatement(inserQuery);
       prestat.setString(1, "Test");
       prestat.setString(2, "2");
       prestat.executeUpdate();
    }
    catch (Exception ex)
    {
        System.out.println("Exception: " + ex.getMessage() + "");

    }
}

}

Below is the log4j properties

log4j.rootLogger=DEBUG,CA
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Please advise.

Any help will be appreciated

Thanks


原文:
更新时间:2021-12-11 18:12

最满意答案

以下应该做你想要的:

import signal
import threading
from time import sleep

keep_running = True

def signal_handler(signal, frame):
    global keep_running
    keep_running = False
    print("Received SIGINT\n")

signal.signal(signal.SIGINT,signal_handler)

def work():
    while keep_running:
        sleep(2)
    print("Worker finished\n")

nbThreads = 2
threads = []
for i in range(nbThreads):
    t = threading.Thread(target=work)
    t.setDaemon(True)
    t.start()
    threads.append(t)

while any([t.isAlive() for t in threads]):
    sleep(0.1)

让这个程序运行产生

Received SIGINT

Worker finished
Worker finished

说明:当按下CTRL-C时,程序接收到一个signal_handlersignal_handler调用已注册的处理程序signal_handler ,将全局变量keep_running设置为False 。 同时主线程等待所有生成的线程死亡。 因此,这些线程可以在主线程终止之前完成它们正在做的任何事情(在这种情况下是sleep )。

注意:在Linux上等待信号可以通过调用signal.pause() (替换sleep(0.1) )来实现。 在Windows上,这是不可能的,因为此功能不存在。 因此,上述内容应该不依赖于平台。


The following should do what you want:

import signal
import threading
from time import sleep

keep_running = True

def signal_handler(signal, frame):
    global keep_running
    keep_running = False
    print("Received SIGINT\n")

signal.signal(signal.SIGINT,signal_handler)

def work():
    while keep_running:
        sleep(2)
    print("Worker finished\n")

nbThreads = 2
threads = []
for i in range(nbThreads):
    t = threading.Thread(target=work)
    t.setDaemon(True)
    t.start()
    threads.append(t)

while any([t.isAlive() for t in threads]):
    sleep(0.1)

Letting this program run yields

Received SIGINT

Worker finished
Worker finished

Explanation: When CTRL-C is pressed the program receives a signal.SIGINT which causes the registered handler signal_handler to be called setting the global variable keep_running to False. Meanwhile the main thread waits for all spawned threads to die. Thus these threads can finish whatever they were doing (in this case sleep-ing) before the main thread terminates.

Note: On Linux waiting for a signal could be achieved by calling signal.pause() (replacing the sleep(0.1)). On Windows this is not possible because this function does not exist. Therefore the above should be less platform-dependant.

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。