问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么将logback的日志信息异步到oracle数据库

发布网友 发布时间:2022-04-09 12:27

我来回答

4个回答

热心网友 时间:2022-04-09 13:56

logback是log4j作者推出的新日志系统,原生支持slf4j通用日志api,允许平滑切换日志系统,并且对简化应用部署中日志处理的工作做了有益的封装。
官方地址为:http://logback.qos.ch/
Logback日志需要依赖一下jar包:
slf4j-api-1.6.0.jar
logback-core-0.9.21.jar
logback-classic-0.9.21.jar
logback-access-0.9.21.jar
主配置文件为logback.xml,放在src目录下或是WEB-INF/classes下,logback会自动加载
logback.xml的基本结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG"><appender-ref ref="STDOUT" /></root>
</configuration>
logback.xml的基本配置信息都包含在configuration标签中,需要含有至少一个appender标签用于指定日志输出方式和输出格式,root标签为系统默认日志进程,通过level指定日志级别,通过appender-ref关联前面指定顶的日志输出方式。
例子中的appender使用的是ch.qos.logback.core.ConsoleAppender类,用于对控制台进行日志输出
其中encoder标签指定日志输出格式为“时间 线程 级别 类路径 信息”
logback的文件日志输出方式还提供多种日志分包策略
1.文件日志
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>E:/logs/mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>
<maxHistory>5</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>
</encoder>
</appender
文件日志输出采用的ch.qos.logback.core.rolling.RollingFileAppender类,它的基本属性包括<file>指定输入文件路径,encoder指定日志格式。其中,rollingPolicy标签指定的是日志分包策略,ch.qos.logback.core.rolling.TimeBasedRollingPolicy类实现的是基于时间的分包策略,分包间隔是根据fileNamePattern中指定的事件最小单位,比如例子中的%d{yyyy-MM-dd_HH-mm}的最小事件单位为分,它的触发方式就是1分钟,策略在每次想日志中添加新内容时触发,如果满足条件,就将mylog.txt复制到E:/logs/目录并更名为mylog-2010-06-22_13-13.1.log,并删除原mylog.txt。maxHistory的值为指定E:/logs目录下存在的类似mylog-2010-06-22_13-13.1.log文件的最大个数,当超过时会删除最早的文件。此外,策略还可以互相嵌套,比如本例中在时间策略中又嵌套了文件大小策略,ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP实现对单文件大小的判断,当超过maxFileSize中指定大大小时,文件名中的变量%i会加一,即在不满足时间触发且满足大小触发时,会生成mylog-2010-06-22_13-13.1.log和mylog-2010-06-22_13-13.2.log两个文件。
2.数据库日志
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<dataSource
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
<user>root</user>
<password>root</password>
</dataSource>
</connectionSource>
</appender>
数据库输出使用ch.qos.logback.classic.db.DBAppender类,数据源支持c3p0数据连接池,例子中使用的MySql,其他配置方式请参考官方文档。
使用数据库输出需要在数据库中建立3个表,建表脚本如下
# Logback: the reliable, generic, fast and flexible logging framework.
# Copyright (C) 1999-2010, QOS.ch. All rights reserved.
#
# See http://logback.qos.ch/license.html for the applicable licensing
# conditions.
# This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.
#
# It is intended for MySQL databases. It has been tested on MySQL 5.1.37
# on Linux

BEGIN;
DROP TABLE IF EXISTS logging_event_property;
DROP TABLE IF EXISTS logging_event_exception;
DROP TABLE IF EXISTS logging_event;
COMMIT;

