最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java如何將控制臺(tái)輸出日志寫入到指定文件中

 更新時(shí)間:2024年04月24日 10:55:44   作者:彭先生吖  
這篇文章主要介紹了java如何將控制臺(tái)輸出日志寫入到指定文件中問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java將控制臺(tái)輸出日志寫入到指定文件中

設(shè)置控制臺(tái)日志輸出方式

/**
 * 控制臺(tái)日志寫入文件
 * @author Mr peng
 *
 */
@Component
public class ConsoleLogWrite extends OutputStream{
	
	//window輸出文件路徑
	@Value("${consoleLogWrite.windowsUrl}")
	private String consoleLogWriteWindowsUrl;
	//linux輸出文件路徑
	@Value("${consoleLogWrite.linuxUrl}")
	private String consoleLogWriteLinuxUrl;
	
	private OutputStream oldOutputStream, newOutputStream;
	
	public ConsoleLogWrite() {
		
	}
	
	public ConsoleLogWrite(OutputStream oldOutputStream, OutputStream newOutputStream) {
        this.oldOutputStream = oldOutputStream;
        this.newOutputStream = newOutputStream;
    }
	
	//重寫輸出流的方式,改為兩種,一種控制臺(tái)輸出,一種寫入指定文件
	@Override
	public void write(int b) throws IOException {
		oldOutputStream.write(b);
		newOutputStream.write(b);
	}

	//當(dāng)前bean初始化前調(diào)用
	@PostConstruct
	public void writeLogToFile() throws Exception {
		File tmplLogFile = new File(getUploadPath(consoleLogWriteLinuxUrl, consoleLogWriteWindowsUrl));
		//啟一個(gè)定時(shí)線程延遲15分鐘后每過30分鐘檢查文件大小是否超過100M,如果超過則刪除重新創(chuàng)建
		ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
		executorService.scheduleWithFixedDelay(new Runnable() {
			@Override
			public void run() {
				try {
					//文件不存在就創(chuàng)建
			        if (!tmplLogFile.exists()) {
			            try {
							tmplLogFile.createNewFile();
						} catch (IOException e) {
							e.printStackTrace();
						}
			        }
					//文件大于100M就刪除,重新創(chuàng)建
			        double KB = 1024 * 1024;
			        double MB = KB * 1024;
			        if(tmplLogFile.length() > MB * 100){
			            tmplLogFile.delete();
			        }
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
		}, 15, 30, TimeUnit.MINUTES);
		//設(shè)置輸出模式
        PrintStream oldOutputStream = System.out;
        OutputStream newOutputStream = new FileOutputStream(tmplLogFile);
        ConsoleLogWrite multiOutputStream = new ConsoleLogWrite(oldOutputStream, new PrintStream(newOutputStream));
        System.setOut(new PrintStream(multiOutputStream));
        System.setErr(new PrintStream(multiOutputStream));
	}
	
	/**
     * 根據(jù)當(dāng)前系統(tǒng)返回對(duì)應(yīng)的路徑 
     * @param linuxPath
     * @param windowsPath
     * @return
     */
    public static String getUploadPath(String linuxPath, String windowsPath) {
    	if(System.getProperty("os.name").toLowerCase().indexOf("linux") > 0) {
    		return linuxPath;
    	}
    	return windowsPath;
    }
	
}

前端調(diào)用接口獲取最新日志信息

@RestController
@RequestMapping("/portal")
public class ConsoleLogReadRes extends BaseController{

	//window輸出文件路徑
	@Value("${consoleLogWrite.windowsUrl}")
	private String consoleLogWriteWindowsUrl;
	//linux輸出文件路徑
	@Value("${consoleLogWrite.linuxUrl}")
	private String consoleLogWriteLinuxUrl;	
	//記錄日志文件最后的大小
	private long lastTimeFileSize = 0; 	

	@GetMapping("/getConsoleLogInfo")
	public BaseResultVO getConsoleLogInfo(){
		
		File tmplLogFile = new File(FileUtils.getUploadPath(consoleLogWriteLinuxUrl, consoleLogWriteWindowsUrl));
        List<String> result = new ArrayList<String>();
		RandomAccessFile randomAccessFile = new RandomAccessFile(tmplLogFile, "rw");
		randomAccessFile.seek(lastTimeFileSize);    //從上次日志文件后開始讀取
		while (randomAccessFile.readLine() != null) {
			//將每一行的數(shù)據(jù)都存入集合中,統(tǒng)一返回
			result.add(new String(randomAccessFile.readLine().getBytes("ISO8859-1")));		
		}
		lastTimeFileSize = randomAccessFile.length();
		return genSuccessResult(result);
		
	}

}

java中自定義日志輸出到指定文件

創(chuàng)建一個(gè)類,以便調(diào)用方法,類名自定義,我這里定義類名是: WrittenLog

1.定義一個(gè)固定的路徑

private static final String fileXml = "C:/Users/zhangjie/Desktop/loger/loger";

2.定義一個(gè)字符串寫入的方法

其中有兩個(gè)參數(shù):

  • 一個(gè)是絕對(duì)路徑(fileXml)
  • 一個(gè)是傳入的字段串(context)
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
//把參數(shù)寫入日志文件
    private void logger (String context,String fileXml) throws IOException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String trace = sdf.format(new Date().getTime());定義一個(gè)系統(tǒng)時(shí)間
        File file = new File(fileXml);
        if (!file.exists()) {檢測是否有l(wèi)ogger.TXT文件
            file.mkdir();
        }
        
        String path = file+".txt";
        File writeFile = new File(path);
        if (!writeFile.exists()) {檢測是否在該路徑下有l(wèi)ogger文件夾
            writeFile.createNewFile();
            writeFile = new File(path);
        }
        FileOutputStream fw = new FileOutputStream(writeFile,true);
        Writer out = new OutputStreamWriter(fw,"UTF-8");設(shè)置字符集編碼格式
        out.write(trace+"----"+context);
        String newFile = System.getProperty("line.separator");
        out.write(newFile);
        out.close();
            fw.flush();
        fw.close();
                下列是xml格式的參數(shù)匹配,如果是json格式參數(shù)無需下列代碼
        Pattern p = Pattern.compile(">(\\s*|\n|\t|\r)<");  
        Matcher m = p.matcher(response);  
        String returnxml = m.replaceAll("><");  
        DocumentBuilderFactory builderFactory =         DocumentBuilderFactory.newInstance();
        Document doc = null;
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        if(returnxml!=null){
            StringReader sr = new StringReader(returnxml);
            InputSource is = new InputSource(sr);
            doc = builder.parse(is);
        }else{
            throw new Exception("沒有收款單數(shù)據(jù)傳入!");
        }
    }

3.創(chuàng)建實(shí)例,調(diào)用方法

WrittenLog write = new WrittenLog();
write.logger(context,fileXml);

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot項(xiàng)目中使用JOSN解析庫的方法

