欢迎与我们联系!我们很乐意回答您的任何问题或疑虑。请使用以下电子邮件地址发送电子邮件给我们:
请在主题行中简要描述您的查询,这样我们才能将您的电子邮件路由到最合适的团队。
我们会在收到您的电子邮件后尽快回复。感谢您的耐心和理解。
请注意:
我们期待收到您的来信!
一句两句说不清楚,给你个链接,介绍的比较详细 使用一.参数意义说明输出级别的种类ERROR、WARN、INFO、DEBUGERROR 为严重错误 主要是程序的错误WARN 为一般警告,比如session丢失INFO 为一般要显示的信息,比如登录登出DEBUG 为程序的调试信息配置日志信息输出目的 = (控制台)(文件)(每天产生一个日志文件)(文件大小到达指定尺寸的时候产生一个新的文件)(将日志信息以流格式发送到任意指定的地方)配置日志信息的格式 = (以HTML表格形式布局),(可以灵活地指定布局模式),(包含日志信息的级别和信息字符串),(包含日志产生的时间、线程、类别等等信息)控制台选项Threshold=DEBUG:指定日志消息的输出最低层次。 ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 Target=:默认情况下是,指定输出控制台FileAppender 选项Threshold=DEBUF:指定日志消息的输出最低层次。 ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 File=:指定消息输出到文件。 Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 RollingFileAppender 选项Threshold=DEBUG:指定日志消息的输出最低层次。 ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 File=:指定消息输出到文件。 Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到.1文件。 MaxBackupIndex=2:指定可以产生的滚动文件的最大数。 =%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n日志信息格式中几个符号所代表的含义: -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)的组合,包括类目名、发生的线程,以及在代码中的行数。 举例 (:10) %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 %%: 输出一个%字符 %F: 输出日志消息产生时所在的文件名称 %L: 输出代码中的行号 %m: 输出代码中指定的消息,产生的日志具体信息 %n: 输出一个回车换行符,Windows平台为\r\n,Unix平台为\n输出日志信息换行 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。 如: 1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。 2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,-号指定左对齐。 3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。 二.文件配置=DEBUG,A1,R#=INFO,A1,R# ConsoleAppender 输出.A1===%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n# File 输出 一天一个文件,输出路径可以定制,一般在根路径下.R==blog_====%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n文件配置Sample2下面给出的Log4J配置文件实现了输出到控制台,文件,回滚文件,发送日志邮件,输出到数据库日志表,自定义标签等全套功能。 =DEBUG,CONSOLE,A1,im #DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE =true ################### # Console Appender ################### = =DEBUG = = =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n ##################### # File Appender ##################### = = =false = =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n # Use this layout for LogFactor 5 analysis ######################## # Rolling File ######################## _FILE= _=ERROR _= _=true _=10KB _=1 _= _=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #################### # Socket Appender #################### = =localhost =5001 =true # Set up for Log Facter 5 = =[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n ######################## # Log Factor 5 Appender ######################## 5_APPENDER=5Appender 5_=2000 ######################## # SMTP Appender ####################### = =FATAL =10 = = =Log4J Message = = =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n ######################## # JDBC Appender ####################### = =jdbc:mysql://localhost:3306/test = =root = =INSERT INTO LOG4J (Message) VALUES ([framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n) = =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n .A1= =4j =4j = ################### #自定义Appender ################### = = = username = password = = =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n三.高级使用实验目的: 1.把FATAL级错误写入2000NT日志 2. WARN,ERROR,FATAL级错误发送email通知管理员 3.其他级别的错误直接在后台输出 实验步骤: 输出到2000NT日志 1.把Log4j压缩包里的拷到WINNT\SYSTEM32目录下 2.写配置文件 # 在2000系统日志输出 =FATAL, A8 # APPENDER A8 .A8= =JavaTest = =%-4r %-5p [%t] %37c %3x - %m%n 3.调用代码: Logger logger2 = (NTlog); //要和配置文件中设置的名字相同 (debug!!!); (info!!!); (warn!!!); (error!!!); //只有这个错误才会写入2000日志 (fatal!!!);发送email通知管理员: 1. 首先下载JavaMail和JAF,在项目中引用和。 2. 写配置文件 # 将日志发送到email =WARN,A5 #APPENDER A5 .A5= =5 = = =ErrorLog = = =%-4r %-5p [%t] %37c %3x - %m%n 3.调用代码: //把日志发送到mail Logger logger3 = (MailLog); (warn!!!); (error!!!); (fatal!!!); 在后台输出所有类别的错误: 1. 写配置文件 # 在后台输出 =DEBUG, A1 # APPENDER A1 .A1= = =%-4r %-5p [%t] %37c %3x - %m%n 2.调用代码 Logger logger1 = (console); (debug!!!); (info!!!); (warn!!!); (error!!!); (fatal!!!); -------------------------------------------------------------------- 全部配置文件 # 在后台输出 =DEBUG, A1 # APPENDER A1 .A1= = =%-4r %-5p [%t] %37c %3x - %m%n # 在2000系统日志输出 =FATAL, A8 # APPENDER A8 .A8= =JavaTest = =%-4r %-5p [%t] %37c %3x - %m%n # 将日志发送到email =WARN,A5 #APPENDER A5 .A5= =5 = = =ErrorLog = = =%-4r %-5p [%t] %37c %3x - %m%n 全部代码/* * 创建日期 2003-11-13 */ package ; import 4j.*; //import .*; //import .*; /** * @author yanxu */ public class Log4jTest { public static void main(String args[]) { (); //在后台输出 Logger logger1 = (console); (debug!!!); (info!!!); (warn!!!); (error!!!); (fatal!!!); //在NT系统日志输出 Logger logger2 = (NTlog); //NTEventLogAppender nla = new NTEventLogAppender(); (debug!!!); (info!!!); (warn!!!); (error!!!); //只有这个错误才会写入2000日志 (fatal!!!); //把日志发送到mail Logger logger3 = (MailLog); //SMTPAppender sa = new SMTPAppender(); (warn!!!); (error!!!); (fatal!!!); } }
在发布房屋出租广告时,确保信息清晰、简洁且具有吸引力至关重要。 首先,明确地列出房源的位置,例如:位于某繁华地段,交通便利。 接着,描述房屋的基本信息,如面积和户型,例如:这套房子总面积为80平方米,格局为两室一厅,满足舒适生活需求。 租金方面,要明码标价,例如:月租金5000元,物超所值。 房内的设施要详细描述,如家电、家具齐全,例如:厨房配备全新燃气灶和冰箱,卧室有大床和空调,让租客一目了然。 接下来,提供联系方式,可以使用安全的在线平台,如:有意者请通过电话号码010-或者邮箱联系我们,方便快捷。 若是在网络平台上发布,可以参考58同城等知名租房网站的模板和格式,确保信息合规且易于查找。 同时,附上房源图片或视频,让潜在租客能更直观地了解房屋状况。 最后,别忘了注明租期和付款方式,如:长租一年,押一付三,让双方都清楚明白。 综上所述,一个成功的房屋出租广告应包含明确的位置、详细信息、联系方式以及可能的附加内容,确保信息完整、准确,方便潜在租客快速了解并决定是否租住。
这个...........楼上的诸位说的都是什么啊。 今天刚好看到这个问题,把你的E-mail给我把,我有纯c的源码(RLC)。 算了,直接贴关键部分吧。 这个有一点C++成分,很容易改的。 bool CompressRunLength(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen, int nBitsPerSample, void* nRuns, int nRunCount, int nRunSize);bool DecompressRunLength(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen);#define GetDWORD(buf,bit,mask) ((*(DWORD*)(((BYTE*)buf)+((bit)>>3)))>>((bit)&7)&(mask))#define GetWORD(buf,bit,mask) ((*(WORD*)(((BYTE*)buf)+((bit)>>3)))>>((bit)&7)&(mask))int GetBitCount(int n){ int nBitCount = 0; while(n)n >>= 1, nBitCount++; return nBitCount;}int BinarySearch(void* pValue, int nVlaueSize, void* pArray, int nCount){ int nIndex, nResult, nStart = 0, nEnd = nCount-1; while(nStart <= nEnd) {nIndex = (nEnd+nStart)/2;if((nResult = memcmp((BYTE*)pArray+nIndex*nVlaueSize, pValue, nVlaueSize)) == 0) return nIndex;if(nResult > 0) nEnd = nIndex-1;else nStart = nIndex+1; } return -1;}bool CompressRunLength(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen, int nBitsPerSample, void* nRuns, int nRunCount, int nRunSize){ pDes = (BYTE*)malloc(nSrcLen*2); memset(pDes, 0, nSrcLen*2); nDesLen = sizeof(DWORD); *(DWORD*)pDes = nSrcLen; // save source length *(pDes+nDesLen++) = nBitsPerSample; // save bits per sample *(pDes+nDesLen++) = nRunCount;// save runs count *(pDes+nDesLen++) = nRunSize;// save run bytes memcpy(pDes+nDesLen, nRuns, nRunCount*nRunSize); // save runs nDesLen += nRunCount*nRunSize; nDesLen <<= 3; // bytes to bits if(nRunCount == 0)nRunCount = 256, nRunSize = 1, nRuns = NULL; int nBitsPerTypeIndex = GetBitCount(nRunCount-1); int nMaxRunLength = (1 << nBitsPerSample)-1, nRunLength, nRunIndex, nByte = 0; // loop in the source buffer while(nByte < nSrcLen)if((nRuns && (nRunIndex = BinarySearch(pSrc+nByte, nRunSize, nRuns, nRunCount)) != -1 && memcmp(pSrc+nByte+nRunSize, (BYTE*)nRuns+nRunIndex*nRunSize, nRunSize) == 0) || (!nRuns && (nRunIndex = *(pSrc+nByte)) == *(pSrc+nByte+1))){ // set bit to 1 to indicate type found *(pDes+(nDesLen>>3)) |= 1 << (nDesLen&7); *(DWORD*)(pDes+(++nDesLen>>3)) |= nRunIndex << (nDesLen&7); nDesLen += nBitsPerTypeIndex; // skip the two repeated runs nByte += nRunSize*2; // get run length - 2 (without the two repeated runs) nRunLength = 0; while(nRunLength < nMaxRunLength && nByte < nSrcLen && ((nRuns && memcmp(pSrc+nByte, (BYTE*)nRuns+nRunIndex*nRunSize, nRunSize) == 0) || (!nRuns && (BYTE)nRunIndex == *(pSrc+nByte))))nRunLength++, nByte += nRunSize; // save run length and increment destination length by bits per sample *(DWORD*)(pDes+(nDesLen>>3)) |= nRunLength << (nDesLen&7); nDesLen += nBitsPerSample;}else // copy one byte *(WORD*)(pDes+(++nDesLen>>3)) |= *(pSrc+nByte++) << (nDesLen&7), nDesLen += 8; nDesLen = (nDesLen+7)/8; // bits to bytes pDes = (BYTE*)realloc(pDes, nDesLen); return true;}bool DecompressRunLength(BYTE *pSrc, int nSrcLen, BYTE *&pDes, int &nDesLen){ if(nSrcLen == 0)return true; // allocate destination buffer nDesLen = *(DWORD*)pSrc; pDes = (BYTE*)malloc(nDesLen); memset(pDes, 0, nDesLen); // copy compression information int nSrcIndex = sizeof(DWORD); int nBitsPerSample = *(pSrc+nSrcIndex++); int nRunCount = *(pSrc+nSrcIndex++); int nRunSize = *(pSrc+nSrcIndex++); void* nRuns = pSrc+nSrcIndex; nSrcIndex += nRunSize*nRunCount; nSrcIndex <<= 3; // bytes to bits if(nRunCount == 0)nRunCount = 256, nRunSize = 1, nRuns = NULL; int nBitsPerTypeIndex = GetBitCount(nRunCount-1); int nMaxTypeIndex = (1 << nBitsPerTypeIndex)-1; int nMaxRunLength = (1 << nBitsPerSample)-1; int nDesIndex = 0, nRunLength, nRunIndex, nRun, nByte; nSrcLen <<= 3; // bytes to bits while(nSrcIndex < nSrcLen-8)if((*(pSrc+(nSrcIndex>>3)) >> (nSrcIndex++&7)) & 1){ nRunIndex = GetDWORD(pSrc, nSrcIndex, nMaxTypeIndex), nSrcIndex += nBitsPerTypeIndex; nRunLength = GetDWORD(pSrc, nSrcIndex, nMaxRunLength)+2, nSrcIndex += nBitsPerSample; for(nRun = 0; nRun < nRunLength; nRun++)for(nByte = 0; nByte < nRunSize; nByte++, nDesIndex += 8) *(WORD*)(pDes+(nDesIndex>>3)) |= nRuns ? GetWORD(nRuns+nRunSize*nRunIndex, nByte<<3, 0xff) : (BYTE)nRunIndex;}else // copy one byte *(WORD*)(pDes+(nDesIndex>>3)) |=GetWORD(pSrc, nSrcIndex, 0xff), nDesIndex += 8, nSrcIndex += 8; return true;}
上一篇: 电话:0123-456-7890
下一篇: 雷速体育直播:见证激烈的C77足球盛宴