Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 偷拍自拍日韩,中文字幕一区中文亚洲,午夜精品视频在线看

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          使用log4j2打印日志

          使用log4j2打印日志

          LF4J

          首先映入眼簾的是slf4j,全稱是Simple Logging Facade for Java。從名字可以看出來這是一個日志框架,采用了Facade的設計模式,說白了,這是一個日志框架接口,應用程序里使用slf4j的接口來打印日志,具體的日志框架可以自由選擇,這樣做是為了方便適配不同的日志框架,比如logback,log4j2等。

          官方網站是 http://www.slf4j.org/index.html

          Log4j

          log4j是apache的開源項目,現在已經到2.0版本,所以也叫log4j2,官方網站是

          http://logging.apache.org/log4j/2.x/index.html


          所以本文的日志打印就是通過應用程序里使用slf4j的接口,然后具體的日志框架是log4j2。

          實驗代碼都在上傳在 https://gitee.com/kunpengku/learn-log4j


          添加maven依賴

          首先需要增加對日志框架包的依賴,如下

          <dependencies>
              <!-- 這個依賴是slf4j的api-->
              <dependency>
                  <groupId>org.slf4j</groupId>
                  <artifactId>slf4j-api</artifactId>
                  <version>1.7.28</version>
              </dependency>
              <!--下面這兩個依賴是log4j2的實現-->
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-api</artifactId>
                  <version>2.13.3</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-core</artifactId>
                  <version>2.13.3</version>
              </dependency>
               <!-- 下面這個依賴是 log4j 橋接slf4j用的-->
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-slf4j-impl</artifactId>
                  <version>2.13.3</version>
              </dependency>
          </dependencies>

          HelloWorld打印

          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;
          
          public class LogMain {
          
              static Logger logger=LoggerFactory.getLogger(LogMain.class);
          
              public static void main(String[] args) {
                  logger.error("Hello World");
              }
          
          }

          這就log4j的helloworld,這是還沒有任何的配置文件,這時,log4j會提供一個默認的配置文件,只能輸出到console上,這里要注意,默認配置的Log Level是ERROR的,所以只有ERROR級別及其以上的打印才能輸出看到,如果這里打印一個info的日志,是不會輸出到屏幕的,因為級別太低,過濾掉了。

          輸出

          08:17:18.767 [main] ERROR com.kpk.LogMain - Hello World

          未完待續

          .修改application.properties配置文件

          #日志配置文件
          logging.config=classpath:logback-spring.xml
          #日志全局等級(自定義)
          log.level=INFO
          #日志保存路徑(自定義)
          log.path=C:/BIN_WNMP/nginx/html/taskservice/logs
          #單個日志大小(自定義)
          log.MaxFileSize=10MB
          #日志文件保留天數(自定義)
          log.MaxHistory=7
          

          不同的環境我們可以定義不同log.level和log.path,一般開發和測試我們希望日志等級為INFO,而生產我們僅希望記錄WARN以上級別的日志

          2.logback-spring.xml放在resources下面

          前幫客戶做合同和協議打印的時候,收集過一些打印相關的資料,整理了一下內容,分享給有需要的朋友。

          • 如何發起打印
          • 如何只局部打印
          • 分頁
          • 不詢問直接打印
          • 無邊距打印
          • 自定義頁碼
          • 橫向打印
          • 雙面打印
          • 打印多份

          發起打印的方法

          1. window.print() 打印整個頁面,所有主要瀏覽器都支持 print() 方法,執行后會啟動一個打印對話框,Chrome的打印對話框自帶預覽功能,IE、火狐只彈出打印設置對話框,沒有預覽功能。
          2. document.execCommand("print") 該方式也兼容各個版本的瀏覽器,功能同window.print()一樣,不過已經不建議使用了。
          3. 使用html 標簽<object>引入Webbrowser控件,這種方式只兼容IE,部分調用方式如下:

          <body>
            <object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0"></object>
          </body>
          <script>
            WebBrowser.ExecWB(1,1) // 打開 
            WebBrowser.ExecWB(2,1) // 關閉現在所有的IE窗口,并打開一個新窗口 
            WebBrowser.ExecWB(4,1) // 保存網頁
            //--------------- 常用 --------------
            WebBrowser.ExecWB(6,1) // 打印
            WebBrowser.ExecWB(6,6) // 直接打印
            WebBrowser.ExecWB(7,1) // 打印預覽
            WebBrowser.ExecWB(8,1) // 打印頁面設置
            //------------------------------------- 
            WebBrowser.ExecWB(10,1) // 查看頁面屬性
            WebBrowser.ExecWB(15,1) // 撤銷
            WebBrowser.ExecWB(17,1) // 全選
            WebBrowser.ExecWB(22,1) // 刷新
            WebBrowser.ExecWB(45,1) // 關閉窗體無提示
          </script>

          1. 直接用JQuery插件
            • jquery.print.js 地址:https://github.com/DoersGuild/jQuery.print
            • jquery.print-preview.js 地址:https://github.com/etimbo/jquery-print-preview-plugin

          通過$("#id").print(/options/)和$('#id').printArea(/options/)調用,其中的options可以配置一些選項,具體看對應的說明文檔。

          1. 采用第三方瀏覽器插件

          收費的、不收費的都有,這里就不多提了。

          復雜的套打可以選第三方插件。jQuery插件是封裝的print方法,我前幾年給銀行網點做了個小系統需要局部打印,選了插件,其實沒有很理想,需要自己做一些調整才行。大部分情況用print就能解決。

          局部打印

          頁面上顯示的內容與最終需要打印的內容之間總是存在差異的,從兩個方向解決這個問題,一個是打印時只顯示需要打印的部分,另一個是打印前調整頁面的內容,只保留需要打印的部分。可以用到下面幾個方法:

          css media query 可以寫一些只在打印時有效的樣式,例如控制頁面某個按鈕打印時隱藏

          @media print{
              .no-print{
                  display:none
              }
          }

          可以用onbeforeprintonafterprint在打印前重新編輯內容,專門送去打印,打印后又處理回來。

          function window.onbeforeprint()
          { //將一些不需要打印的隱藏 }
          
          function window.onafterprint()
          { //放開隱藏的元素 }
          // polyfill
          // 對于基于Webkit的瀏覽器,您可以創建一個等效的結果window.matchMedia('print')。
          // var mediaQueryList=window.matchMedia('print');
          // mediaQueryList.addListener('change', function(mql) {
          //   if(mql.matches) {
          //     console.log('webkit equivalent of onbeforeprint');
          //   }
          // });

          onbeforeprint 在設置頁面打印之后但是在打印對話框出現之前執行 JavaScript

          onafterprint 定義為在設置頁面打印且打印對話框已出現之后,執行一段 JavaScript。只有 Internet Explorer 和 Firefox 支持 onafterprint 事件屬性。但是:在 IE 中,onafterprint=屬性在打印對話框出現之前而不是之后發生。

          onbeforeprint fired before dialog appears and allows one to change html and so on.onafterprint is fired just before dialog appears. It is not even possible to know, whether document was actually printed or user canceled it. Needless to say about when printing finished (if started at all).Again: no event is available to track anything happened in print dialog, i.e. answer to your question is no.Moreover, I hope what your need will never be implemented, cause this allows to frustrate user. He/she asks to print one document, but got something different.

          改變頁面內容的方式體驗比較糟糕,個人不推薦,jq插件默認是用iframe,其實還可以window.open一個單獨的打印頁面,預覽和打印都好解決,兩種方式都需要注意樣式表是在原來的頁面,需要稍微注意下樣式是否有缺失。

          分頁

          page-break-before:always;
          page-break-after:always;
          page-break-inside:avoid;

          用樣式可以控制主動使用分頁符,沒用過的可以看下這里

          http://www.w3school.com.cn/cssref/pr_print_page-break-after.asp

          不詢問直接打印

          有3種辦法,但都有限制

          1. 使用插件實現

          網上下載ScriptX.cab文件
          下載成功后將文件放在項目某個目錄下,然后在頁面body中寫上:

          <object id="factory" name="factory" style="display: none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="ScriptX.cab" viewastext></object>

          codebase屬性為ScriptX.cab文件的放置路徑(絕對路徑)
          調用:factory.printing.Print(false)即可

          1. webbrowser實現

          需要修改IE瀏覽器安全設置,否則還是會彈出對話框

            • 安全 -> 本地Intranet -> 自定義級別 - 找到ActiveX控件和插件項,選擇對未標記為可安全執行的ActiveX控件初始化并執行腳本,再選擇啟用
            • 安全 -> 受信任的站點 -> 自定義級別 - 找到ActiveX控件和插件項,選擇對未標記為可安全執行的ActiveX控件初始化并執行腳本,再選擇啟用
            • 安全 -> 受信任的站點 -> 站點 -> 添加受信任訪問站點(如果是訪問遠程那么是對方IP地址,如果是本地則是本機IP.例如http://192.168.172.1)

          然后執行

          document.getElementById('WebBrowser').ExecWB(6,2,3)
          1. vb實現結合webbrowser實現

          可以使用vb,但是IE11開始已經被微軟廢棄,無法執行vb代碼了。

          execScript('document.getElementById("WebBrowser").ExecWB 6, 2, 3','vbscript');

          無邊距打印

          無邊距打印是打印機的一種功能,即全幅打印,打印紙不留空白。
          適用于照片打印,廣告打印,海報打印等。
          目前的主流打印機都有支持該功能的型號。
          當在應用程序中創建用于打印的數據時,需要調整數據到打印紙的尺寸。如果應用程序中有邊距設置,應確保在打印前將它們設為零。
          注意:
          使用此功能進行打印將比普通打印要花更長時間。
          使用此功能打印輸出的頂部和底部區域的打印質量可能會下降,或者在上面未列出的介質上打印時該區域可能會污損。在打印大量的作業之前先打印一頁以檢查打印質量。

          自定義頁碼

          遇到的一個需求,只打印合同中需要填寫數據的幾頁,不能使用自帶的頁碼,所以把自帶的頁碼去掉,然后寫個div定位到原來頁碼的位置,里面的內容就可以自己控制了。需要注意:
          1. 頁面打印區域的原因,不是在任意打印機上都可以把頁碼打印在紙張的邊緣,需要根據打印機的可打印區域調整。
          2. 頁碼需要使用到絕對定位,所以要求打印的內容是確定的,目前遇到有這個需求的,打印內容也都是固定的。

          橫向打印

          chrome 支持 @page 規則

          @page{size : A4 lanscape;}

          雙面打印

          需要在打印首選項中設置。

          注意:有時候需要通過加個空白頁來讓后面的內容從新的一張紙開始打印。

          打印份數

          打印設置里可以修改,不過很難用程序控制打印份數。可以曲線實現,在打印的時候,直接把內容重復N遍再打印一份出來的就是N份了。

          時代變得真快,現在的IE都已經退出了歷史舞臺。新框架一個接一個冒出來,老系統里的這些老代碼,不知道什么時候會消失。


          主站蜘蛛池模板: 天天爽夜夜爽人人爽一区二区| 久久国产一区二区| 日本一区二区不卡视频| 麻豆一区二区99久久久久| 夜夜精品无码一区二区三区| 日韩精品一区二区三区中文精品| 中文国产成人精品久久一区| 无码人妻av一区二区三区蜜臀| 久久一本一区二区三区| 香蕉在线精品一区二区| 国产一区韩国女主播| 怡红院AV一区二区三区| 精品一区二区三人妻视频| 精品一区二区三区四区在线播放| 高清国产AV一区二区三区| 久久se精品一区二区| 久久久久一区二区三区| 日本一区二区不卡视频| 久久综合精品不卡一区二区| 中文字幕亚洲乱码熟女一区二区| 国产精品99无码一区二区| 午夜精品一区二区三区在线观看| 精品一区二区三区无码视频| 日韩久久精品一区二区三区| 亚洲AV无码一区二区一二区| 亚洲.国产.欧美一区二区三区| 国产高清一区二区三区| 伊人色综合网一区二区三区| 亚洲熟女综合色一区二区三区 | 国产在线观看一区二区三区精品 | 精品理论片一区二区三区| 国产福利酱国产一区二区 | 国产免费无码一区二区| 国产一区二区福利| 久久精品亚洲一区二区三区浴池| 精品无码日韩一区二区三区不卡 | 精品一区二区三区四区| 亚洲视频在线观看一区| 无码国产精品一区二区免费式直播| 亚洲av无码一区二区三区天堂| 国产精品一区二区在线观看|