    springboot項(xiàng)目中使用JOSN解析庫的方法

    JSON,全程是JavaScript Object Notation,是一種輕量級(jí)的數(shù)據(jù)交換格式,本文給大家介紹springboot項(xiàng)目中使用JOSN解析庫的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-06-06
  • Java中return的用法(兩種)

    Java中return的用法(兩種)

    這篇文章主要介紹了Java中return的用法(兩種)的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Intellij IDEA調(diào)試技巧的深入講解

    Intellij IDEA調(diào)試技巧的深入講解

    這篇文章主要給大家介紹了關(guān)于Intellij IDEA調(diào)試技巧的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 深入理解SpringMVC的參數(shù)綁定與數(shù)據(jù)響應(yīng)機(jī)制

    深入理解SpringMVC的參數(shù)綁定與數(shù)據(jù)響應(yīng)機(jī)制

    本文將深入探討SpringMVC的參數(shù)綁定方式,包括基本類型、對(duì)象、集合等類型的綁定方式,以及如何處理參數(shù)校驗(yàn)和異常。同時(shí),本文還將介紹SpringMVC的數(shù)據(jù)響應(yīng)機(jī)制,包括如何返回JSON、XML等格式的數(shù)據(jù),以及如何處理文件上傳和下載。
    2023-06-06
  • Java 深入探究講解工廠方法模式

    Java 深入探究講解工廠方法模式

    工廠方法模式(FACTORY METHOD)是一種常用的類創(chuàng)建型設(shè)計(jì)模式,此模式的核心精神是封裝類中變化的部分,提取其中個(gè)性化善變的部分為獨(dú)立類,通過依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的。它的核心結(jié)構(gòu)有四個(gè)角色,分別是抽象工廠、具體工廠、抽象產(chǎn)品、具體產(chǎn)品
    2022-04-04
  • Java的線程阻塞、中斷及優(yōu)雅退出方法詳解

    Java的線程阻塞、中斷及優(yōu)雅退出方法詳解

    這篇文章主要介紹了Java的線程阻塞、中斷及優(yōu)雅退出方法詳解,Java中的線程阻塞是指當(dāng)一個(gè)線程無法繼續(xù)執(zhí)行時(shí),它會(huì)進(jìn)入阻塞狀態(tài),直到某個(gè)條件滿足后才能繼續(xù)執(zhí)行,線程阻塞可以通過多種方式實(shí)現(xiàn),需要的朋友可以參考下
    2023-10-10
  • MybatisPlus使用idworker解決雪花算法重復(fù)

    MybatisPlus使用idworker解決雪花算法重復(fù)

    本文主要介紹了MybatisPlus使用idworker解決雪花算法重復(fù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • SpringBoot重啟后,第一次請(qǐng)求接口請(qǐng)求慢的問題及解決

    SpringBoot重啟后,第一次請(qǐng)求接口請(qǐng)求慢的問題及解決

    這篇文章主要介紹了SpringBoot重啟后,第一次請(qǐng)求接口請(qǐng)求慢的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • springboot創(chuàng)建多module項(xiàng)目的實(shí)例

    springboot創(chuàng)建多module項(xiàng)目的實(shí)例

    這篇文章主要介紹了springboot創(chuàng)建多module項(xiàng)目的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java中將一個(gè)實(shí)體類復(fù)制到另一個(gè)實(shí)體類的3種方法示例

    java中將一個(gè)實(shí)體類復(fù)制到另一個(gè)實(shí)體類的3種方法示例

    這篇文章主要給大家介紹了關(guān)于java中將一個(gè)實(shí)體類復(fù)制到另一個(gè)實(shí)體類的3種方法,所謂實(shí)體類就是一個(gè)擁有Set和Get方法的類,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07

最新評(píng)論

太湖县| 思茅市| 龙江县| 商城县| 武川县| 莱阳市| 东城区| 盘锦市| 沙洋县| 嘉义市| 沈阳市| 城步| 沧州市| 周宁县| 修水县| 北海市| 洪雅县| 海晏县| 桃园市| 长宁县| 宜春市| 邮箱| 梁河县| 墨竹工卡县| 深泽县| 翁牛特旗| 习水县| 精河县| 宽甸| 林芝县| 兴国县| 庆阳市| 万源市| 全南县| 天全县| 东光县| 黄冈市| 三河市| 怀宁县| 安陆市| 个旧市|