BEGIN;
CREATE TABLE logging_event
(
timestmp BIGINT NOT NULL,
formatted_message TEXT NOT NULL,
logger_name VARCHAR(254) NOT NULL,
level_string VARCHAR(254) NOT NULL,
thread_name VARCHAR(254),
reference_flag SMALLINT,
arg0 VARCHAR(254),
arg1 VARCHAR(254),
arg2 VARCHAR(254),
arg3 VARCHAR(254),
caller_filename VARCHAR(254) NOT NULL,
caller_class VARCHAR(254) NOT NULL,
caller_method VARCHAR(254) NOT NULL,
caller_line CHAR(4) NOT NULL,
event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
COMMIT;
BEGIN;
CREATE TABLE logging_event_property
(
event_id BIGINT NOT NULL,
mapped_key VARCHAR(254) NOT NULL,
mapped_value TEXT,
PRIMARY KEY(event_id, mapped_key),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
BEGIN;
CREATE TABLE logging_event_exception
(
event_id BIGINT NOT NULL,
i SMALLINT NOT NULL,
trace_line VARCHAR(254) NOT NULL,
PRIMARY KEY(event_id, i),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;
3.其他
此外logback还提供基于mail,基于jmx等多种日志输出方式,你也可以通过继承ch.qos.logback.core.AppenderBase 自己写appender实现

除了使用默认的日志主线程<root>外,还可以通过<logger>标签定制其他日志线程如:
<logger name="com.test" level="DEBUG">
<appender-ref ref="STDOUT" />
</logger>
其中name指定线程针对的包路径,level是日志级别,<appender-ref>定义使用那种appender。
例如要实现打印jdbc提交的sql,可以加入如下logger:
<logger name="java.sql.Connection" level="DEBUG"><appender-ref ref="STDOUT" /></logger>
贴出我完整的logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- log output to file -->
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>E:/logs/mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>
<maxHistory>5</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>
</encoder>
</appender>
<!-- log output to console -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- log output to db-->
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<dataSource
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://127.0.0.1:3306/tunneldb</url>
<user>root</user>
<password>123123</password>
</dataSource>
</connectionSource>
</appender>

<logger name="com.ttt.ttt" level="DEBUG">
<appender-ref ref="STDOUT" />
</logger>

<logger name="java.sql.Connection" level="DEBUG"><appender-ref ref="STDOUT" /></logger>
<!-- 打印sql
<logger name="java.sql.Statement" level="DEBUG"><appender-ref ref="STDOUT" /></logger>
<logger name="java.sql.PreparedStatement" level="DEBUG"><appender-ref ref="STDOUT" /></logger>

<logger name="java.sql.ResultSet" level="DEBUG"><appender-ref ref="STDOUT" /></logger>
-->
<root level="DEBUG"><appender-ref ref="ROLLING" /></root>
</configuration>

总结:logback提供了丰富而高效的日志输出方式,并通过滚动策略,将实施时复杂的备份策略整合,极大的简化的部署成本。

热心网友 时间:2022-04-09 15:14

 logback日志写入oracle数据库的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "  http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd">
<configuration>

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%-20(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{80} - %msg%n</pattern>
</layout>
</appender>

<!--
<property name="log.base" value="../logs/" /> <appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.base}.log</file> <rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.base}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> </rollingPolicy> <layout
class="ch.qos.logback.classic.PatternLayout"> <pattern>%-20(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{80} -
%msg%n</pattern> </layout> </appender>

<appender name="db-classic-oracle" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.commons.dbcp.BasicDataSource">
<driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
<url>jdbc:oracle:thin:@192.168.3.250:1521:devdb</url>
<user>logback</user>
<password>logback</password>
</dataSource>
</connectionSource>
</appender>



<appender name="db-classic-mysql" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://localhost:3306/logbackdb</url>
<user>root</user>
<password>qqqqqq</password>
</connectionSource>
</appender>

<appender name="db-access" class="ch.qos.logback.access.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://localhost:3306/logbackdb</url>
<user>root</user>
<password>qqqqqq</password>
</connectionSource>
<insertHeaders>true</insertHeaders>
</appender>
-->
<appender name="db-classic-mysql-pool" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.commons.dbcp.BasicDataSource">
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<url>jdbc:mysql://localhost:3306/logbackdb</url>
<username>root</username>
<password>qqqqqq</password>
</dataSource>
</connectionSource>
</appender>

<appender name="db-classic-oracle-pool" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="org.apache.commons.dbcp.BasicDataSource">
<driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
<url>jdbc:oracle:thin:@192.168.3.250:1521:devdb</url>
<username>logback</username>
<password>logback</password>
</dataSource>
</connectionSource>
</appender>

<root level="WARN">
<appender-ref ref="stdout" />
<appender-ref ref="db-classic-oracle-pool" />
</root>
</configuration>

注意:需要slf4j, logback-core, logback-classic,数据库驱动jar。

热心网友 时间:2022-04-09 16:49

<!-- 将日志存储到oracle数据库中 -->

<appender name="db-classic-oracle" class="ch.qos.logback.classic.db.DBAppender">  
       <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
           <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">                 
               <driverClass>oracle.jdbc.driver.OracleDriver</driverClass>  
               <url>jdbc:oracle:thin:@localhost:1521:ZYD</url>  
               <user>scott</user>  
               <password>tiger</password>
               <sqlDialect class="ch.qos.logback.core.db.dialect.OracleDialect" />   
           </dataSource>  
       </connectionSource>
       <sqlDialect class="ch.qos.logback.core.db.dialect.OracleDialect" />  
   </appender>

 提示:不理解的,请认真仔细看清楚

热心网友 时间:2022-04-09 18:40

1.将日志按一定约束做好数据,定时推送到Oracle服务器某一目录
2.Oracle启动一个定时job,每小时,每天或者每周启动,将新的日志文件导入(这里plsql里面应该支持导入语句的)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
平安e家保是什么险 2023年高级会计师报名时间和条件 2022高级会计师报考条件要求是什么? 问几个英文语法问题,希望能正确回答~ 女生锁骨下长痣,左右都有 不是很对称 寓意什么呐? 抖音上传照片音乐短怎么办 断夜奶好方法 婴儿断夜奶最佳方法 建设银行,你打算坑害多少优质客户? 【PS教程】如何做出凹陷字体效果的氛围海报 cpu风扇转速1250—1300转/分正常么? 为什么我的CPU温度有60度但是风扇转速确只有1000到1200之间..太低了吧. 浙江宁波地区有什么特产或者其他东西适合过年带回家? 我的CPU风扇转速只有1000-1200转/分,正常吗?是不是要换了? 宁波都有什么好玩的啊? cpu风扇转速很慢,什么原因.才1200左右,有时候突然加快,有时候突然停止,都会导致电脑自动重启.很是郁闷 电脑风扇转速1200正常吗 excel表格打印时有缺口 CPU风扇转速 | 1200 转左右/分 是否正常? 我的CPU风扇转速1200每分钟温度在50上下请问正常吗? 我的CPU风扇转速只有1200转正常吗? 地热专用地板都有那些 鸭可以保姜酒汤吗? 杭州有绿羽辅材的代理商吗?我家装地暖的,谁知道有绿羽辅材的地暖公司啊,谢谢了 ,对好多给我几个。 关于WPS 表格 排版的问题 请高手指点 东莞七大景点有哪些? 慈溪都有什么特产啊 18MM重蚁木三层复合地板可以做地暖吗 现在地暖产品中什么最好 咨询一下,地热的水暖主管线多大口径能带动多大面积供暖!! 着急 谁能帮助解答下!!! cpu风扇转速500-600每分最高1200温度36这样正常吗 中国品牌战略促进委员会是个骗子机构 cpu风扇转速1200-1400之间,最多不超过1500,温度33-35,哪位高手能告诉在下这正常吗?感谢! 名牌战略对企业的效应 中国国际名牌战略促进会诈骗机构警惕 cpu风扇转速1200左右,温度在50左右!~正常吗!~ 鸿茅药酒有何疗效? 我的电脑CPU风扇转速突然变成1200了,怎么恢复正常,风扇没有坏 中国品牌建设促进会的建设宗旨 中国战略文化促进会属于哪个部门? 我的CPU温度超过30了可是风扇转速才1200RPM左右. 中国名牌战略推进委员会的中国世界名牌产品 中国品牌建设促进会的组织机构 E5300CPU风扇转速才1200、急! 金窗爱的分工情况 上海万丰奥特集团的成长记录 联想KX4155,CPU风扇转速一直在1200-1400左右,正常吗? 什么叫做权威说服 我的电脑 风扇转速才1200——1300 cpu温度39——43 问一下 正常吗 还有 43度的时候还有点噪音 中交第二航务工程局有限公司的主要荣誉