openwrtsyslogはログをローカルファイルに保存します

syslogは、アプリケーションログをローカルに保存でき、tcpまたはudp
openwrt19.07を介してリモートsyslogサーバーに送信することもできます。

  • システム構成を追加し、ログファイルを指定します:option log_file '/ var / log / message.log'、ログサイズを指定します:option log_size '64'
root@Eric:/# cat /etc/config/system

config system
        option hostname 'Eric'
        option timezone 'UTC'
        option ttylogin '0'
        option log_size '64'
        option log_file '/var/log/message.log'
        option urandom_seed '0'
  • コードを変更し、setsystem。@ system [-1] .log_file = '/ var / log /message.log'をpackage / base-files / files / bin / config_generateに追加します。
generate_static_system() {
    
    
	# eric++
	# set system.@system[-1].hostname='OpenWrt'
	# set system.@system[-1].log_file='/temp/log/message.log'
	# set system.@system[-1].conloglevel='5'
	uci -q batch <<-EOF
		delete system.@system[0]
		add system system
		set system.@system[-1].hostname='Eric'
		set system.@system[-1].timezone='UTC'
		set system.@system[-1].ttylogin='0'
		set system.@system[-1].log_size='64'
		set system.@system[-1].log_file='/var/log/message.log'
		set system.@system[-1].urandom_seed='0'

		delete system.ntp
		set system.ntp='timeserver'
		set system.ntp.enabled='1'
		set system.ntp.enable_server='0'
		add_list system.ntp.server='0.openwrt.pool.ntp.org'
		add_list system.ntp.server='1.openwrt.pool.ntp.org'
		add_list system.ntp.server='2.openwrt.pool.ntp.org'
		add_list system.ntp.server='3.openwrt.pool.ntp.org'
	EOF
  • プログラムでsyslogを呼び出し、ログをグローバルデバッグインターフェイスとして再定義します
#include <syslog.h>

// #define DEBUG

#ifdef DEBUG
#define log(fmt, args...)  \
printf("[%s](%d)" fmt , __func__, __LINE__, ## args)

#define logerr log
#define loginfo log
#else
#define log(fmt, args...)  \
syslog(LOG_NOTICE|LOG_USER,"[%s](%d)" fmt , __func__, __LINE__, ## args)

#define logerr(fmt, args...)  \
syslog(LOG_ERR|LOG_USER,"[%s](%d)" fmt , __func__, __LINE__, ## args)

#define loginfo(fmt, args...)  \
syslog(LOG_INFO|LOG_USER,"[%s](%d)" fmt , __func__, __LINE__, ## args)
#endif
  • その中で、%mは対応するerrnoエラーメッセージ文字列(strerror)に置き換えられます
syslog(LOG_ERR|LOG_USER,"%m\n");
  • テスト:
while (1) {
    
    
  	sleep(2);
   	log("cnt=%d\n",cnt++);
}
  • logread -fを使用して、プログラムによって出力されたログをリアルタイムで照会します。
root@Eric:/# logread -f
Sun Sep  6 17:14:23 2020 user.notice : [main](33)cnt=420
Sun Sep  6 17:14:25 2020 user.notice : [main](33)cnt=421
Sun Sep  6 17:14:27 2020 user.notice : [main](33)cnt=422
Sun Sep  6 17:14:29 2020 user.notice : [main](33)cnt=423
Sun Sep  6 17:14:31 2020 user.notice : [main](33)cnt=424


おすすめ

転載: blog.csdn.net/pyt1234567890/article/details/111191973