『壹』 log4配置文件怎样写入日志名到数据库中
1.创建日志数据表:view plainprint?CREATE02TABLE02log02(02020202[Id]02[int]02IDENTITY02(1,021)02primary02key02NOT02NULL02,02020202[Lg_Date]02[datetime]02NOT02NULL02,02020202[Lg_Thread]02[varchar]02(50)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Level]02[varchar]02(20)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Class]02[varchar]02(200)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Message]02[varchar]02(2000)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL0202)0202GO02022.写log4j.properties文件,这里我的数据库举动是用的JTDS:引用# level : 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。# Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。log4j.rootLogger=ERROR,DATABASElog4j.addivity.org.apache=true# 用于数据库log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.DATABASE.URL=jdbc:jtds:sqlserver://localhost:1433;DatabaseName=databasenamelog4j.appender.DATABASE.driver=net.sourceforge.jtds.jdbc.Driverlog4j.appender.DATABASE.user=usernamelog4j.appender.DATABASE.password=password# 本处设置为"WARN"以上级别在数据库存储(默认情况使用rootLogger中的设置)log4j.appender.DATABASE.Threshold=DEBUGlog4j.appender.DATABASE.sql=INSERT INTO log(optime,thread,infolevel,class,message) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')# 写入数据库中的表LOG4J的Message字段中,# 内容%d(日期)%c: 日志信息所在地(类名)%p: 日志信息级别%m: 产生的日志具体信息 %n: 输出日志信息换行log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayoutlog4j.appender.DATABASE.layout.ConversionPattern=[framework] %d – %c -%-4r [%t] %-5p %c %x – %m%n3.在程序中需要将日志信息写入数据库的地方写入如下代码:view plainprint?
『贰』 求批处理:读取所有文件名赋值给变量,并且变量循环执行一条命令
如果 命令行 可以这样写 就简单了:convlog1.exe -i d:\logw3c\ex110309.log -o d:\logncsa\ -l comb因为每行不一样的地方只有一处。先在 d:\logw3c\ 下执行 tree /f > a.txt然后用记事本打开 a.txt显示:(类似这样)Folder PATH listingVolume serial number is 3B48-12F8C:. 0001.log 0002.log 0003.log 0004.logNo subfolders exist 把两头没用的都删了 只留下中间有用的文件名。然后查找替换: 把 四个空格 替换为 convlog1.exe -i d:\logw3c\ 就变成了convlog1.exe -i d:\logw3c\0001.logconvlog1.exe -i d:\logw3c\0002.logconvlog1.exe -i d:\logw3c\0003.logconvlog1.exe -i d:\logw3c\0004.log然后 再查找替换: 把 .log 替换为 .log -o d:\logncsa\ -l comb 就变成了convlog1.exe -i d:\logw3c\0001.log -o d:\logncsa\ -l comb convlog1.exe -i d:\logw3c\0002.log -o d:\logncsa\ -l comb convlog1.exe -i d:\logw3c\0003.log -o d:\logncsa\ -l comb convlog1.exe -i d:\logw3c\0004.log -o d:\logncsa\ -l comb 然后复制 粘贴到一个 cmd 框里面就能运行了。如果 同一行里 必须指定两次文件名,那么还是写一个小的EXE处理一下吧。
『叁』 本人新手,有关js,闭包,return,全局变量访问函数内部变量以及函数内的函数访问外部变量。大神帮帮忙!
如果这个你还需要答案的话,我可以帮你整下。。。因为我看日期应该很久之前的问题了
『肆』 易语言怎么只获取.log文件最新更新内容
你好,你这个问题,其实如果简单解决有很多办法,但是如果针对日志的话,日志有一个特性就是错误过多的话文件有可能极速变大,如果是简单的命令读取不建议使用。
所以我临时帮你写了一个大日志文件读取并显示最后一行,我进行了简单测试理论 几个G以上单日志文件都是没有问题的,如果有问题可以继续追问
同时说明,在进行系统日志记录的时候建议按照天,或小时等分别建立日志文件比较好
.版本2.子程序GetNewLogContent,文本型.参数FilePath,文本型,,要读入的文件的路径.局部变量FileHandler,整数型.局部变量ReadLocation,整数型.局部变量ReadContent,文本型.局部变量TemChar,文本型'判断是否已经产生日志文件如果未产生返回空.如果真(文件是否存在(FilePath)=假)返回(“”).如果真结束FileHandler=打开文件(FilePath,1,1)移到文件尾(FileHandler)'如果当前读写位置为0表示内容为空进行空返回ReadLocation=取读写位置(FileHandler).如果真(ReadLocation≤0)关闭文件(FileHandler)返回(“”).如果真结束ReadLocation=ReadLocation-1移动读写位置(FileHandler,1,ReadLocation)TemChar=读入文本(FileHandler,1).如果真(取代码(TemChar,)=10)ReadLocation=ReadLocation-1移动读写位置(FileHandler,1,ReadLocation)TemChar=读入文本(FileHandler,1).如果真结束.判断循环首(取代码(TemChar,)≠10且ReadLocation>0)'输出调试文本(到文本(取代码(TemChar,))+“”+TemChar)ReadLocation=ReadLocation-1移动读写位置(FileHandler,1,ReadLocation)TemChar=读入文本(FileHandler,1).判断循环尾()ReadContent=读入一行(FileHandler)关闭文件(FileHandler)返回(ReadContent)
『伍』 写一个shell脚本,读取配置文件算出配置文件中是数字的和。 配置文件sum.conf 1 a 2
给你举个例子吧,下面是我写的一个读取配置参数的问题其中 for i in `cat $V_CFG_DIR/tab_tmp2.cfg` 是读取配置文件tab_tmp2.cfg如果你参数的名字需要通过参数来传递的话那就改下,添加一个参数并把tab_tmp2.cfg换成你添加的参数(就像参数V_DATA_DATE一样通过外部传入),另外加法求和你网络下就可以搞定了,快看看吧,有详细的注释 ##############################################################功能:装载指定目录数据#作者:PENGWEI#时间:2015-11-18############################################################## 数据日期参数,待传入V_DATA_DATE=$1#FTP完成后数据存放路径V_DATA_DIR=/home/almusr/data/odsdata/FTP/$V_DATA_DATE# FTP完成后生成的标志文件所在路径V_FTP_FLAG=/home/almusr/data/etl_load/FTPOK# 解压数据前备份数据的存放路径V_DATA_BAK=/home/almusr/data/odsdata/odsdata_bak# 配置文件存放路径V_CFG_DIR=/home/almusr/cfg#日志文件LOGDIR=/home/almusr/log/Loaddata_logLOGFILE=$LOGDIR/LoadData_$V_DATA_DATE.log# 初始化系统参数DBNAME=ALMDBUSER=almusrPASSWORD=almusrSCHEMA=ODSUSR#如果 日志目录不存在if [ ! -d "${LOGDIR}" ] then #建立目录 mkdir -p "${LOGDIR}" fi#\n –回车echo "\n日志文件[$LOGFILE]\n"#日志函数recordLog(){ echo `date +"%Y-%m-%d %T"`": $1" | tee -a $LOGFILE return 0}#判断参数个数if [ $# -ne 1 ]then recordLog "Usage:$0 directory" exit 1fi# $?表示上述命令执行后返回的状态(执行成功返回0 执行不成功返回非0)if [ $? -ne 0 ] then recordLog "cd $V_DATA_DIR error !" exit 1fi#连接数据库db2 connect to $DBNAME user $USER using $PASSWORDif [ $? -ne 0 ]then recordLog "connect[$DBNAME] fail!" exit 1fi#加载数据 RETVAL=0for i in `cat $V_CFG_DIR/tab_tmp2.cfg`do#读取表名并输出 TABLE_NAME=`echo $i | awk -F "," '{print $1}'` #读取文件后缀名并输出 echo " the table_name is $TABLE_NAME" #拼接文件名 FILENAME=${TABLE_NAME}.del #解压缩 临时变量 FILENAME_TMP=$FILENAME.gz echo "the FILENAME is $FILENAME" recordLog "the FILENAME $FILENAME!" # 第一步:对压缩文件备份,先扫描FTP完成标志,如果存在就说明FTP过程已结束,开始备份,否则等待继续扫描 #进去FTP完成标志所在目录 cd $V_FTP_FLAG #扫描FTP完成标志 if [[ ! -e "${V_DATA_DATE}.ok" ]]; then sleep 1800 else cd $V_DATA_BAK #备份文件 cp -r $V_DATA_DIR ${V_DATA_DATE}_bak cd ${V_DATA_DATE}_bak rm -rf ${V_DATA_DATE} fi recordLog "Copy data was finished" # 第二步:删除30天前的备份数据 v_BakFileDate=`date -d "- 30 day ${V_DATA_DATE}" +%Y%m%d` cd $V_DATA_BAK rm -rf ${v_BakFileDate}_bak recordLog "Removed the bak_data of 30 days before!" # 第三步:对文件进行解压 cd $V_DATA_DIR if [ -f $FILENAME_TMP ] then echo "$FILENAME_TMP must gunzip" #解压文件 gunzip $FILENAME_TMP echo "$FILENAME_TMP ,gunzip success" else echo "$FILENAME exist,next step" recordLog "$FILENAME exist,next step!" fi # 第四步:数据加载 if [ -f $FILENAME ] then # CMD="db2 \"load from $FILENAME of del MODIFIED BY coldel0x23 usedefaults keepblanks decpt. replace into ODSUSR.$TABLE_NAME data buffer 10000\" > $LOGDIR/$TABLE_NAME_XX.log 2>&1" CMD="db2 \"load from $FILENAME of del replace into ODSUSR.$TABLE_NAME data buffer 10000\" > $LOGDIR/$TABLE_NAME.log 2>&1" echo "$FILENAME is loading" eval $CMD fi echo "load data is over" recordLog "load data is over" # 第五步:判断加载是否正确#判断是否正常加载 read_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows read" | awk -F'=' '{print $2}'` skip_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows skipped" | awk -F'=' '{print $2}'` load_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows loaded" | awk -F'=' '{print $2}'` reject_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows rejected" | awk -F'=' '{print $2}'` delete_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows deleted" | awk -F'=' '{print $2}'` commit_num=`cat $LOGDIR/$TABLE_NAME.log | grep "Number of rows committed" | awk -F'=' '{print $2}'`echo "$read_num,$skip_num,$load_num,$reject_num,$delete_num,$commit_num" #条件判断加载是否正确 if [[ "$read_num" -eq "$load_num" && "$load_num" -eq "$commit_num" ]] then echo "Data loading is perfect!" else cat $LOGDIR/$TABLE_NAME.log recordLog "loading [$V_DATA_DIR/$TABLE_NAME] error!" RETVAL=1 continue fidonedb2 connect reset >/dev/null 2>&1if [ $RETVAL != 0 ]then recordLog "load data directory [$V_DATA_DIR] error!!!"else recordLog "load data directory [$V_DATA_DIR] successful!!!"fi # 第五步:完成退出exit 0你把这个问题看懂了估计你那个就没问题了有什么问题再交流
『陆』 用Eviews做多元对数回归分析,如何输入命令
工具/材料:Eviews软件,电脑
1.打开电脑,桌面找到Eviews软件,建立workfile,点击左上角file—new—workfile建立,填写相关起始日期和命名,然后选择“OK”,。
『柒』 怎样用adb抓取log
ADB环境变量配置 1. 将ADB文件拷入D盘下(可根据自己喜好随意放置) 2. 右键我的电脑—属性—高级—环境变量 3. 在系统变量里找到Path变量,双击后弹出对话框。在变量值最前面输入D:\ADB;(最后以分号结束) 4.确定后,环境变量配置完成。 ADB 放在Windows system 32下 重启电脑才能生效。 ADB抓活机log 1.手机出了问题,但没死机(如:TP失效,通话自动中断等) 2.连接电脑后,开始–运行–cmd(电脑设备管理器这会有2个高通端口+1个ADB端口) 3.先输入adb shell 回车查看是否进手机系统(光标变成$表示已进入手机系统),确定能进入系统后,按ctrl+c退出。 ——————————抓log——————————————– 4.输入 adb shell dmesg > c:\log-dmesg.txt 回车后自动保存到c盘 5.输入 adb shell logcat > c:\logcat.txt 回车后过一会按ctrl+c退出并保存到c盘 6.输入adb shell logcat -b radio > c:\logcat-radio.txt 回车后过一会按ctrl+c退出并保存到c盘 注:如果adb命令无法识别,可以先配置下环境变量
『捌』 如何查看linux的系统log日志
日志文件详细地记录了系统每天发生的各种各样的事件。用户可以通过日志文件检查错误产生的原因,或者在受到攻击和黑客入侵时追踪攻击者的踪迹。日志的两个比较重要的作用是:审核和监测。Linux系统的日志主要分为两种类型:1.进程所属日志由用户进程或其他系统服务进程自行生成的日志,比如服务器上的access_log与error_log日志文件。2.syslog消息系统syslog记录的日志,任何希望记录日志的系统进程或者用户进程都可以给调用syslog来记录日志。日志系统可以划分为三个子系统:1. 连接时间日志–由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。2. 进程统计–由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。3. 错误日志–由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。2.察看日志文件 Linux系统所有的日志文件都在/var/log下,且必须有root权限才能察看。日志文件其实是纯文本的文件,每一行就是一个消息。察看方式有很多。1. cat命令。日志文件总是很大的,因为从第一次启动Linux开始,消息都累积在日志文件中。如果这个文件不只一页,那么就会因为显示滚动得太快看不清文件的内容。2. 文本编辑器。最好也不要用文本编辑器打开日志文件,这是因为一方面很耗费内存,另一方面不允许随意改动日志文件。3.用more或less那样的分页显示程序。4.用grep查找特定的消息。每一行表示一个消息,而且都由四个域的固定格式组成:n 时间标签(timestamp),表示消息发出的日期和时间 n 主机名(hostname)(在我们的例子中主机名为escher),表示生成消息的计算机的名字。如果只有一台计算机,主机名就可能没有必要了。但是,如果在网络环境中使用syslog,那么就可能要把不同主机的消息发送到一台服务器上集中处理。n 生成消息的子系统的名字。可以是"kernel",表示消息来自内核,或者是进程的名字,表示发出消息的程序的名字。在方括号里的是进程的PID。n 消息(message),剩下的部分就是消息的内容。举例:在[[email protected] root]# 提示符下输入:tail /var/log/messagesJan 05 21:55:51 localhost last message repeated 3 timesJan 05 21:55:51 localhost kernel: [drm] AGP 0.99 on Intel i810 @ 0xf0000000 128MBJan 05 21:55:51 localhost kernel: [drm] Initialized i830 1.3.2 20021108 on minor0Jan 05 21:55:51 localhost kernel: mtrr: base(0xf0000000) is not aligned on a size(0x12c000) boundaryJan 05 21:56:35 localhost 1月 28 21:56:35 gdm(pam_unix)[4079]: session opened for user root by (uid=0)Jan 05 21:56:39 localhost 1月 28 21:56:39 gconfd (root-4162): 正在启动(版本 2.2.0),pid 4162 用户"root"Jan 05 21:56:39 localhost 1月 28 21:56:39 gconfd (root-4162): 解析的地址"xml:readonly:/etc/gconf/gconf.xml.mandatory"指向位于 0 的只读配置源Jan 05 21:56:39 localhost 1月 28 21:56:39 gconfd (root-4162): 解析的地址"xml:readwrite:/root/.gconf"指向位于 1 的可写入配置源Jan 05 21:56:39 localhost 1月 28 21:56:39 gconfd (root-4162): 解析的地址"xml:readonly:/etc/gconf/gconf.xml.defaults"指向位于 2 的只读配置源Jan 05 21:58:20 localhost kernel: MSDOS FS: IO charset cp936 值得注意的是,与连接时间日志不同,进程统计子系统默认不激活,它必须启动。在Linux系统中启动进程统计使用accton命令,必须用root身份来运行。accton命令的形式为:acctonfile,file必须事先存在。先使用touch命令创建pacct文件:touch/var/log/pacct,然后运行accton:accton/var/log/pacct。一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命令。若要关闭统计,可以使用不带任何参数的accton命令。3.日志系统工作原理及配置3.1 syslog 它同closelog, openlog共同给system logger发送消息。 Linux内核由很多子系统组成,包括网络、文件访问、内存管理等。子系统需要给用户传送一些消息,这些消息内容包括消息的来源及其重要性等。所有的子系统都要把消息送到一个可以维护的公用消息区。于是,就有了一个叫Syslog的程序。 这个程序负责接收消息(比如:系统核心和许多系统程序产生的错误信息、警告信息和其他信息,每个信息都包括重要级),并把消息分发到合适的地方。通常情况下,所有的消息都被记录到特定的文件——日志文件中(通常是/var/adm或/var/log目录下的messages文件),特别重要的消息也会在用户终端窗口上显示出来。 syslog工具有两个重要文件:syslogd和syslog.Conf 它能接受访问系统的日志信息并且根据 "/etc/syslog.conf" 配置文件中的指令处理这些信息。守护进程和内核提供了访问系统的日志信息。因此,任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息。3.2 syslogd守护进程就象其它复杂的操作系统那样,Linux也是由很多不同的子系统组成的。有些叫做daemon的程序一直在后台运行(daemon:守护神之意。也就是说,他们"默默无闻",不需要和用户交互),处理一些象打印、发送邮件、建立Internet连接,等等日常工作。每一个子系统发出日志消息的时候都会给消息指定一个类型。一个消息分成两个部分:"设备(facility)"和"级别(level)"。"设备"标识发出消息的子系统,可以把同一类型的消息组合在一起,"级别"表示消息的重要性,其范围从debug(最不重要)到emerg(最重要),facility和level组合起来称为priority。(详细解释参照5.3)/usr/include/sys/syslog.h中对此有相关的定义。 用户看不到daemon程序,因为它们没有窗口和用户界面。但是,这些程序有时候也要给用户传递一些信息。为了实现这个目的,就需要一个特殊的机制。syslogd就是daemon的一个很好的例子,它在后台运行并且把消息从日志区转移到日志文件中去。函数接口 #include void openlog( char * , int , int ) 其中,可以是以下值的OR组合: LOG_CONS : 如果消息无法送到syslogd,直接输出到系统console。 LOG_NDELAY : 立即打开到syslogd的连接,默认连接是在第一次写入讯息时才打开的。 LOG_PERROR : 将消息也同时送到stderr 上 LOG_PID : 将PID记录到每个消息中 void syslog( int , char * ) 其中,是facility和level的OR组合 void closelog( void ) 一般只需要用syslog()函数,其他函数可以不用。3.3 syslog.conf 这是一个非常重要的文件。位于"/etc/"目录下。通知 syslogd 如何根据设备和信息重要级别来报告信息。该文件使用下面的形式:facility.level actionsyslog.conf 的第一列facility.level用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别。第二列action是消息的分发目标。空白行和以#开头的行是注释,可以忽略。Facility.level 字段也被称做选择域(seletor)。n facility 指定 syslog 功能,主要包括以下这些:auth 由 pam_pwdb 报告的认证活动。authpriv 包括特权信息如用户名在内的认证活动cron 与 cron 和 at 有关的信息。daemon 与 inetd 守护进程有关的信息。kern 内核信息,首先通过 klogd 传递。lpr 与打印服务有关的信息。mail 与电子邮件有关的信息mark syslog 内部功能用于生成时间戳news 来自新闻服务器的信息syslog 由 syslog 生成的信息user 由用户程序生成的信息uucp 由 uucp 生成的信息local0—-local7 与自定义程序使用,例如使用 local5 做为 ssh 功能* 通配符代表除了 mark 以外的所有功能level 级别,决定讯息的重要性。与每个功能对应的优先级是按一定顺序排列的,emerg 是最高级,其次是 alert,依次类推。缺省时,在 /etc/syslog.conf 记录中指定的级别为该级别和更高级别。如果希望使用确定的级别可以使用两个运算符号!(不等)和=。例如:user.=info 表示告知 syslog 接受所有在 info 级别上的 user 功能信息。 n 以下的等级重要性逐次递减: emerg 该系统不可用alert 需要立即被修改的条件crit 阻止某些工具或子系统功能实现的错误条件err 阻止工具或某些子系统部分功能实现的错误条件warning 预警信息notice 具有重要性的普通条件info 提供信息的消息debug 不包含函数条件或问题的其他信息none 没有重要级,通常用于排错* 所有级别,除了nonen action 字段为动作域,所表示的活动具有许多灵活性,特别是,可以使用名称管道的作用是可以使 syslogd 生成后处理信息。syslog 主要支持以下活动:file 将消息追加到指定的文件尾terminal 或 print 完全的串行或并行设备标志符@host 远程的日志服务器username 将消息写到指定的用户named pipe 指定使用 mkfifo 命令来创建的 FIFO 文件的绝对路径。* 将消息写到所有的用户 选择域指明消息的类型和优先级;动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。每个选项是由设备和优先级组成。当指明一个优先级时,syslogd将纪录一个拥有相同或更高优先级的消息。比如如果指明"crit",则所有标为crit、alert和emerg的消息将被纪录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送到什么地方。以下是一个实际站点的配置(syslog.conf)文件:# Store critical stuff in critical#*.=crit;kern.none /var/adm/critical这个将把所有信息以优先权的crit保存在/var/adm/critical文件中,除了一些内核信息# Kernel messages are first, stored in the kernel# file, critical messages and higher ones also go# to another host and to the console#kern.* /var/adm/kernelkern.crit @finlandiakern.crit /dev/consolekern.info;kern.!err /var/adm/kernel-info第一条代码指引一些内核设备访问文件/var/adm/kernel的信息。第二条代码直接引导所有拥有crit和更高优先权的内核信息访问远程主机。如果它们也存储在远程主机上,仍旧可以试着找到毁坏的原因。第四行说明syslogd 保存了所有拥有info 到warning优先级的内核信息在/var/adm/kernel-info文件夹下。所有err和更高优先级的被排除在外。# The tcp wrapper loggs with mail.info, we display# all the connections on tty12#mail.=info /dev/tty12这个引导所有使用mail.info (in source LOG_MAIL | LOG_INFO)的信息到/dev/tty12下,第12个控制台。例如tcpwrapper tcpd(8)载缺省时使用这个 # Store all mail concerning stuff in a filemail.*;mail.!=info /var/adm/mail模式匹配了所有具有mail功能的信息,除了拥有info优先级的。他们将被保存在文件/var/adm/mail中# Log all mail.info and news.info messages to info#mail,news.=info /var/adm/info提取所有具有mail.info 或news.info 功能优先级的信息存储在文件/var/adm/info中# Log info and notice messages to messages file#*.=info;*.=notice;\ mail.none /var/log/messages使所有syslogd日志中具有info 或notice功能的信息存储在文件/var/log/messages中,除了所有mail功能的信息# Log info messages to messages file#*.=info;\ mail,news.none /var/log/messages这个声明使syslogd日志中所有具有info优先权的信息存储在/var/log/messages文件中。但是一些有mail 或news功能的信息不能被存储。# Emergency messages will be displayed using wall#*.=emerg *这行代码告诉syslogd写所有紧急信息到所有当前登陆用户日志中。这个将被实现# Messages of the priority alert will be directed# to the operator#*.alert root,joey*.* @finlandia这个代码指引所有具有alert 或更高级权限的信息到终端操作。第二行代码引导所有信息到叫做finlandia的远程主机。这个代码非常有用,特别是在所有syslog信息将被保存到一台机器上的群集计算机。3.4 klogd 守护进程klog是一个从UNIX内核接受消息的设备 klogd守护进程获得并记录 Linux 内核信息。通常,syslogd 会记录 klogd传来的所有信息。也就是说,klogd会读取内核信息,并转发到syslogd进程。然而,如果调用带有 -f filename 变量的 klogd时,klogd 就在 filename 中记录所有信息,而不是传给 syslogd。当指定另外一个文件进行日志记录时,klogd就向该文件中写入所有级别或优先权。Klogd 中没有和 /etc/syslog.conf 类似的配置文件。使用 klogd 而避免使用syslogd 的好处在于可以查找大量错误。总结其中,箭头代表发送消息给目标进程或者将信息写入目标文件。图1 Linux日志系统日志管理及日志保护 logrotate程序用来帮助用户管理日志文件,它以自己的守护进程工作。logrotate周期性地旋转日志文件,可以周期性地把每个日志文件重命名成一个备份名字,然后让它的守护进程开始使用一个日志文件的新的拷贝。在/var/log/下产生如maillog、maillog.1、maillog.2、boot.log.1、boot.log.2之类的文件。它由一个配置文件驱动,该文件是/etc/logroatate.conf。以下是logroatate.conf文件例子:# see "man logrotate" for details# rotate log files weeklyweekly#以7天为一个周期# keep 4 weeks worth of backlogsrotate 4#每隔4周备份日志文件# send errors to rooterrors root#发生错误向root报告# create new (empty) log files after rotating old onescreate#转完旧的日志文件就创建新的日志文件# uncomment this if you want your log files compressed#compress#指定是否压缩日志文件# RPM packages drop log rotation information into this directoryinclude /etc/logrotate.d# no packages own lastlog or wtmp — we'll rotate them here/var/log/wtmp { monthly create 0664 root utmp rotate 1}# system-specific logs may be configured here 在网络应用中,有一种保护日志的方式,在网络中设定一台秘密的syslog主机,把这台主机的网卡设为混杂模式,用来监听子网内所有的syslog包,这样把所有需要传送日志的主机配置为向一台不存在的主机发送日志即可。这样即使黑客攻陷了目标主机,也无法通过syslog.conf文件找到备份日志的主机,那只是一个不存在的主机。实际操作中还可以辅以交换机的配置,以确保syslog包可以被备份日志主机上的syslog进程接受到。比如把syslog.conf中的传送日志主机设为@192.168.0.13,但实际网络中不存在这个日志主机,实际可能是192.168.0.250或者其他主机正在接受syslog包。
『玖』 org.slf4j 怎么读取log4j的配置文件
package com.slf4j.test;import org.slf4j.*;/** * * @author Tsingxu * */public class test { public static final Logger logger = LoggerFactory.getLogger(test.class); public static void main(String[] args){ System.setProperty("log4j.configuration", "log4j.properties"); test.logger.debug("test start…"); test.logger.error("test error…"); }}在选用 slf4j-api-1.6.4.jar + slf4j-jdk14-1.6.4.jar 时输出在控制台: 2011-11-6 21:55:18 com.slf4j.test.test main 严重: test error…在选用 slf4j-api-1.6.4.jar + slf4j-log4j12-1.6.4.jar + log4j-1.2.13.jar 时输出(前提是有相应的配置文件log4j.properties)到文件logs.log和errors.loglogs.log: 2011-11-06 21:59:33 [ main:0 ] – [ DEBUG ] test start… 2011-11-06 21:59:33 [ main:0 ] – [ ERROR ] test error…errors.log 2011-11-06 21:59:33 [ main:0 ] – [ ERROR ] test error…其中log4j.properties简要配置如下:log4j.debug=true log4j.rootLogger=DEBUG,D,E log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File = logs/logs.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = DEBUGlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] – [ %p ] %m%n#log4j.appender.E.layout.log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/error.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = ERRORlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] – [ %p ] %m%n下面讲一下log4j.properties的配置参数1 基本格式如下:#配置根Loggerlog4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …#配置日志信息输出目的地Appenderlog4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.optionN = valueN #配置日志信息的格式(布局)log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.optionN = valueN 其中 [ level ]日志输出级别共有五级FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 Appender 为日志输出目的地,Log4j提供的appender有以下几种:org.apache.log4j.ConsoleAppender(控制台),org.apache.log4j.FileAppender(文件),org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)Layout:日志输出格式,Log4j提供的layout有以下几种:org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下: %m 输出代码中指定的消息%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名 %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:test.main(test.java: 10 ) 参数意义说明输出级别的种类ERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失INFO 为一般要显示的信息,比如登录登出DEBUG 为程序的调试信息配置日志信息输出目的地log4j.appender.appenderName=??1.org.apache.log4j.ConsoleAppender(控制台)2.org.apache.log4j.FileAppender(文件)3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)配置日志信息的格式log4j.appender.appenderName.layout = ??1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)ConsoleAppender选项Threshold=DEBUG:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。Target=System.err:默认情况下是:System.out,指定输出控制台FileAppender 选项Threshold=DEBUF:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。File=mylog.txt:指定消息输出到mylog.txt文件。Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。RollingFileAppender 选项Threshold=DEBUG:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。File=mylog.txt:指定消息输出到mylog.txt文件。Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。MaxBackupIndex=2:指定可以产生的滚动文件的最大数。日志信息格式中几个符号所代表的含义: -X号: X信息输出时左对齐; %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 %r: 输出自应用启动到输出该log信息耗费的毫秒数 %c: 输出日志信息所属的类目,通常就是所在类的全名 %t: 输出产生该日志事件的线程名 %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10) %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 %%: 输出一个"%"字符 %F: 输出日志消息产生时所在的文件名称 %L: 输出代码中的行号 %m: 输出代码中指定的消息,产生的日志具体信息 %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行示例的配置文件 log4j.propertieslog4j.debug=true log4j.rootLogger=DEBUG,D,Elog4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File = logs/logs.loglog4j.appender.E.Append = truelog4j.appender.E.Threshold = DEBUGlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] – [ %p ] %m%n#log4j.appender.E.layout.log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/error.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = ERRORlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] – [ %p ] %m%n加载配置文件时 控制台会显示log4j解析配置文件的过程 有错误会报错log4j: Parsing for [root] with value=[DEBUG,D,E].log4j: Level token is [DEBUG].log4j: Category root set to DEBUGlog4j: Parsing appender named "D".log4j: Parsing layout options for "D".log4j: Setting property [conversionPattern] to [%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] – [ %p ] %m%n].log4j: End of parsing for "D".log4j: Setting property [threshold] to [ERROR].log4j: Setting property [append] to [true].log4j: Setting property [file] to [logs/error.log].log4j: setFile called: logs/error.log, truelog4j: setFile endedlog4j: Appender [D] to be rolled at midnight.log4j: Parsed "D" options.log4j: Parsing appender named "E".log4j: Parsing layout options for "E".log4j: Setting property [conversionPattern] to [%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] – [ %p ] %m%n].log4j: End of parsing for "E".log4j: Setting property [file] to [logs/logs.log].log4j: Setting property [threshold] to [DEBUG].log4j: Setting property [append] to [true].log4j: setFile called: logs/logs.log, truelog4j: setFile endedlog4j: Appender [E] to be rolled at midnight.log4j: Parsed "E" options.log4j: Finished configuring.
『拾』 如何打JAR包,并读到包外的log4.properties之类的配置文件
你是在eclispe里打包吗,我是在eclipse里打包的,里面会自动生成个mainfest文件,但我们不用系统的这个,打包时选择自己建的mainfest.mf文件,然后把需要的jar包路径都写进来就好了.你的jar包放在哪个文件夹下就写哪个路径呀。比如:1、将第三方的jar包,放在lib目录下2、将lib目录以及jar包,放在你的根目录下3、修改你的jar包的META-INF目录下的Manifest.mf文件。只要注意换行时要顶格写,不要有空格。